我已经向 sales_order_flat 表添加了自定义属性,现在我想在 sales_order/index 网格中展示这个属性。我之前成功地使用了客户属性,但是在尝试对订单数据进行同样操作时遇到了错误。
我看到
<global>
<blocks>
<adminhtml>
<rewrite>
<sales_order_grid>WACI_AdminHtmlExt_Block_Sales_Order_Grid</sales_order_grid>
</rewrite>
</adminhtml>
</blocks>
<!-- etc -->
app/code/local/namespace/module/Block/Sales/Order/Grid.php
class WACI_AdminHtmlExt_Block_Sales_Order_Grid extends Mage_Adminhtml_Block_Sales_Order_Grid
{
protected function _prepareColumns()
{
$this->addColumn('dynamics_ord', array(
'header' => $this->__('Dynamics ID'),
'width' => '75px',
'index' => 'dynamics_ord',
));
$this->addColumnsOrder('dynamics_ord','entity_id');
return parent::_prepareColumns();
}
}
我看到
_prepareCollection
有时会被使用, 但我试图在 setCollection
期间仅修改集合,以简化操作。无论如何,列会显示出来,但没有数据产生。(并且在尝试排序时页面会出错)。你对此有什么想法吗?
更新
这篇文章是这个SO线程的延伸,我已经更新它以匹配模块的当前状态。也就是说,我正在添加列到 sales_flat_order
和 sales_flat_order_grid
中。
从那篇文章中,我有一个动作会在订单完成后设置此属性值。
我的问题是 - updateGridRecords()
如何发挥作用?
=> 当 $order->save() 被调用时,似乎会自动调用 updateGridRecords(这是我在订单完成后手动执行的操作)。
如果我理解正确的话,因为我没有从任何其他模型中获取数据,所以只需要调用_prepareColumns
。
=> 是的。在属性保存后正确显示和排序。胜利!