Jump to content


Photo
* * * * - 4 votes

Добавление фиксированный суммы к цене корзины в зависимости от выбора чекбокса

рецепт

102 replies to this topic

#71 Sliapy

Sliapy
  • JBZoo User (rus)
  • User rate: 50.5
  • posts: 6393
  • topics: 15

Posted 08 April 2014 - 10:12

Абсолютно не понял, что Вы имеете в виду.


  • 0
[color=#aa0000]Не забывайте нажимать кнопку "Вопрос Решён" под сообщением, которое решило Вашу проблему.[/color]

#72 Евгения

Евгения
  • JBZoo User (rus)
  • User rate: 11.4
  • posts: 505
  • topics: 25

Posted 10 April 2014 - 00:45

Для того чтобы нормально присылались письма внесла правки с 88 строки (Иначе он у меня не правильно складывал сумму доставки и сумму заказа):

media/zoo/applications/jbuniversal/elements/jbbasketitems/tmpl/jbbasketitems.php

<tfoot><tr>
                <td colspan="3">&nbsp;</td>
                <td><strong><?php echo @$_POST['d_id_2'];?>:</strong></td>
                <td class="jsTotalCount"></td>
                <td class="jsTotalPrice"><?php echo $this->app->jbmoney->toFormat(@$_POST['d_id'], $currency);?></td>
            </tr>
            <tr>
                <td colspan="3">&nbsp;</td>
                <td><strong><?php echo JText::_('JBZOO_CART_TOTAL'); ?>:</strong></td>
                <td class="jsTotalCount"><?php echo $count; ?></td>
                <td class="jsTotalPrice"><?php echo ($this->app->jbmoney->toFormat($summa + intval(@$_POST['d_id']), $currency)); ?></td>
            </tr>
            </tfoot>
            

Малость поменяла javascript чтобы он смотрел что введено в строку доставки и действовал соответственно.

У меня типы доставки вот такие:

Стандартная доставка по Москве (в пределах МКАД) заказа до 6000 руб - 400 руб.
Стандартная доставка по Москве (в пределах МКАД) заказа более 6000 руб  - 0 (бесплатно)
Доставка по Москве и МО грузовым транспортом - оговаривается с менеджером (ставим 0)
Транспортная компания (оговаривается с менеджером) - ставим 0
Почта России - то же самое

ЕМС - то же самое

Так вот, цель была в том, чтобы он во-первых проверял что написано после двоеточия, и соответственно писал в заказе сумму заказа без доставки. В итоге получилось вот так: 

Untitled-1.jpg

 

Скрипт стал выглядеть так:

$('.delivery input[type=radio]').click(function() {
          var deliv_summ;
          var deliv_summ_arr;
          var deliv_summ_label_arr =  $(this).next().text().split(':');
          // сумма, если она указана
          var delivSumm = parseInt(deliv_summ_label_arr['1'].replace(/\D/g, ''));
          var delivLabel = deliv_summ_label_arr['0'];
          
          if (isNaN(delivSumm)) {
            delivSumm = 0;
          }
          
          $('#summ_delivery_label').text(delivLabel+':');
          $('#summ_delivery').text(delivSumm + ' р.');          
          
          $('#d_id').val(delivSumm);
          $('#d_id_2').val(delivLabel);

          var summ_item = $('.jsTotalPrice').text().split(" р.");
          summ_item = summ_item[0].replace(/[ ]/,'')
          var su = parseInt(summ_item)+parseInt(delivSumm); 
          var su2 = su+''; 
          su2 = su2.replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1 ");
          $('#summ_full').text(su2+' p.');
        });

На мыло, как я уже писала выше присылается правильный вариант.

 

А теперь вопрос:

1. На скрине видно, что радио-кнопки у меня почему-то выводятся в строку (во всех остальных местах, списком). Где файл, который отвечает за их вывод в заказе?

 

2. Все вышеперечисленное, конечно работает, но проблема в том, что данные для "Моих заказов", для авторизованных пользователей берутся как раз из jbbasketitems.php, который понятия и не имеет откуда взять переменные d_id_2 и d_id ибо в базу они не пишутся. и выдает ошибку вот такую:

 

Untitled-2.jpg

 

Очень хотелось бы это исправить. Вопрос как?

 

UPD: убрала вывод сообщения об ошибке. В принципе второй вопрос снимается, потому что в моем случае нет смысла указывать в старых заказах общую стоимость.

 

В tfoot для переменных $_POST['d_id_2'] и $_POST['d_id'] добавила @. Стало: @$_POST['d_id_2'] и @$_POST['d_id']. Код выше - исправила.


Edited by Евгения, 25 April 2014 - 21:40.

  • 0

"Это бессмысленно" - сказал разум. "Это нелепо" - заметил опыт. "Это бесполезно" - отрезал здравый смысл. "О! Вот так нормально!" - обрадовался клиент.

Что, где лежит (тема-сборник про пути к файлам)


#73 Евгения

Евгения
  • JBZoo User (rus)
  • User rate: 11.4
  • posts: 505
  • topics: 25

Posted 10 April 2014 - 23:01

Товарищи техподдержка. Вы где? :)

 

