Magento - 如何挂钩订单重新排序

Ada*_*ery 0 magento

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

重新排序非常简单,并在app\code\core\Mage\Sales\Controller\Abstract.php->reorderAction. 它只是将订单商品复制到购物车,然后打开购物车。但是我怎样才能加入这个以添加一个 orderId 交叉引用呢?

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

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

谢谢。

cha*_*ing 5

您可以挂钩controller_action_predispatch_sales_order_reorder事件,然后在观察者上获取订单 ID 参数

$oldOrderId=Mage::app()->getRequest()->getParam('order_id');
Run Code Online (Sandbox Code Playgroud)

在 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();
Run Code Online (Sandbox Code Playgroud)

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

Mage::getSingleton('checkout/session')->getQuote()->setOldOrderId($oldOrderId)->save();
Run Code Online (Sandbox Code Playgroud)

并在您的 config.xml 上创建一个字段集以将该属性的值传输到订单对象

<global>
     <fieldsets>
        <sales_convert_quote>
            <old_order_id>
                <to_order>*</to_order>
            </old_order_id>
    </fieldsets>
</global>
Run Code Online (Sandbox Code Playgroud)

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