我一直在努力让我的观察者模块发挥作用。我正在使用Magento 1.7.0.2,一切似乎都是正确的XML。没有错误,但我不相信它正在解雇。我希望它在事件sale_order_save_after上做三件事情如下:
如果订单状态为“完成”,请执行以下操作:
1)将自定义属性“location”更改为“SOLD”
2)将目录/搜索的可见性更改为目录。
3)将所有指定类别的订单中的所有产品移至一个新类别(ID:80)
最后保存/刷新缓存。我的PHP代码不完整,但我至少会喜欢它。第一步和第二步应该有效,不知道如何处理以编程方式更改类别。
以下是我的代码:
应用/代码/本地/尖峰/自动存档的/ etc / config.xml中
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<Pinnacle_Autoarchive>
<version>0.0.1</version>
</Pinnacle_Autoarchive>
</modules>
<global>
<models>
<Pinnacle_Autoarchive>
<class>Pinnacle_Autoarchive_Model</class>
</Pinnacle_Autoarchive>
</models>
</global>
<adminhtml>
<events>
<sales_order_save_after>
<observers>
<pinnacle_autoarchive>
<type>model</type>
<class>pinnacle_autoarchive/observer</class>
<method>salesOrderSaveAfter</method>
</pinnacle_autoarchive>
</observers>
</sales_order_save_after>
</events>
</adminhtml>
</config>
应用/代码/本地/尖峰/自动存档/型号/ Observer.php
<?php
/*
* Auto Archive all products on last order when status is complete
*/
class Pinnacle_Autoarchive_Model_Observer
{
public function salesOrderSaveAfter($observer)
{
$order = $observer->getEvent()->getOrder();
$orderStatus = $order->getStatus();
if ($orderStatus == 'complete') {
$items = $order->getAllItems();
foreach ($items as $item) {
$productsToUpdate[] = $item->getProductId();
}
$theAttributeToUpdate = 'location';
$theAttributeValue = 'SOLD';
Mage::getSingleton('catalog/product_action')->updateAttributes($productsToUpdate, array($theAttributeToUpdate => $theAttributeValue), 0);
}
if ($orderStatus == 'complete') {
$items = $order->getAllItems();
foreach ($items as $item) {
$productsToUpdate[] = $item->getProductId();
}
$theAttributeToUpdate = 'visibility';
$theAttributeValue = 'Catalog';
Mage::getSingleton('catalog/product_action')->updateAttributes($productsToUpdate, array($theAttributeToUpdate => $theAttributeValue), 0);
}
//if ($orderStatus == 'complete') {
//$items = $order->getAllItems();
//foreach ($items as $item) {
// $productsToUpdate[] = $item->getProductId();
//}
//Mage::getSingleton('catalog/product_action')->$productsToUpdate->setCategoryIds(array(80));
//}//
}
?>
任何帮助都会受到赞赏,因为我似乎无法解决这个问题。在此先感谢您的帮助。
答案 0 :(得分:0)
您可以使用此链接
http://snipplr.com/view/56959/
并制作你的etc / modules / config.xml
或者您可以将现有代码与此代码进行比较,您可以确定找到解决方案,以便在任何订单放置后以保存方法添加代码。
希望这对您有所帮助。
答案 1 :(得分:0)
看起来您config.xml
就是问题所在。您在adminhtml
内定义了观察者,而不是global
。
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<Pinnacle_Autoarchive>
<version>0.0.1</version>
</Pinnacle_Autoarchive>
</modules>
<global>
<models>
<Pinnacle_Autoarchive>
<class>Pinnacle_Autoarchive_Model</class>
</Pinnacle_Autoarchive>
</models>
<events>
<sales_order_save_after>
<observers>
<pinnacle_autoarchive>
<type>model</type>
<class>Pinnacle_Autoarchive_Model_Observer</class>
<method>salesOrderSaveAfter</method>
</pinnacle_autoarchive>
</observers>
</sales_order_save_after>
</events>
</global>
</config>