Я хочу создать событие для экспорта инвентаря, когда статус заказа будет изменен на завершенный.Magento create custom event (order_status_changed)
Я создал модуль для перезаписи Mage_Sales_Model_Order и попытался сгенерировал событие
(sales_order_status_change).
Когда из панели администратора magento я просматриваю и заказываю и изменяю состояние заказа для завершения, это означает, что печать означает что-то в моем расширенном классе, это показывает, что это прекрасно. Здесь я генерирую событие. (Проблема может быть здесь, может быть событие не сгенерировано)
Я создал другой модуль для наблюдения за этим событием. Но я не могу попасть в класс Observer. Я ничего не могу распечатать и выйти, значит, код не запускается.
Но в том же классе наблюдателя, если вы меняете конфигурацию и наблюдаете какое-то другое событие (из Magento, встроенного в события), он работает. Как я испытал catalog_controller_product_view
Здесь мой модуль генератора событий.
приложение/и т.д./модули/Gol_Eventgenerator.xml
<?xml version="1.0"?>
<config>
<modules>
<Gol_Eventgenerator>
<active>true</active>
<codePool>local</codePool>
</Gol_Eventgenerator>
</modules>
</config>
приложение \ код \ Local \ Gol \ Eventgenerator \ и т.д. \ config.xml
<?xml version="1.0" encoding="utf-8"?>
<config>
<modules>
<Gol_Eventgenerator>
<version>0.1.0</version>
</Gol_Eventgenerator>
</modules>
<global>
<models>
<sales>
<rewrite>
<order>Gol_Eventgenerator_Model_Order</order>
</rewrite>
</sales>
</models>
</global>
</config>
приложение \ код \ Local \ Gol \ Eventgenerator \ Model \ Order.php
<?php
class Gol_Eventgenerator_Model_Order extends Mage_Sales_Model_Order
{
public function setState($state, $status = false, $comment = '', $isCustomerNotified = null)
{
//if I print something here and exit, it does will.
Mage::dispatchEvent('sales_order_status_change', array('order' => $this, 'state' => $state, 'status' => $status, 'comment' => $comment, 'isCustomerNotified' => $isCustomerNotified));
return parent::setState($state, $status, $comment, $isCustomerNotified);
}
}
Здесь детали модуля наблюдателя
приложение/и т.д./модули/Gol_Inventory.xml
<?xml version="1.0"?>
<config>
<modules>
<Gol_Inventory>
<active>true</active>
<codePool>local</codePool>
</Gol_Inventory>
</modules>
</config>
приложение \ код \ Local \ Gol \ Inventory \ и т.д. \ config.xml
<?xml version="1.0" encoding="utf-8"?>
<config>
<modules>
<Gol_Inventory>
<version>0.1.0</version>
</Gol_Inventory>
</modules>
<global>
<events>
<sales_order_status_change>
<observers>
<Gol_Inventory_observer>
<type>singleton</type>
<class>Gol_Inventory_Model_Observer</class>
<method>exportEnventory</method>
</Gol_Inventory_observer>
</observers>
</sales_order_status_change>
</events>
</global>
</config>
приложение \ код \ Local \ Gol \ Inventory \ Model \ Observer.php
<?php
class Gol_Inventory_Model_Observer
{
public function exportEnventory($observer)
{
echo "Inside exportEvnentory method";
exit;
//$order = $observer->getEvent()->getOrder();
//$state = $observer->getEvent()->getState();
//$status = $observer->getEvent()->getStatus();
}
}
Есть ли разница в способе генерации событий для интерфейса и администратора? кроме
, в файле конфигурации.
Извините, если я не выполнил некоторые очень распространенные вещи. Новое для пурпурного.
Я попытался следовать.
вам не нужно, чтобы создать событие для этого, наблюдать 'sales_order_save_before' и проверить новый статус с предыдущим – OSdave
Спасибо большое! какие атрибуты я получу от $ observer ?? и когда это событие будет уволено? при размещении заказа с лицевой стороны? или когда статус заказа изменился? или оба?? – sohail042414
Я попытался, sales_order_save_before уволен с обеих сторон. но я хочу событие, которое должно быть запущено только при завершении изменений статуса заказа. ** Любая идея ?? ** – sohail042414