在之前的工作中,我已经覆盖了Magento Admin中的Order网格,以显示其他数据。所以我创建了一个模块来实现这一目标。我编写了新块并报告了config.xml中的覆盖:
<blocks>
<adminhtml>
<rewrite>
<sales_order_grid>
Company_Module_Block_Sales_Order_Grid
</sales_order_grid>
</rewrite>
</adminhtml>
</block>
之后我创建了一个新模块来获取和保存新数据。我现在想要在网格上显示它们。这些数据来自自定义表格,尚未在网格中使用。我还要使用渲染器来显示它们。
我不想让这两个模块相互依赖,新数据必须像在默认网格上一样显示在覆盖网格上。所以我希望(如果可能的话)避免第二个模块被第二个模块覆盖。
通过互联网搜索,我发现了这篇有趣的文章:http://www.ecomdev.org/2010/07/27/adding-order-attribute-to-orders-grid-in-magento-1-4-1.html
$resource->addVirtualGridColumn(
'customer_telephone',
'sales/order_address',
array('billing_address_id' => 'entity_id'),
'telephone'
);
这种方法对我来说非常合适:如果第一个模块被禁用,第二个模块的数据仍会显示在默认网格上,如果第二个模块被禁用,网格仍然会被覆盖。
它可能是完美的,但似乎你不能使用addVirtualGridColumn方法使用渲染器。
所以我的问题是:有没有办法在虚拟列上使用渲染器?如果没有,是否还有一种方法可以优雅地添加“渲染”列而不覆盖网格?
希望我在解释我的问题时已经清楚了,并希望有一个解决方案。谢谢你的帮助。
答案 0 :(得分:1)
您可以使用XML:
<add_order_grid_column_handle>
<reference name="sales_order.grid">
<action method="addColumnAfter">
<columnId>customer_telephone</columnId>
<arguments module="" translate="header">
<header>Customer telephone</header>
<index>custom_telephone</index>
<type>tex</type>
<sortable>true</sortable>
<renderer>YOUR_CUSTOM_RENDERER_CLASS</renderer>
</arguments>
<after>....</after>
</action>
</reference>
</add_order_grid_column_handle>