【问题标题】:Magento - Differentiate Normal orders and orders created programaticallyMagento - 区分正常订单和以编程方式创建的订单
【发布时间】:2016-01-12 18:45:33
【问题描述】:

我可以使用我的自定义模块以编程方式创建订单。

我希望添加一个标志来区分可以从管理员/网站创建的各种类型的订单和从我的自定义模块创建的订单。

我了解管理员订单和网站订单可以通过

来区分
if(!empty($order->getRemoteIp()){
  //place online
}
else{
  // place by admin
}

但是,我仍然想区分从管理员手动下达的订单和从我的自定义模块下达的订单。

以下是我想到的一些解决方案

1) 为订单或订单增量 id 添加前缀。

2) 在创建模块期间创建一个新商店,并使用该商店添加来自我的自定义模块的所有订单。但是,我不确定这可能会导致什么影响。

3) 我可以在创建订单期间使用

更改商店名称
$order->setStoreName('customName');

但是,这在管理网格或订单详细信息页面中不可见。我猜他们会从商店 ID 中获取“Purchased From”的信息。

我正在寻找上述最佳解决方案,或者更好的解决方案(如果有的话)。

注意:我的模块目前与 magento v1.4 及更高版本兼容。所以我需要一个涵盖大多数版本的解决方案。

【问题讨论】:

    标签: php magento


    【解决方案1】:

    您可以创建一个订单属性并在创建订单时设置它。

    要创建订单属性,您可以在模块文件夹中的sql/mymodule_setup/mysql4-upgrade-VNUMBER.php 中执行以下操作:

    $installer = $this;
    $installer->startSetup ();
    $setup = new Mage_Eav_Model_Entity_Setup ( 'core_setup' );
    
    $installer->getConnection()
    ->addColumn ( 
        $installer->getTable ( 'sales_flat_order' ), 
        'my_attribute_code',  // this is where you set the attribute code
        'varchar(255) DEFAULT NULL' );
    
    $setup->startSetup ();
    $setup->addAttribute ( 
        'order', 
        'my_attribute_code',
        array (
            'type' => 'int', // or text or whatever
            'label' => 'My attribute Label' 
    ));
    $installer->endSetup ();
    

    那么在处理订单的时候,只需使用

    $order->setMyAttributeCode($value);
    

    【讨论】:

    • 谢谢。我正在考虑这个。但是,您能告诉我为此创建新商店的含义吗?你觉得没必要吗?为什么是因为,在订单详情页面的“购买地”部分很容易显示。
    • 也许你可以查看这个答案stackoverflow.com/a/16953750/1398056,它总结了网站、商店、商店视图之间的差异。因为我真的不知道您要达到什么目的,这可能会帮助您做出决定。虽然在我看来(乍一看)创建一个全新的商店只是为了标记一些订单会有点过分,但我不能确定,这篇文章应该可以帮助你做出决定。干杯。
    猜你喜欢
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 2013-05-05
    • 1970-01-01
    相关资源
    最近更新 更多