2012-11-25 67 views
2

我試圖在位於此處的銷售訂單網格中爲送貨方式(標準,優先級,快遞)添加一個新列:Magento(v 1.7.0.2) - 在銷售訂單網格中添加「送貨方式」列

/home/html/app/code/core/Mage/Adminhtml/Block/Sales/Order/Grid.php

我研究過萬噸的方法,但無論它是一箇舊版本的Magento的,或者乾脆沒有按沒有工作。據我瞭解,我需要做到以下幾點:

  1. 編輯_prepareCollection()
  2. 在_prepareColumns添加的情況下,(),如下所示:

$this->addColumn('shipping_description', array( 'header' => Mage::helper('sales')->__('Shipping Method'), 'index' => 'shipping_description', ));

可有人請幫我解決這個問題?

回答

2

將銷售信息添加到銷售訂單網格中您必須重寫Mage_Adminhtml_Block_Sales_Order_Grid類。爲此創建您自己的模塊。 =>在
糊下面的XML代碼塊部的config.xml

<globals> 
    <block> 
     <adminhtml> 
      <rewrite> 
       <sales_order_grid>Yourpackage_Yourmodule_Block_Sales_Order_Grid</sales_order_grid> 
      </rewrite> 
     </adminhtml> 
    </block> 
<globals> 

現在定義一個類Yourpackage_Yourmodule_Block_Sales_Order_Grid,放入 程序包/ MODULE_NAME /砌塊/銷售/訂購/ Grid.php

class Yourpackage_Yourmodule_Block_Sales_Order_Grid extends Mage_Adminhtml_Block_Sales_Order_Grid 
{ 
protected function _prepareCollection() 
{ 

    $collection = Mage::getResourceModel($this->_getCollectionClass()); 
    $collection->getSelect()-> 
    joinLeft('sales_flat_order', 'main_table.entity_id=sales_flat_order.entity_id', array("shipping_desc"=>"shipping_description")); 

    $this->setCollection($collection); 
    return $this; 
} 

protected function _prepareColumns() 
{ 
    $this->addColumnAfter('shipping_desc', array(
     'header'=> Mage::helper('sales')->__('Shipping Descr #'), 
     'width' => '80px', 
     'type' => 'text', 
     'index' => 'shipping_desc', 
    ),"real_order_id"); 
    return parent::_prepareColumns(); 

} 

} 
+0

答案很簡單,你的解決方案不起作用。有很多問題,例如按列排序,訂單狀態或真正的任何類型的過濾。它會拋出大量的錯誤。我已經求助於一個程序員來構建一個久經考驗的模塊。 – user1851806

+0

對於任何發現此問題並希望得到解決方案的人,只需將「return $ this」更改爲「return parent :: _ prepareCollection()」et voila –

0

我仍然在尋找一個很好的解決方案。但是,作爲一種方法,我想貢獻我所知,到目前爲止基於Magento的1.7

  • 我更喜歡使用的setCollection代替_prepareCollection()。看起來使用時過濾等問題較少setCollection
  • 完美的屬性到目前爲止是如此接近。 shipping_description可在sales_order_flat中找到。不幸的是,默認收集是基於sales_flat_order_grid。 一個可能的解決方案是通過覆蓋_getCollectionClass

    protected function _getCollectionClass() 
    { 
        //return 'sales/order_grid_collection'; 
        return 'sales/order_collection'; 
    } 
    

    地說,這將導致其他的問題重要的是要關掉這個。例如。運輸名稱和帳單名稱是空的,因爲他們從sales_flat_order_grid獲得了他們的信息。我們可以從sales_flat_order_address得到他們,但我不確定這是否會導致很好的解決方案...

  • 另一種方法是加入sales_order_flat。通過這種方式,我們保留來自sales_flat_order_grid的所有信息,也可以獲得shipping_method。這裏的問題是過濾時發生的count(*)語句。錯誤是關於一個模糊的increment_id。目前我認爲這是一個Magento錯誤,因爲increment_id不應該在沒有連接到它的表的情況下使用。

  • 不要忘記第三種方式:我們可以擴展saled_flat_order_grid並添加shipping_method,但我認爲這將是嚴厲的方式。只要沒有人站在你身後Dont't觸摸app/code/core UND表與槍雙手;-)

到目前爲止,我仍然不知該走哪條路。也許還有另一種(更好的)方式,我沒有在這裏列出?

相關問題