Magento - 如何挂钩订单重新订购

时间:2013-08-15 15:02:07

标签: magento

当客户重新订购时,我需要在新订单上包含对原始订单ID的引用。我可以看到如何在sales_flat_ordersales_flat_quote(我认为!)中为此添加属性,但我看不到如何挂钩重新排序。

重新排序很简单,在app\code\core\Mage\Sales\Controller\Abstract.php->reorderAction完成。它只是将订单商品复制到购物车,然后打开购物车。但是我怎么能挂钩来添加orderId交叉引用?

我可以将它复制到本地并编辑它(正确吗?)但这并不是一种聪明的方法,因为我已经完成了在Abstract.php中完成的所有事情并制作了它的本地副本。

我想我还可以创建一个自定义模块来执行重新排序并将“重新排序”链接指向我的自定义模块。但同样,这有点hacky,如果可能的话,我更愿意加入这个过程。

感谢。

1 个答案:

答案 0 :(得分:4)

您可以挂钩controller_action_predispatch_sales_order_reorder事件,然后在观察者

上获取订单ID参数
$oldOrderId=Mage::app()->getRequest()->getParam('order_id');

在sql安装程序

上为报价和订单表创建一个新列
$installer = new Mage_Sales_Model_Resource_Setup('core_setup');
$options = array(
'type' => Varien_Db_Ddl_Table::TYPE_INTEGER,
);
$installer->addAttribute('quote', 'old_order_id', $options);
$installer->addAttribute('order', 'old_order_id', $options);
$installer->endSetup();

然后将参数order_id保存到观察者的引用对象

Mage::getSingleton('checkout/session')->getQuote()->setOldOrderId($oldOrderId)->save();

并在config.xml上创建一个fieldset,以将该属性的值传递给订单对象

<global>
     <fieldsets>
        <sales_convert_quote>
            <old_order_id>
                <to_order>*</to_order>
            </old_order_id>
    </fieldsets>
</global>

可能涉及一些实验,但你明白了。