我必须在订单页面添加一列,这意味着要添加一列sales_flat_order_grid.这两个都是可能的,但我不知道如何添加一个值,以便它保存在我的新列中.
我是否也必须注册一个新属性?
该值不存在于报价中,因此我想我不需要注册,config/global/fieldsets/sales_convert_quote因为该值不是要转换的.
使用Magento Enterprise 1.8.
clo*_*eek 23
经过大量的反复试验 - 很多错误 - 我想我现在已经有了.
首先sales_flat_order_grid更新Mage_Sales_Model_Mysql4_Order_Abstract::updateGridRecords(),通过跟踪我制定的路径,它检查"main"table(sales_flat_order)和主表+"_grid"(sales_flat_order_grid),获取它们的列的交叉并构造一个查询.因此,网格表中所需的任何列也必须位于主表中.它不是EAV风格的实体,因此不需要创建属性.
这是我的设置脚本:
<?php
/* @var $this Nexxt_Booth_Model_Entity_Setup */
$installer = $this;
$installer->getConnection()->addColumn($installer->getTable('sales_flat_order'), 'box_num', 'varchar(255)');
$installer->getConnection()->addColumn($installer->getTable('sales_flat_order_grid'), 'box_num', 'varchar(255)');
Run Code Online (Sandbox Code Playgroud)
接下来,我需要额外的列显示在admin中的所有订单表中.为此,我覆盖了每个相关的块.
<?xml version="1.0"?>
<config>
....
<global>
<blocks>
<adminhtml>
<rewrite>
<customer_edit_tab_view_orders>
<!-- Recent 5 orders on customer page -->
My_Module_Block_Adminhtml_Customer_Edit_Tab_View_Orders
</customer_edit_tab_view_orders>
<customer_edit_tab_orders>
<!-- All orders on customer tab -->
My_Module_Block_Adminhtml_Customer_Edit_Tab_Orders
</customer_edit_tab_orders>
<sales_order_grid>
<!-- All orders in Sales menu -->
My_Module_Block_Adminhtml_Sales_Order_Grid
</sales_order_grid>
</rewrite>
</adminhtml>
</blocks>
</global>
</config>
Run Code Online (Sandbox Code Playgroud)
在My/Module/Block/Adminhtml/Sales/Order/Grid.php我做了以下:
<?php
class My_Module_Block_Adminhtml_Sales_Order_Grid extends Mage_Adminhtml_Block_Sales_Order_Grid
protected function _prepareColumns()
{
$this->addColumn('box_num', array(
'header' => $this->__('Box #'),
'index' => 'box_num',
'width' => '100px'
));
$this->addColumnsOrder('box_num', 'shipping_name');
return parent::_prepareColumns();
}
}
Run Code Online (Sandbox Code Playgroud)
同样,在My/Module/Block/Adminhtml/Customer/Edit/Tab/Orders.php和My/Module/Block/Adminhtml/Customer/Edit/Tab/View/Orders.php我添加了这个功能:
protected function _prepareColumns()
{
$this->addColumn('box_num', array(
'header' => $this->__('Box #'),
'index' => 'box_num',
'width' => '100px'
));
$this->addColumnsOrder('box_num', (Mage::app()->isSingleStoreMode() ? 'grand_total' : 'store_id'));
return parent::_prepareColumns();
}
Run Code Online (Sandbox Code Playgroud)
最后,为了完成,在sales_convert_quote_to_order我填充新字段的情况下.只要在保存订单之前的某个点添加数据,此位就不那么重要了.
$order->setBoxNum('DATA GOES HERE');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18727 次 |
| 最近记录: |