====== Virtuemart - Бесплатная доставка ====== Исходные условия: * Joomla 1.5.25 * Virtuemart 1.1.7a (но и в 1.1.9 тоже самое) ===== Стоимость доставки зависит от суммы заказа ===== Ну это просто. Идем в настройки: Администрирование => Магазин => Список модулей доставки. Интересует "shipvalue". Нажимаем "Настроить вариант доставки", заполняем поля "Стоимость заказа" и "Стоимость доставки". Например: бесплатная доставка от 2200, иначе 299 руб. ^ Стоимость заказа ^ Стоимость доставки ^ | 2199 | 299 | | 2200 | 0 | Далее необходимо включить этот вариант доставки: Администрирование => Настройки => Настройки => Доставка и ставим галочку на "Фиксированный тариф, на основе введенных данных." Все. ===== Бесплатная доставка от 2500 руб и оплаченная по предоплате ===== Нет такой возможности в штатной поставке Virtuemart. Надо пилить. ==== Добавляем новый способ оплаты ==== Администрирование => Магазин => Добавить способ оплаты. Создаем, задаем необходимые параметры. Теперь нужно узнать идентификатор нашего способа оплаты (payment_method_id). Можно либо навести курсор мыши на ссылку и подсмотреть его, либо открыть наш созданный способ оплаты и посмотреть payment_method_id в адресной строке браузера. ==== Вносим изменения в файлы Virtuemart ==== === Добавляем описание в языковой файл === Редактируем файл ''/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 ''.$VM_LANG->_('PHPSHOP_INFO_MSG_SHIPPING_METHOD') . ":"; $rate_details = explode( "|", urldecode(urldecode(vmGet($_REQUEST,'shipping_rate_id'))) ); echo ''; 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 ""; } на // Print out the Selected Shipping Method if(!ps_checkout::noShippingMethodNecessary()) { echo ''.$VM_LANG->_('PHPSHOP_INFO_MSG_SHIPPING_METHOD') . ": "; $rate_details = explode( "|", urldecode(urldecode(vmGet($_REQUEST,'shipping_rate_id'))) ); echo ''; // 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 ""; } Где NN - идентификатор нашего метода оплаты (payment_method_id), а SUMMA - сумма, выше которой посылка не будет оплачиваться покупателем. {{tag>virtuemart hack хак доставка бесплатная_доставка хитрая_доставка стоимость_доставки}}