Как установить пользовательскую общую сумму перед оформлением заказа в magento?
Вопрос
Я добавил наблюдателя на событие "sales_order_place_before" и хочу настроить общую сумму перед обработкой платежа.но я много раз пытался изменить цену предложения, но это не работает.
У кого-нибудь есть какие-нибудь идеи??
Решение
Вам нужно добавить новый коллектор после общего (Mage_Sales_Model_Quote_Address_Total_Grand).Он должен изменить сумму, которая была установлена grand total collector.
Неделю назад я рассказывал о подобном случае на конференции MageConf в Украине.Видео и слайды пока недоступны, но вы можете скачать демо-модуль об этом было рассказано на конференции.Существует пример total collector, который вычисляет цену упаковки.
Вы можете изменить мою демонстрационную версию total collector, чтобы она была вставлена в процесс сбора ПОСЛЕ Grand total collector (см. config.xml в модуле и т.д. каталог - удалить <before>subtotal</before>
узел затем использует <after>grand_total</after>
вместо этого) и изменить собирать() метод просто для того, чтобы установить общие итоги в соответствии с вашими предопределенными значениями:
$address->setGrandTotal($someValue);
$address->setBaseGrandTotal($someBaseValue);
Или вы можете оставить этот модуль как есть, но установить в нем отрицательные итоговые значения.Таким образом, Grand total collector вычтет их и уменьшит общую стоимость по вашему желанию.Также в таком случае клиент сможет увидеть ваши отрицательные значения (укажите их в выборка() метод) и понять, почему общие итоги были снижены.
Получайте удовольствие :)
Другие советы
Вы не можете сделать новый общий объект или добавлять суммы как виртуальные продукты
Пожалуйста, соблюдайте
Mage_Sales_Model_Quote_Address_Total_Abstract
Mage_Sales_Model_Order_Invoice_Total_Abstract
Mage_Sales_Model_Order_Creditmemo_Total_Abstract
Чтобы увидеть, что нужно для реализации общего объекта. Вам также может потребоваться расширить объекты ставки