2012-05-15 60 views
1

在之前的作品中,我忽略了Magento Admin中的Order grid,以顯示其他數據。所以我創建了一個模塊來做到這一點。我寫新的塊和報道在config.xml壓倒一切的:在管理網格中的VirtualColumn上使用渲染器

<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

您可以使用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>