Абсолютно не понял, что Вы имеете в виду.
Добавление фиксированный суммы к цене корзины в зависимости от выбора чекбокса
#71
Posted 08 April 2014 - 10:12
#72
Posted 10 April 2014 - 00:45
Для того чтобы нормально присылались письма внесла правки с 88 строки (Иначе он у меня не правильно складывал сумму доставки и сумму заказа):
media/zoo/applications/jbuniversal/elements/jbbasketitems/tmpl/jbbasketitems.php
<tfoot><tr> <td colspan="3"> </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"> </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 руб - 0 (бесплатно)
Транспортная компания (оговаривается с менеджером) - ставим 0
ЕМС - то же самое
Так вот, цель была в том, чтобы он во-первых проверял что написано после двоеточия, и соответственно писал в заказе сумму заказа без доставки. В итоге получилось вот так:
Скрипт стал выглядеть так:
$('.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 ибо в базу они не пишутся. и выдает ошибку вот такую:
Очень хотелось бы это исправить. Вопрос как?
UPD: убрала вывод сообщения об ошибке. В принципе второй вопрос снимается, потому что в моем случае нет смысла указывать в старых заказах общую стоимость.
В tfoot для переменных $_POST['d_id_2'] и $_POST['d_id'] добавила @. Стало: @$_POST['d_id_2'] и @$_POST['d_id']. Код выше - исправила.
Edited by Евгения, 25 April 2014 - 21:40.
"Это бессмысленно" - сказал разум. "Это нелепо" - заметил опыт. "Это бесполезно" - отрезал здравый смысл. "О! Вот так нормально!" - обрадовался клиент.
#73
Posted 10 April 2014 - 23:01
Товарищи техподдержка. Вы где?
З.Ы. Проверила свою версию скрипта на последнем обновлении - работает
Edited by Евгения, 15 April 2014 - 21:25.
"Это бессмысленно" - сказал разум. "Это нелепо" - заметил опыт. "Это бесполезно" - отрезал здравый смысл. "О! Вот так нормально!" - обрадовался клиент.
#74
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.
#75
Posted 25 April 2014 - 21:25
Я выше написала уже, что переменные d_id и d_id_2 не сохраняются в БД, соответственно брать их второй раз неоткуда. Проблема в этом. Соответственно, GET взять нечего
Это надо создавать табличку в БД и хранить в ней данные, и обращаться уже к этой табличке. Больше "умных идей" по-этому вопросу у меня нет >.<
Edited by Евгения, 25 April 2014 - 21:28.
"Это бессмысленно" - сказал разум. "Это нелепо" - заметил опыт. "Это бесполезно" - отрезал здравый смысл. "О! Вот так нормально!" - обрадовался клиент.
#76
Posted 25 April 2014 - 21:43
Я выше написала уже, что переменные d_id и d_id_2 не сохраняются в БД, соответственно брать их второй раз неоткуда. Проблема в этом. Соответственно, GET взять нечего
Это надо создавать табличку в БД и хранить в ней данные, и обращаться уже к этой табличке. Больше "умных идей" по-этому вопросу у меня нет >.<
Так при чем тут БД ?
У меня POST не доходит.
Не знаю как лечить 303 ошибку. В прошлый раз все закончилось полной переустановкой =(
#77
Posted 19 May 2014 - 22:02
UPD через пару дней прикреплю доведенную до ума рабочую версию скрипта. А то после обновления он бузил и пересчитывать не хотел.
"Это бессмысленно" - сказал разум. "Это нелепо" - заметил опыт. "Это бесполезно" - отрезал здравый смысл. "О! Вот так нормально!" - обрадовался клиент.
#78
Posted 04 June 2014 - 10:54
UPD через пару дней прикреплю доведенную до ума рабочую версию скрипта. А то после обновления он бузил и пересчитывать не хотел.
к сожалению у меня на последней версии ваш последний вариан не работает
#79
Posted 04 June 2014 - 22:29
к сожалению у меня на последней версии ваш последний вариан не работает
Знаю. Не обновляла еще. Завтра выложу.
UPD
Что делает? Добавляет фиксированную стоимость к доставке.
Если написано "Бесплатно", автоматически подставляет ноль и в общую стоимость пишет общую стоимость без доставки. При изменении кол-ва товаров пересчитывает общую стоимость 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> </td> <td><span id="summ_delivery">0 р.</span></td> <td> </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"> </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"> </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.
"Это бессмысленно" - сказал разум. "Это нелепо" - заметил опыт. "Это бесполезно" - отрезал здравый смысл. "О! Вот так нормально!" - обрадовался клиент.
#80
Posted 09 June 2014 - 10:56
Блин обидно, у меня не считает ((((