Magento-如何连接到订单重新排序

Magento-如何连接到订单重新排序,magento,Magento,当客户重新订购时,我需要在新订单上包含对原始订单ID的引用。我可以看到如何在sales\u flat\u order和sales\u flat\u quote(我想!)中添加此属性,但我看不到如何连接到重新排序 重新排序非常简单,可以在app\code\core\Mage\Sales\Controller\Abstract.php->reorderAction中完成。它只是将订单项目复制到购物车,然后打开购物车。但是我怎样才能连接到它来添加orderId交叉引用呢 我可能只是将它复制到本地并编辑

当客户重新订购时,我需要在新订单上包含对原始订单ID的引用。我可以看到如何在
sales\u flat\u order
sales\u flat\u quote
(我想!)中添加此属性,但我看不到如何连接到重新排序

重新排序非常简单,可以在
app\code\core\Mage\Sales\Controller\Abstract.php->reorderAction
中完成。它只是将订单项目复制到购物车,然后打开购物车。但是我怎样才能连接到它来添加orderId交叉引用呢

我可能只是将它复制到本地并编辑它(正确吗?),但这不是一种明智的做法,因为我在Abstract.php中完成了所有工作,并制作了它的本地副本

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


谢谢。

您可以连接到
控制器\u操作\u预发货\u销售\u订单\u重新订单
事件,然后在观察者上获取订单id参数

$oldOrderId=Mage::app()->getRequest()->getParam('order_id');
Mage::getSingleton('checkout/session')->getQuote()->setOldOrderId($oldOrderId)->save();
在sql安装程序上为quote and order表创建新列

$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保存到观察者上的quote对象

$oldOrderId=Mage::app()->getRequest()->getParam('order_id');
Mage::getSingleton('checkout/session')->getQuote()->setOldOrderId($oldOrderId)->save();
并在config.xml上创建一个字段集,将该属性的值传递给order对象

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

*

可能会涉及到一些实验,但您已经了解了这个想法。

您可以连接到
控制器\u操作\u预发布\u销售\u订单\u重新订购
事件,然后在观察者上获取订单id参数

$oldOrderId=Mage::app()->getRequest()->getParam('order_id');
Mage::getSingleton('checkout/session')->getQuote()->setOldOrderId($oldOrderId)->save();
在sql安装程序上为quote and order表创建新列

$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保存到观察者上的quote对象

$oldOrderId=Mage::app()->getRequest()->getParam('order_id');
Mage::getSingleton('checkout/session')->getQuote()->setOldOrderId($oldOrderId)->save();
并在config.xml上创建一个字段集,将该属性的值传递给order对象

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

*

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

谢谢@changeling。从更一般的角度来看,您是如何确定有一个控制器\操作\预分配\销售\订单\再订单事件要挂钩的,并且实际上如何挂钩?我已经创建了我的模块和观察者,但是在config.xml中应该放置什么样的正确事件呢?有些以不同的方式引用事件。例如,销售、订单、下单、下单后,在下单后挂钩。那么这会是以前的销售订单再订单吗?不幸的是,我认为这行不通。据我所知,在“销售\订单\再订单”之前或之后都没有发送任何事件。似乎Magento只提供有限的事件集,而重新排序不是其中之一!如果Magento有一种为每个动作触发前后事件的机制,而不是硬编码一组有限的事件,那就更好了。这种类型的事件是在每个控制器上的每个动作预分散中触发的事件,它们不是显式的declaredit,因为当调用控制器方法“reorder”时,会触发事件,然后获取订单id并将其添加到observer中的当前报价中,该操作将把以前的项目添加到购物车中,旧的订单id引用将被保留。谢谢@changeling。从更一般的角度来看,您是如何确定有一个控制器\操作\预分配\销售\订单\再订单事件要挂钩的,并且实际上如何挂钩?我已经创建了我的模块和观察者,但是在config.xml中应该放置什么样的正确事件呢?有些以不同的方式引用事件。例如,销售、订单、下单、下单后,在下单后挂钩。那么这会是以前的销售订单再订单吗?不幸的是,我认为这行不通。据我所知,在“销售\订单\再订单”之前或之后都没有发送任何事件。似乎Magento只提供有限的事件集,而重新排序不是其中之一!如果Magento有一种为每个动作触发前后事件的机制,而不是硬编码一组有限的事件,那就更好了。这种类型的事件是在每个控制器上的每个动作预分散中触发的事件,它们不是显式的declaredit,因为当调用控制器方法“reorder”时,会触发事件,然后获取订单id并将其添加到observer中的当前报价中,然后该操作将把以前的项目添加到购物车中,并且旧的订单id引用将被保留。