在Admin Grid中的VirtualColumn上使用Renderer

时间:2012-05-15 17:31:59

标签: magento

在之前的工作中,我已经覆盖了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方法使用渲染器。

所以我的问题是:有没有办法在虚拟列上使用渲染器?如果没有,是否还有一种方法可以优雅地添加“渲染”列而不覆盖网格?

希望我在解释我的问题时已经清楚了,并希望有一个解决方案。谢谢你的帮助。

1 个答案:

答案 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>