У меня есть следующая проблема: у меня есть основные методы доставки. Первый взимает плату за доставку в размере 10 долларов США за заказы ниже 200 долларов США. Второй метод – это freeshipping по умолчанию, который применяется для заказов более 200 долларов США.
Когда применяется freeshipping, промежуточная сумма Shipping & Handling отображает 0.00, и я не хочу, чтобы эта строка не отображалась ни в кассе, ни в счете-фактуре.
Есть ли способ полностью удалить линию доставки и обработки при использовании freeshipping?
Заранее благодарим за любые мысли.
Мне не нравится фильтровать подобные вещи кодом. Поэтому я придумал решение, переопределяющее Mage_Sales_Model_Quote_Address_Total_Shipping :: fetch (Mage_Sales_Model_Quote_Address $ address)
Приложение / код / местные / Me / MyModule / модель / Продажа / Quote / Адрес / Total / Shipping.php:
<?php class Me_MyModule_Model_Sales_Quote_Address_Total_Shipping extends Mage_Sales_Model_Quote_Address_Total_Shipping { /** * Add shipping totals information to address object * * @param Mage_Sales_Model_Quote_Address $address * @return Mage_Sales_Model_Quote_Address_Total_Shipping */ public function fetch(Mage_Sales_Model_Quote_Address $address) { if ($address->getShippingAmount() == 0) { return $this; } return parent::fetch($address); } }
Приложение / код / местные / Me / MyModule / и т.д. / config.xml:
<?xml version="1.0"?> <config> <modules> <Me_MyModule> <version>0.0.1</version> </Me_MyModule> </modules> <global> <models> <me_mymodule> <class>Me_MyModule_Model</class> </me_mymodule> <sales> <rewrite> <quote_address_total_shipping>Me_MyModule_Model_Sales_Quote_Address_Total_Shipping</quote_address_total_shipping> </rewrite> </sales> </models> </global> </config>
приложение / и т.д. / модули / Me_MyModule.xml:
<?xml version="1.0" encoding="UTF-8"?> <config> <modules> <Me_MyModule> <active>true</active> <codePool>local</codePool> </Me_MyModule> </modules> </config>
удалите линию доставки из корзины и вы можете переопределить этот метод Mage_Checkout_Block_Cart_Totals :: renderTotal ()
public function renderTotal($total, $area = null, $colspan = 1) { $code = $total->getCode(); if ($total->getAs()) { $code = $total->getAs(); } if ($code == 'shipping' && $total->getValue() == 0) { return ''; } return $this->_getTotalRenderer($code) ->setTotal($total) ->setColspan($colspan) ->setRenderingArea(is_null($area) ? -1 : $area) ->toHtml(); }
Для получения дополнительной информации обратитесь к этой ссылке http://www.magentocommerce.com/boards/viewthread/295412/#t410854