2011-03-31 55 views

回答

2

如果提出问题“Magento的方式”,当你说“为了完成”,这意味着其状态为“完成”。已在前端网站上订购具有“完整”状态的订单,然后开具发票并从管理员发货。

我的答案是基于这个术语,从而给你线索一旦订单已经完成改变产品属性(再次,在Magento的方式)。

编码为你整个事情是不是很好的帮助,是非常长的,所以这里的路径(在我看来):)

  • 创建一个模块 (谷歌是你的朋友为)

  • 连接观察员此模块,使其遵守事件“sales_order_save_after” (谷歌是你的朋友为)

  • 在观察者文件/方法,检索ŧ他下令其状态

     $order = $observer->getEvent()->getOrder(); 
         $orderStatus = $order->getStatus(); 
    
  • 如果订单状态是“已完成”,创建一个foreach,更新你想要的属性对所有项目

这将给予相同的属性值的所有产品。在本例中,完成订单的所有产品将被重命名为“已售出产品”。

  if ($orderStatus == 'complete') { 
       $items = $order->getAllItems(); 
       foreach ($items as $item) { 
        $productsToUpdate[] = $item->getProductId(); 
       } 
       $theAttributeToUpdate = 'name'; 
       $theAttributeValue = 'Sold Product'; 
       Mage::getSingleton('catalog/product_action')->updateAttributes($productsToUpdate, array($theAttributeToUpdate => $theAttributeValue), 0); 
      } 

这应该足以让你走上正轨。

+0

最后我采取了一些不同的方法,并且我吸引了以下事件:checkout_(onepage | multishipping)_controller_success_action。谢谢 – JohnT 2011-03-31 22:21:47

+0

好吧!所以你需要改变属性,一旦订单放在前端,而不是在后端“完成”:)很高兴我可以提供帮助。 – 2011-04-01 01:21:38

+0

是的,当产品销售时,我需要改变一个特殊的状态,不管它是“完整”还是不是。 – JohnT 2011-04-01 07:45:58

0

尝试挂钩到sales_order_place_afterHere是一个关于如何在Magento中捕捉事件的好教程。