2014-07-01 127 views
0

所以,這是我在網站上的第一篇文章,但我從過去的網站獲得了相當多的知識,並期待進一步學習。我絕對是一個新手,因爲我已經自學成才與Magento合作,所以我很抱歉這篇文章有任何不正確的地方。公司名稱訂單網格列

我正在研究Magento 1.8.1,主題包含在內。涉及的多個擴展也是完全自定義的。

問題:我一直在嘗試讓公司名稱出現在銷售訂單網格上一段時間,並且有一些運氣。

首先,我抄: /core/Mage/Adminhtml/Block/Sales/Order/Grid.php 至 - /local/Mage/Adminhtml/Block/Sales/Order/Grid.php

然後我在_prepareCollection()的代碼更新爲這樣:

protected function _prepareCollection() 
{ 
    $collection = Mage::getResourceModel($this->_getCollectionClass()); 
    $collection->getSelect()->join(
     array('addressTable' => 'sales_flat_order_address'),'main_table.entity_id = addressTable.parent_id AND addressTable.address_type = "billing"',array('billing_company'=>'company')); 
    $this->setCollection($collection); 
    return parent::_prepareCollection(); 
} 

雖然加入以下_prepareColumns:

$this->addColumn('company', array(
     'header' => Mage::helper('sales')->__('Bill to Company'), 
     'index' => 'billing_company', 
    )); 

好,迄今爲止好。所有事情都應該如此,直到我決定擁有Ship to Company以及因爲我們的大多數客戶爲其他公司購買而真的很高興。

要做到這一點,我沒有問題,就像我以前一樣添加列:

$this->addColumn('company', array(
     'header' => Mage::helper('sales')->__('Ship to Company'), 
     'index' => 'shipping_company', 
    )); 

列添加沒有問題,除了它在我把它(shipping_name前)這個地方是不是,這是隻是添加沒有數據的列。

現在要添加數據,我會在_prepareCollection下添加另一個集合,因爲發貨信息與表格中的結算信息位於不同的行上?像這樣?:

$collection->getSelect()->join(
     array('addressTable' => 'sales_flat_order_address'),'main_table.entity_id = addressTable.parent_id AND addressTable.address_type = "shipping"',array('shipping_company'=>'company')); 

但當我嘗試這個,我得到一個錯誤:You cannot define a correlation name 'addressTable' more than once

我得到相當多的兩列之間的衝突也是如此。例如,當我沒有在_prepareColumns下評論的「發運至」公司時,它會顯示Bill to Company專欄應列入的「發往公司」列。列中也沒有數據。只要我評論Ship to Company Bill to Company出現並且具有正確的數據。

基本上,我只需要獲取「公司專欄」以及「公司專欄」的Bill。最好在適當的名稱旁邊。

任何答案或幫助將不勝感激。

我已經將公司欄添加到客戶網格並創建新訂單客戶網格,而且沒有任何問題。

謝謝

**編輯 **

嗯,我只是理解了它居然所以我想我的解決方案張貼到我的其他問題,以查看如果需要的話:

這是我更新的本地/法師/ Adminhtml /座/銷售/訂單/ Grid.php代碼:

protected function _prepareCollection() 
{ 
    $collection = Mage::getResourceModel($this->_getCollectionClass()); 
    $collection->getSelect()->join(array('addressTable' => 'sales_flat_order_address'),'main_table.entity_id = addressTable.parent_id AND addressTable.address_type = "billing"',array('billing_company'=>'company')); 
    $collection->getSelect()->join(array('shipping'=>'sales_flat_order_address'),'main_table.entity_id=shipping.parent_id and shipping.address_type="shipping"',array('shipping_company'=>'company')); 
    $this->setCollection($collection); 
    return parent::_prepareCollection(); 
} 

要讓列放置在Ship to Name旁邊,我必須使用addColumnAfter作爲Ship to Company,因爲它將它放置在最右側。

