1

在以前的作品中,我覆盖了 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 方法来使用渲染器。

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

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

4

1 回答 1

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>
于 2012-12-24T08:01:24.123 回答