我已在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 -->
应用/代码/本地/命名空间/模块/块/销售/订购/ 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
是sometimes used,但是我试图在setCollection
期间修改集合,如果没有别的话,简单。
无论如何,列都会显示,但不会生成任何数据。 (当我尝试排序时页面错误)。
有关于此的任何想法吗?
这篇文章是this SO thread的扩展我已更新它以匹配模块的当前状态。也就是说,我正在为sales_flat_order
和sales_flat_order_grid
添加列。
从那篇文章中,我有一个动作来设置这个属性值(在订单完成后)。
我现在的问题是 - updateGridRecords()
如何发挥作用?
=&GT;当调用$ order-&gt; save()时,updateGridRecords似乎会被自动调用(我在订单完成后手动执行此操作)。
如果我理解正确,因为我没有从任何其他模型中提取数据,_prepareColumns
调用就是所需要的。
=&GT;是的。保存attr后正确显示和排序。赢了!
答案 0 :(得分:4)
客户收集和订单网格集合之间的区别在于客户集合源自Mage_Eav_Model_Entity_Collection_Abstract,而sales_flat_order_grid集合源自Mage_Sales_Model_Resource_Abstract,而非EAV。
因此您无法添加要选择的属性,就像您通常可以使用EAV一样 - 您要使用的所有属性都必须表示为平面表中的表列。
您正在调用的函数addAttributeToSelect在Mage_Sales_Model_Resource_Collection_Abstract类中实现,并在后台使用addFieldToSelect,因此在您的情况下,您应该在sales_flat_order_grid表中有一个名为dynamics_ord的列。
将属性值从订单EAV移动到订单网格的功能是Mage_Sales_Model_Resource_Order_Abstract :: updateGridRecords,此函数读取sales_flat_order_grid表的结构以了解应将哪些属性写入sales_flat_order_grid表,因此如果缺少dynamics_ord列,则必须添加它在你的模块的安装脚本中。
我遇到了this堆栈溢出解决方案,了解如何在安装脚本中添加列,然后将其添加到网格中。答案有点过时,但我认为它可行。
我还发现了this开箱即用的解决方案,关于如何添加将在订单网格上使用的属性,但尚未对其进行测试,因此我无法确定它是否有效。
答案 1 :(得分:0)
使用FLAT表创建连接EAV表时,无法过滤网格中的数据。 我之前遇到过同样的问题,并且和我的前辈一起投入了4天,然后最终得出2个你不能那样做的结论...... !!!