$this->addColumn('company', array(
     'header' => Mage::helper('sales')->__('Bill to Company'), 
     'index' => 'billing_company', 
     'filter index' => 'billing_company' 
    )); 

    $this->addColumnAfter('shipping_company', array(
     'header' => Mage::helper('sales')->__('Ship to Company'), 
     'index' => 'shipping_company', 
     'filter index' => 'shipping_company' 
     ), 
    'billing_name' 
    ); 

瞧,一切工作都是應該的!

回答

6

好了,所以我編輯以上是不完全正確的。列顯示和填充很好,但嘗試搜索字段後,我收到一個錯誤。因此,經過更多的研究,我發現這個解決方案:Using column aliases in Sales Order Grid field

這個問題的答案完美的只是改變了一些小事情。爲了防止別人正在尋找這個解決方案,我附上了我的代碼。

protected function _prepareCollection() 
{ 
    $collection = Mage::getResourceModel($this->_getCollectionClass()); 
    $collection->getSelect()->join(array('address_billing' => $collection->getTable("sales/order_address")),'main_table.entity_id = address_billing.parent_id AND address_billing.address_type = "billing"',array('address_billing.company as billing_company')); 
    $collection->getSelect()->join(array('address_shipping' => $collection->getTable("sales/order_address")),'main_table.entity_id = address_shipping.parent_id AND address_shipping.address_type = "shipping"',array('address_shipping.company as shipping_company')); 
    $this->setCollection($collection); 
    return parent::_prepareCollection(); 
} 

在_prepareColumns()改成這樣:

$this->addColumn('company', array(
     'header' => Mage::helper('sales')->__('Bill to Company'), 
     'index' => 'billing_company', 
     'filter_index' => 'address_billing.company', 
    )); 

    $this->addColumnAfter('shipping_company', array(
     'header' => Mage::helper('sales')->__('Ship to Company'), 
     'index' => 'shipping_company', 
     'filter_index' => 'address_shipping.company', 
     ), 
    'billing_name' 
    ); 

記得我不得不使用addColumnAfter功能讓我放置在正確的位置航運公司列。

有了這個修復程序,一切都終於按照我想要的方式工作了!

編碼愉快!

1

修改代碼

 protected function _prepareCollection() 
     { 
      $collection = Mage::getResourceModel($this->_getCollectionClass()); 

      $collection->getSelect()->join(array('billing'=>'sales_flat_order_address'),'main_table.entity_id=billing.parent_id and billing.address_type="billing"',array('*')); 

      $collection->getSelect()->join(array('shipping'=>'sales_flat_order_address'),'main_table.entity_id=shipping.parent_id and shipping.address_type="shipping"',array('shipping.company as shipping_company')); 

      $this->setCollection($collection); 

      parent::_prepareCollection(); 
    return Mage_Adminhtml_Block_Widget_Grid::_prepareCollection(); 
     } 

而且在_prepareColumns添加列()

$this->addColumn('company', array(
      'header' => Mage::helper('sales')->__(' Billing company'), 
      'index' => 'company', 
      'filter_index' => 'billing.company', 
     )); 
     $this->addColumn('shipping_company', array(
      'header' => Mage::helper('sales')->__(' Shipping company'), 
      'index' => 'shipping_company', 
      'filter_index' => 'shipping_company', 
     )); 
+0

謝謝你的回答。然而這並不奏效。首先,我不是在尋找郵政編碼,而是在郵寄並輸入公司名稱。 Ship to Company現在正在完美地工作,除了某種原因,它將它放在最右邊,而不是靠近Ship to Name?另外,當我將此代碼合併到公司數據時,我的賬單不起作用。 – rltegantvoort

+0

我還在訂單網格上方獲得以下信息:SELECT'main_table'。*,'billing'.'company','shipping'.'company' as'shipping_company' FROM'sales_flat_order_grid' as'main_table' INNER JOIN'sales_flat_order_address' AS'billing' ON main_table.entity_id = billing.parent_id and billing.address_type =「billing」INNER JOIN'sales_flat_order_order_'' as'shipping' ON main_table.entity_id = shipping.parent_id and shipping.address_type =「shipping」 – rltegantvoort

+0

我修改了它現在檢查 –