我正在创建一个Magento模块,我想在选择自定义orderstatus时触发Observer。
实际情况:
人们选择:“收到付款”,“观察员”中的//DO STUFF
被触发。
这不行,所以这里有什么问题? (虽然状态正确显示): - (
config.xml中:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<MOD_PaidStatus>
<version>1.0.0</version>
</MOD_PaidStatus>
</modules>
<global>
<sales>
<order>
<statuses>
<payment_received translate="label"><label>Payment Received</label></payment_received>
</statuses>
<states>
<processing translate="label">
<label>Processing</label>
<statuses>
<processing default="1"/>
<payment_received default="2" />
</statuses>
<visible_on_front/>
</processing>
<pending translate="label">
<label>Pending</label>
<statuses>
<pending default="1"/>
<payment_received default="2" />
</statuses>
<visible_on_front/>
</pending>
</states>
</order>
</sales>
<events>
<sales_order_resource_save_attribute_after>
<observers>
<PaidStatus>
<class>MOD_PaidStatus/observer</class>
<method>observeAttributeChange</method>
<type>singleton</type>
</PaidStatus>
</observers>
</sales_order_resource_save_attribute_after>
</events>
</global>
</config>
我的 Observer.php 看起来像:
class MOD_PaidStatus_Model_Observer {
public function observeAttributeChange($observer){
$attribute = $observer->getEvent()->getAttribute();
if ($attribute->getAttributeCode() == 'status') {
mail('test@testcase.com', 'testcase', 'foo bar?');
}
}
}
答案 0 :(得分:1)
为了能够在更改订单属性“status”时执行某些操作,最好观察事件。在这种情况下,事件将是sales_order_resource_save_attribute_after
。观察者功能可以设置如下:
class YourPackage_YourModule_Model_Observer {
public function observeAttributeChange($observer)
{
$attribute = $observer->getEvent()->getAttribute();
if ($attribute->getAttributeCode() == 'status') {
// DO STUFF
}
}
在config.xml中输入必要的观察者配置
<global>
<events>
<sales_order_resource_save_attribute_after>
<observers>
<your_observer_node_name>
<class>yourpackage_yourmodule/observer</class>
<method>observeAttributeChange</method>
<type>singleton</type>
</your_observer_node_name>
</observers>
</sales_order_resource_save_attribute_after>
</events>
</global>
答案 1 :(得分:0)
你可以用重写或观察者来做到这一点。
你将这两个概念混合在一起。
要使用重写,请不要将文件命名为Observer,使用类似订单 .php的内容:
class MOD_PaidStatus_Model_**Order** extends Mage_Sales_Model_Order
并在config.xml中的全局节点中添加:
<models>
<sales>
<rewrite>
<order>MOD_PaidStatus_Model_Order</order>
</rewrite>
</sales>
</models>
如果您想浏览Observer,请使用名称Observer.php,类名应为:
MOD_PaidStatus_Model_Observer
它不应该扩展任何东西。
该功能更像是
public function myEventHandling($event)
{
$order = $event->getOrder();
$status = $order->getStatus();
//DO YOUR STUFF here
}
但你应该听一个不存在的order_status_changed_after事件,所以你也要添加来触发它......如果你不是一个确认的开发者,那就太大了。
如果你想要这样的东西,你需要在config.xml文件中有一个事件节点来将你的Observer及其方法与事件相关联。在Magento进行一些关于事件处理的搜索
此致
编辑:对于观察者和事件方式,请查看上一篇文章。但处理这样的通用事件是一种非常耗费资源的方式。