Php 如何更改产品销售时的给定属性?(订单完成时)

Php 如何更改产品销售时的给定属性?(订单完成时),php,events,zend-framework,magento,attributes,Php,Events,Zend Framework,Magento,Attributes,我需要更改一个属性,当产品售出时,当订单完成时,我想我可以在某个地方挂上某个东西,但我不知道在哪里/什么地方 谢谢。试着在之后连接到销售\订单\地点。这是一个关于如何捕捉Magento事件的好教程。如果您的问题被问及“Magento方式”,当您说“订单已完成”时,这意味着其状态为“完成”。已在前端站点上订购状态为“完成”的订单,然后从管理员处开具发票和发货 我的答案是基于这个术语的,因此在订单完成后(同样,以magento的方式)为您提供了更改产品属性的线索 为您编写完整的代码不是很好的帮助,而

我需要更改一个属性,当产品售出时,当订单完成时,我想我可以在某个地方挂上某个东西,但我不知道在哪里/什么地方


谢谢。

试着在之后连接到销售\订单\地点。这是一个关于如何捕捉Magento事件的好教程。

如果您的问题被问及“Magento方式”,当您说“订单已完成”时,这意味着其状态为“完成”。已在前端站点上订购状态为“完成”的订单,然后从管理员处开具发票和发货

我的答案是基于这个术语的,因此在订单完成后(同样,以magento的方式)为您提供了更改产品属性的线索

为您编写完整的代码不是很好的帮助,而且很长,因此以下是路径(在我看来):)

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

  • 将观察者附加到此模块,并使其观察“销售\订单\保存\之后”事件 (谷歌是你的朋友)

  • 在observer文件/方法中,检索订单及其状态

            $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);
            }

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

oooooooh~ahhhh鬼代码!!我看不见!!!最后,我采用了一种稍微不同的方法,并钩住了以下事件:签出(onepage |多芯片)_控制器_成功_操作。谢谢你,好的!因此,您需要在订单放在前端时更改属性,而不是在后端“完成”时:)很高兴我能提供帮助。是的,我需要在产品售出时更改特殊状态,无论它是“完成”还是“否”。