З.Ы. Проверила свою версию скрипта на последнем обновлении - работает ^_^


Edited by Евгения, 15 April 2014 - 21:25.

  • 0

"Это бессмысленно" - сказал разум. "Это нелепо" - заметил опыт. "Это бесполезно" - отрезал здравый смысл. "О! Вот так нормально!" - обрадовался клиент.

Что, где лежит (тема-сборник про пути к файлам)


#74 Vitaly

Vitaly
  • JBZoo User (rus)
  • User rate: ~
  • posts: 8
  • topics: 3

Posted 25 April 2014 - 19:54

Сделал все по инструкции, при переходе к выбору платежной системы из скрипта jbbasketitems.php не видно переменой $_POST, т.е. она пустая, а следовательно итоговая сумма не меняется. Подскажите куда копать.

 

Заметил что ответом на POST запрос возвращается 303-я ошибка. Наверное проблема в этом.

 

POST: http://site.com/component/zoo/

elements[c1b20e16-3869-40... олдолдо elements[7ced0571-b1d7-43... олдодло elements[1e680d82-aa09-40... courier elements[1e680d82-aa09-40... 1 elements[6c12193f-f363-4d... 2000 elements[c2e23d15-41c5-44... ролртдлотдл elements[5358536e-8edd-4f...   elements[1af7e792-bcff-4a... _jbbaskteitems_ submit Оформить заказ d_id 2000 d_id_2 2000 руб. option com_zoo controller basket task createOrder type order app_id 18 Itemid 123 ec4a6efe1cf51a60afa9f95ec... 1

 

Ответ:

HTTP/1.1 303 See other
Date: Fri, 25 Apr 2014 19:19:20 GMT
Server: Apache
Location: http://site.com/comp...&order_id=51399
X-Powered-By: PleskLin
Content-Length: 0
Connection: close
Content-Type: text/html; charset=utf-8

 

т.е. происход POST, а потом GET который возвращает код страницы и в котором из jbbasketitems.php уже не видно POST


Edited by Vitaly, 25 April 2014 - 20:26.

  • 0

#75 Евгения

Евгения
  • JBZoo User (rus)
  • User rate: 11.4
  • posts: 505
  • topics: 25

Posted 25 April 2014 - 21:25

Я выше написала уже, что переменные d_id и d_id_2 не сохраняются в БД, соответственно брать их второй раз неоткуда. Проблема в этом. Соответственно, GET взять нечего :)

 

Это надо создавать табличку в БД и хранить в ней данные, и обращаться уже к этой табличке. Больше "умных идей" по-этому вопросу у меня нет  >.<


Edited by Евгения, 25 April 2014 - 21:28.

  • 0

"Это бессмысленно" - сказал разум. "Это нелепо" - заметил опыт. "Это бесполезно" - отрезал здравый смысл. "О! Вот так нормально!" - обрадовался клиент.

Что, где лежит (тема-сборник про пути к файлам)


#76 Vitaly

Vitaly
  • JBZoo User (rus)
  • User rate: ~
  • posts: 8
  • topics: 3

Posted 25 April 2014 - 21:43

Я выше написала уже, что переменные d_id и d_id_2 не сохраняются в БД, соответственно брать их второй раз неоткуда. Проблема в этом. Соответственно, GET взять нечего :)

 

Это надо создавать табличку в БД и хранить в ней данные, и обращаться уже к этой табличке. Больше "умных идей" по-этому вопросу у меня нет  >.<

 

Так при чем тут БД ?

У меня POST не доходит.

Не знаю как лечить 303 ошибку. В прошлый раз все закончилось полной переустановкой =(


  • 0

#77 Евгения

Евгения
  • JBZoo User (rus)
  • User rate: 11.4
  • posts: 505
  • topics: 25

Posted 19 May 2014 - 22:02

UPD через пару дней прикреплю доведенную до ума рабочую версию скрипта. А то после обновления он бузил и пересчитывать не хотел.


  • 0

"Это бессмысленно" - сказал разум. "Это нелепо" - заметил опыт. "Это бесполезно" - отрезал здравый смысл. "О! Вот так нормально!" - обрадовался клиент.

Что, где лежит (тема-сборник про пути к файлам)


#78 alexspi1

alexspi1
  • JBZoo User (rus)
  • User rate: 0.1
  • posts: 56
  • topics: 16

Posted 04 June 2014 - 10:54

UPD через пару дней прикреплю доведенную до ума рабочую версию скрипта. А то после обновления он бузил и пересчитывать не хотел.
 

к сожалению у меня на последней версии ваш последний вариан  не работает


  • 0

#79 Евгения

Евгения
  • JBZoo User (rus)
  • User rate: 11.4
  • posts: 505
  • topics: 25

Posted 04 June 2014 - 22:29

к сожалению у меня на последней версии ваш последний вариан  не работает

Знаю. Не обновляла еще. Завтра выложу. :)
 
UPD
Что делает? Добавляет фиксированную стоимость к доставке.
11.jpg
 
Если написано "Бесплатно", автоматически подставляет ноль и в общую стоимость пишет общую стоимость без доставки. При изменении кол-ва товаров пересчитывает общую стоимость 1-2сек. 
 
Тестировалось на:
Joomla: 2.5.2 (5.14) JBZoo: 2.1.3 Pro (2.1.2)
 
1. Файл /media/zoo/applications/jbuniversal/templates/catalog/renderer/basket/_default.php. 

Меняем весь код tfoot (примерно 101 строка) таблицы на этот:

 <tfoot>
	<tr>
        <td colspan="5" class="right"><strong><span id="summ_delivery_label">Доставка:</span></strong></td>
        <td>&nbsp;</td>
        <td><span id="summ_delivery">0 р.</span></td>
        <td>&nbsp;</td>
    </tr>
    <tr>
        <td colspan="5" class="right"><strong><span id="summ_delivery_label"><?php echo JText::_('JBZOO_CART_TOTAL'); ?>:</span></strong></td>
        <td class="jsTotalCount"><?php echo $count; ?></td>
        <td class="jsTotalPrice"><span id="summ_full"><?php echo $this->app->jbmoney->toFormat($summa, $currencyConvert); ?></span></td>
        <td>
            <input type="button" class="button-default jsDeleteAll" value="<?php echo JText::_('JBZOO_CART_REMOVE_ALL'); ?>"/>
        </td>
    </tr>
    </tfoot>

Тот же файл, в конце файла меняем код
 

<script type="text/javascript">jQuery(function ($) {$('.jbzoo .jsJBZooBasket').JBZooBasket({'clearConfirm': "<?php echo JText::_('JBZOO_CART_CLEAR_CONFIRM');?>",'quantityUrl' : "<?php echo $this->app->jbrouter->basketQuantity($view->appId);?>",'deleteUrl' : "<?php echo $this->app->jbrouter->basketDelete($view->appId);?>",'clearUrl' : "<?php echo $this->app->jbrouter->basketClear($view->appId);?>"});});</script>

 на этот:
 

<script type="text/javascript">
    jQuery(function ($) {
        $('.jbzoo .jsJBZooBasket').JBZooBasket({
            'clearConfirm': "<?php echo JText::_('JBZOO_CART_CLEAR_CONFIRM');?>",
            'quantityUrl' : "<?php echo $this->app->jbrouter->basketQuantity($view->appId);?>",
            'deleteUrl'   : "<?php echo $this->app->jbrouter->basketDelete($view->appId);?>",
            'clearUrl'    : "<?php echo $this->app->jbrouter->basketClear($view->appId);?>"
        });
		/* orig
		$('.delivery input[type=radio]').click(function() {
			var deliv_summ;
			var deliv_summ_arr;
			var deliv_summ_label_arr =  $(this).next().text().split(':');
			$('#summ_delivery_label').text(deliv_summ_label_arr[0]+':');
			deliv_summ_arr = deliv_summ_label_arr[1].split(" р");
			deliv_summ = deliv_summ_arr[0].replace(/[()]/,'');
			$('#d_id').val(deliv_summ);
			$('#d_id_2').val(deliv_summ_label_arr[0]);
			$('#summ_delivery').text(deliv_summ + ' р.');
			var su = parseInt(<?php echo $summa; ?>)+parseInt(deliv_summ); 
			var su2 = su+''; 
			su2 = su2.replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1 ");
			$('#summ_full').text(su2+' p.');			
        });
		*/
		$('.delivery input[type=radio]').click(function() {
          var deliv_summ;
          var deliv_summ_arr;
          var deliv_summ_label_arr =  $(this).next().text().split(':');
          // сумма, если она указана
          var delivSumm = parseInt(deliv_summ_label_arr['1'].replace(/\D/g, ''));
          var delivLabel = deliv_summ_label_arr['0'];
          
          if (isNaN(delivSumm)) {
            delivSumm = 0;
          }
          
          $('#summ_delivery_label').text(delivLabel+':');
          $('#summ_delivery').text(delivSumm + ' р.');          
          
          $('#d_id').val(delivSumm);
          $('#d_id_2').val(delivLabel);
		  var summ = 0;
		  $('#yoo-zoo .jsSubtotal').each(function(i, el){
		    var elSumm = $(el).text().split(",")[0];
			elSumm = elSumm.replace(/\D/g, '');
			summ += parseInt(elSumm);
		  });

          var su = summ + delivSumm;
          var su2 = su+'';
          su2 = su2.replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1 ");
          $('#yoo-zoo .jsTotalPrice').text(su2+' p.');
        });
		$('.jsQuantity').keyup(function(){
		  setTimeout(function() {
			$('.delivery input[type=radio]:checked').click();
		}, 3000);
		});
    });
</script>
<style>
	td.right{ text-align: right;}
	td.right span{ 
		width: 99%;
		display: inline-block;
		text-align: right;
	}
</style>

2. Файл /media/zoo/applications/jbuniversal/templates/catalog/renderer/basketform/_default.php Добавляем 2 скрытых input. Итого, конец файла выглядит вот так:
 

<input type="hidden" name="option" value="com_zoo"/>
    <input type="hidden" name="controller" value="basket"/>
    <input type="hidden" name="task" value="createOrder"/>
    <input type="hidden" name="type" value="<?php echo $view->submissionType; ?>"/>
    <input type="hidden" name="app_id" value="<?php echo $view->appId; ?>"/>
    <input type="hidden" name="Itemid" value="<?php echo $view->Itemid; ?>"/>
    <?php echo $this->app->html->_('form.token'); ?>
    <input type="hidden" id="d_id" name="d_id" value=""/>
	<input type="hidden" id="d_id_2" name="d_id_2" value=""/>

3. Файл \media\zoo\applications\jbuniversal\elements\jbbasketitems\tmpl\jbbasketitems.php. Меняем tfoot таблицы на этот:
 

<tfoot><tr>
                <td colspan="3">&nbsp;</td>
                <td><strong><?php echo @$_POST['d_id_2'];?>:</strong></td>
                <td class="jsTotalCount"></td>
                <td class="jsTotalPrice"><?php echo $this->app->jbmoney->toFormat(@$_POST['d_id'], $currency);?></td>
            </tr>
            <tr>
                <td colspan="3">&nbsp;</td>
                <td><strong><?php echo JText::_('JBZOO_CART_TOTAL'); ?>:</strong></td>
                <td class="jsTotalCount"><?php echo $count; ?></td>
                <td class="jsTotalPrice"><?php echo ($this->app->jbmoney->toFormat($summa + intval(@$_POST['d_id']), $currency)); ?></td>
            </tr>
            </tfoot>

 
4. Файл /media/zoo/applications/jbuniversal/templates/catalog/renderer/item/order/order.php  Нужно добавить класс delivery к диву, который обрамляет код, и станет выглядеть оно у Вас вот так:
 

 <?php if ($this->checkPosition('shipping')) : ?>
        <h3 class="toggler"><?php echo JText::_('JBZOO_CART_SHIPPING'); ?></h3>
        <div>
            <div class="tab-body content wk-content clearfix delivery">
                <?php echo $this->renderPosition('shipping', array('style' => 'order.block')); ?>
            </div>
        </div>
    <?php endif; ?>

Не забудьте добавить радио в доставку. Перед двоеточием должен быть пробел! Т.е. вид такой: Доставка по МО : 100руб.

 

Если кто-нибудь даст файлы, прикреплю. У меня в них помимо данного кода много что изменено, так что выкладывать свои не буду.


Edited by Евгения, 11 June 2014 - 11:21.

  • 2

"Это бессмысленно" - сказал разум. "Это нелепо" - заметил опыт. "Это бесполезно" - отрезал здравый смысл. "О! Вот так нормально!" - обрадовался клиент.

Что, где лежит (тема-сборник про пути к файлам)


#80 alexspi1

alexspi1
  • JBZoo User (rus)
  • User rate: 0.1
  • posts: 56
  • topics: 16

Posted 09 June 2014 - 10:56

Блин обидно, у меня не считает ((((

Joomla: 3.3.0     JBZoo: 2.1.3 Pro     Zoo: 3.1.6     WidgetKit: 1.4.8


  • 0





Also tagged with one or more of these keywords: рецепт

Click to return to top of page in style!