Исходные условия:
Ну это просто. Идем в настройки: Администрирование ⇒ Магазин ⇒ Список модулей доставки. Интересует «shipvalue». Нажимаем «Настроить вариант доставки», заполняем поля «Стоимость заказа» и «Стоимость доставки».
Например: бесплатная доставка от 2200, иначе 299 руб.
Стоимость заказа | Стоимость доставки |
---|---|
2199 | 299 |
2200 | 0 |
Далее необходимо включить этот вариант доставки: Администрирование ⇒ Настройки ⇒ Настройки ⇒ Доставка и ставим галочку на «Фиксированный тариф, на основе введенных данных.»
Все.
Нет такой возможности в штатной поставке Virtuemart. Надо пилить.
Администрирование ⇒ Магазин ⇒ Добавить способ оплаты. Создаем, задаем необходимые параметры.
Теперь нужно узнать идентификатор нашего способа оплаты (payment_method_id). Можно либо навести курсор мыши на ссылку и подсмотреть его, либо открыть наш созданный способ оплаты и посмотреть payment_method_id в адресной строке браузера.
Редактируем файл /administrator/components/com_virtuemart/languages/checkout/russian.php
- добавляем строку
'PHPSHOP_CHECKOUT_PREDOPLATA' => 'Бесплатная доставка по предоплате',
Не забыть про запятую в конце строки!
Редактируем файл /administrator/components/com_virtuemart/classes/ps_checkout.php
Заменяем строки
// Get the IP Address if (!empty($_SERVER['REMOTE_ADDR'])) { $ip = $_SERVER['REMOTE_ADDR']; } else { $ip = 'unknown'; } // Collect all fields and values to store them! $fields = array( 'user_id' => $auth["user_id"], 'vendor_id' => $ps_vendor_id,
на
// Get the IP Address if (!empty($_SERVER['REMOTE_ADDR'])) { $ip = $_SERVER['REMOTE_ADDR']; } else { $ip = 'unknown'; } // Begin hack for prepaid if ( vmGet( $_REQUEST, 'payment_method_id') == NN && $order_subtotal > SUMMA ) { $order_shipping = 0; $order_total = $order_subtotal; } // End hack for prepaid // Collect all fields and values to store them! $fields = array( 'user_id' => $auth["user_id"], 'vendor_id' => $ps_vendor_id,
Где NN - идентификатор нашего метода оплаты (payment_method_id), а SUMMA - сумма, выше которой посылка не будет оплачиваться покупателем.
Редактируем файл /administrator/components/com_virtuemart/html/ro_basket.php
После строк
else { $shipping_total = 0; $shipping_display = ""; }
добавляем
// Begin hack for prepaid if ( $payment_method_id == NN && $subtotal > SUMMA ) { $shipping_total = 0; $shipping_display = $GLOBALS['CURRENCY_DISPLAY']->getFullValue($shipping_total); } // End hack for prepaid
Где NN - идентификатор нашего метода оплаты (payment_method_id), а SUMMA - сумма, выше которой посылка не будет оплачиваться покупателем.
Редактируем файл шаблона /components/com_virtuemart/themes/default/templates/checkout/get_final_confirmation.tpl.php
Если шаблон не default - соответственно выбираем нужный.
Заменяем кусочек кода
// Print out the Selected Shipping Method if(!ps_checkout::noShippingMethodNecessary()) { echo '<tr><td valign="top"><strong>'.$VM_LANG->_('PHPSHOP_INFO_MSG_SHIPPING_METHOD') . ":</strong></td>"; $rate_details = explode( "|", urldecode(urldecode(vmGet($_REQUEST,'shipping_rate_id'))) ); echo '<td>'; foreach( $rate_details as $k => $v ) { // thepisu: old sample data cointaned ">" instead of ">"... // so we don't have to make safe if ">" is found if (strpos($v,">")===false) { $v = shopMakeHtmlSafe($v); } if( $k == 3 ) { echo $CURRENCY_DISPLAY->getFullValue( $v )."; "; } elseif( $k > 0 && $k < 4) { echo $v.'; '; } } echo "</td></tr>"; }
на
// Print out the Selected Shipping Method if(!ps_checkout::noShippingMethodNecessary()) { echo '<tr><td valign="top"><strong>'.$VM_LANG->_('PHPSHOP_INFO_MSG_SHIPPING_METHOD') . ": </strong></td>"; $rate_details = explode( "|", urldecode(urldecode(vmGet($_REQUEST,'shipping_rate_id'))) ); echo '<td>'; // Begin of hack for prepaid if ( $payment_method_id == NN && $GLOBALS['subtotal'] > SUMMA ) { echo $VM_LANG->_('PHPSHOP_CHECKOUT_PREDOPLATA'); } else { // end hack for prepaid foreach( $rate_details as $k => $v ) { // thepisu: old sample data cointaned ">" instead of ">"... // so we don't have to make safe if ">" is found if (strpos($v,">")===false) { $v = shopMakeHtmlSafe($v); } if( $k == 3 ) { echo $CURRENCY_DISPLAY->getFullValue( $v )."; "; } elseif( $k > 0 && $k < 4) { echo $v.'; '; } } } // Needed for hack for prepaid echo "</td></tr>"; }
Где NN - идентификатор нашего метода оплаты (payment_method_id), а SUMMA - сумма, выше которой посылка не будет оплачиваться покупателем.