Два решения приходят на ум:
1) Вы можете добавить атрибут ко всем продуктам и жесткий код, сколько вы ожидаете на доставку каждого продукта стоимости а затем просто подытожим эти цифры. В этом случае вы просто найдете все шаблоны, в которые вы хотели бы изменить текст бесплатной доставки, получить все предметы, которые в настоящее время находятся в корзине (см. this ответ на вопрос, как вы можете получить цитаты), из них вы можете получить продукт данные с getProduct(), загрузите свой атрибут, суммируйте их, отформатируйте цену в локали вашего магазина и распечатайте ее.
Например: В одном таком месте app/design/frontend/base/default/template/checkout/onepage/shipping_method/available.phtml
вам нужно будет поставить инструкцию if, чтобы вы могли внести изменения только в бесплатную доставку. Там вы можете увидеть вызов $ _rate-> getCode(). Если выход этой функции соответствует freeshipping_freeshipping, тогда вы должны прикрепить свой текст к html.
2) Второе и немного более сложное решение заключается в том, что вы выбираете другой способ доставки и получаете сумму от него (например, вы используете метод доставки отгрузки, чтобы увидеть, сколько это будет стоить, если бесплатная доставка не будет использоваться). Для этого вам придется создать вспомогательный класс и реализовать функцию, которая преобразует доставки adderess (класс Mage_Sales_Model_Quote_Address) для запроса (класс Mage_Shipping_Model_Rate_Request)
public function prepareRequest(Mage_Sales_Model_Quote_Address $address)
{
$request = Mage::getModel('shipping/rate_request')
->setAllItems($address->getAllItems())
->setDestCountryId($address->getCountryId())
->setDestRegionId($address->getRegionId())
->setDestPostcode($address->getPostcode())
->setPackageValue($address->getBaseSubtotal())
->setPackageValueWithDiscount($address->getBaseSubtotalWithDiscount())
->setStoreId(Mage::app()->getStore()->getId())
->setWebsiteId(Mage::app()->getStore()->getWebsiteId())
->setBaseCurrency(Mage::app()->getStore()->getBaseCurrency())
->setPackageCurrency(Mage::app()->getStore()->getCurrentCurrency())
->setPackageQty($address->getItemQty())
->setPackageWeight($address->getWeight());
return $request;
}
Вы можете получить адрес от qoute:
Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress();
С помощью этого запроса вы вызываете функцию collectRates на перевозчике по вашему выбору (например, Mage_Usa_Model_Shipping_Carrier_Ups :: collectRates). Вы можете увидеть пример вызова всех операторов в Mage_Shipping_Model_Shipping :: collectRates и функцию, которая вызывается из ther Mage_Shipping_Model_Shipping :: collectCarrierRates, которая содержит $carrier->collectRates($request);
- вызов функции, который вам нужно будет сделать с вашим запросом.
Функция collectRates возвращает класс результата (Mage_Shipping_Model_Tracking_Result) (используйте var_dump ($ response-> getData()) или Mage :: log ($ response-> getData()), чтобы увидеть структуру) и из этого класса вы получите цену, которую перевозчик будет взимать за доставку продуктов на адрес доставки.
С этим номером вы затем сделать то же самое, как если бы вы использовали бы решение 1) (смотри, например, часть в нижней части первого раствора):
- цена формат локали вашего магазина
- найти все файлы PHTML, где вы хотите, чтобы сделать изменения
- проверить, если метод перевозкы груза freeshipping_freeshipping
- если это бесплатная доставка затем добавить свой текст
EDIT:
Альтернатива добавления текста к каждому файлу шаблона будет использовать переписанный на классе Mage_Shipping_Model_Carrier_Freeshipping и добавить свой текст $method->setMethodTitle($this->getConfigData('name'));
сеттера.
EDIT 2:
Или еще лучше написать свой собственный способ доставки на основе свободного способа доставки, this статьи и выше решения. Таким образом вам не придется использовать файлы перезаписи или изменения шаблонов.
Edit 3:
Я забыл упомянуть, что в приведенной выше функции prepareRequest вы также должны установить package_qty и package_weight (добавили их сейчас). Эти два значения рассчитываются и добавляются к адресу в Mage_Sales_Model_Quote_Address_Total_Shipping::collect
.
Пожалуйста, дайте мне знать, если есть какое-либо разрешение. – user2273857