Опробовано на Joomla 3.3 - 3.7.2 и JoomShopping 4.9.2 - 4.16.1
Хак топорный, но рабочий. Плагины я писать не умею, извините.
Хороший человек Голоусов Святослав поделился плагином для решения этой же самой задачи: plg_joomshopping_shipping_policy.zip
Есть два метода оплаты: 1 (предоплата) и 2 (наложенный платеж). Стоимость доставки должна определяться следующим образом:
Редактируем файл /components/com_jshopping/templates/имя_шаблона/checkout/shippings.php (или в папке имя_шаблона/html/com_jshopping/checkout/shippings.php)
После кода
<?php defined( '_JEXEC' ) or die(); ?>
добавляем
<?php /* Hack for delivery */ $cart_data = JSFactory::getModel('cart', 'jshop'); $cart_data->load(); $payment_data_id = $cart_data->getPaymentId(); /* END of delivery hack*/ ?>
а строчку
<?php echo $shipping->name?> (<?php echo formatprice($shipping->calculeprice); ?>)</label>
заменяем на
/* ?><?php print $shipping->name?> (<?php print formatprice($shipping->calculeprice); ?>)</label> */ ?> <?php /* Delivery hack */ echo $shipping->name; echo $this->payment_method; if ( $payment_data_id == 6 ) { if ( $cart_data->price_product>2500 ){ ?><b><?php echo " : БЕСПЛАТНАЯ ДОСТАВКА по предоплате";?></b><?php }else{ ?><b><?php echo " : 190 Рублей";?></b><?php } }else{ echo formatprice($shipping->calculeprice); } ?></label><?php /* END of delivery hack */ ?>
Примечание: в «$payment_data_id==6» цифра «6» это ID моего метода оплаты «Предоплата», посмотреть его можно на страничке http://you-site.ru/administrator/index.php?option=com_jshopping&controller=payments
Редактируем файл components/com_jshopping/controllers/checkout.php - изменяем function step4save()
Между
if (!$checkout->saveShippingData($sh_pr_method_id, $allparams, $adv_user)){ JError::raiseWarning('', $checkout->getError()); $this->setRedirect($checkoutStep->getCheckoutUrl('4')); return 0; } $sh_method = $checkout->getActiveShippingMethod(); $shipping_method_price = $checkout->getActiveShippingMethodPrice();
и
$dispatcher->trigger('onAfterSaveCheckoutStep4', array(&$adv_user, &$sh_method, &$shipping_method_price, &$cart)); $next_step = $checkoutStep->getNextStep(4);
добавляем строки:
/* Hack for shipping/delivery */ $payment_data_id = $cart->getPaymentId(); if ( $payment_data_id == 6 ) { if ( $cart->price_product > 2500 ){ $cart->setShippingPrice(0); }else{ $cart->setShippingPrice(190); } } /* end of hack for delivery */
Готово