0

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

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

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

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

谢谢。

4

1 回答 1

5

您可以挂钩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 上创建一个字段集,以将该属性的值传输到订单对象

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

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

于 2013-08-15T15:52:49.457 回答