Изменение методов доставки для администраторов, создающих заказы
Я пытаюсь внести изменения в информацию о доставке, которая отображается, как только администратор нажимает на ссылку "Получить методы и тарифы доставки".
Очевидно, что мне нужно получить информацию о продукте и адресе до того, как заказ будет сохранен. Мне нужно активировать эти данные при нажатии на ссылку доставки. Захват данных после сохранения заказа не будет работать для меня.
Я пробовал adminhtml_sales_order_create_process_data
Однако, похоже, это ничего не возвращает подходящий. Единственное, что я, кажется, могу вернуть с этим событием, это следующее:
$observer->getEvent()->getRequest()
Который возвращает:
Array
(
[collect_shipping_rates] => 1
[customer_id] => 2
[store_id] => 1
[currency_id] => false
[form_key] => 0Is4G9KJ2XYer2c7
[json] => true
)
Я неправильно получаю данные или есть лучший наблюдатель?
Я также пробовал $observer->getEvent()->getOrder();
, но это ничего не возвращает.
Обновление: Не уверен, почему люди отмечают вопрос как возможный дубликат, когда на самом деле эти два вопроса совершенно разные. Этот вопрос связан с правильным получением правильных данных, а не с размещением наблюдателя, как у другого вопрос задан и до того, как заказ будет отправлен.
1 answers
Событие adminhtml_sales_order_create_process_data
также содержит модель создания заказа , к которой вы можете получить доступ следующим образом:
/** @var Mage_Adminhtml_Model_Sales_Order_Create $model */
$model = $observer->getEvent()->getOrderCreateModel();
Оттуда вы сможете изменить цитату в соответствии с вашими потребностями.
Если вы хотите изменить шаблон формы доставки (или его данные), вам нужно будет добавить/изменить блоки и/или шаблоны вместо использования наблюдателя событий.
Дескриптор макета adminhtml_sales_order_create_load_block_shipping_method
добавляется всякий раз, когда Magento необходимо отобразить форму способа доставки. Это ручка используется для загрузки двух блоков:
<adminhtml_sales_order_create_load_block_shipping_method>
<reference name="content">
<block type="adminhtml/sales_order_create_shipping_method" template="sales/order/create/abstract.phtml" name="shipping_method">
<block type="adminhtml/sales_order_create_shipping_method_form" template="sales/order/create/shipping/method/form.phtml" name="form" />
</block>
</reference>
</adminhtml_sales_order_create_load_block_shipping_method>
Если вы знакомы с макетами, у вас не должно возникнуть проблем с внесением любых необходимых изменений. Например, если вы хотите переопределить блок формы, вы можете создать свой собственный файл макета adminhtml со следующим содержимым:
<?xml version="1.0"?>
<layout>
<adminhtml_sales_order_create_load_block_shipping_method>
<reference name="shipping_method">
<remove name="form" />
<block type="yourmodule/overrides_sales_order_create_shipping_method_form" template="yourmodule/sales/order/create/shipping/method/form.phtml" name="form" />
</reference>
</adminhtml_sales_order_create_load_block_shipping_method>
</layout>
Надеюсь, это поможет!