2014-11-14 68 views
1

有很多教程和建議,其中包括:安裝如何在magento訂單網格中正確添加shipping_description列?

我已經用下面的代碼修改Grid.php加入shipping_description精細基於各種技巧和竅門自定義擴展等,但是當涉及到分類整理通過價格或狀態它引發錯誤:

SQLSTATE [23000]:完整性約束違規:1052列中的「狀態」 where子句是模棱兩可 或 SQLSTATE [23000]:完整性約束違規:1052列在「increment_id」 where clause is ambiguous

它可以通過計費nd航運名稱。

下面的代碼添加到Grid.php:

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

    $tableName = Mage::getSingleton("core/resource")->getTableName('sales_flat_order');     
    $collection->getSelect()->join($tableName, "main_table.entity_id =   $tableName.entity_id",array("shipping_description")); 
    $this->setCollection($collection);    
    return Mage_Adminhtml_Block_Widget_Grid::_prepareCollection(); 
}  


protected function _prepareColumns() 
{ 
    $this->addColumnAfter('shipping_description', array(
     'header' => Mage::helper('sales')->__('Delivery'), 
     'width'  => '180px', 
     'type'  => 'text', 
     'index'  => 'shipping_description' 

    ),'shipping_name'); 

    return parent::_prepareColumns(); 
} 

任何想法,意見,將不勝感激!

回答

0

以下工作在我的情況。排序現在適用於每一個領域。未覆蓋核心文件。

一步一步地在同一條船上的人。測試1.8.1

  1. 複製您的網格。從

    /app/code/core/Mage/Adminhtml/Block/Sales/Order/Grid.php to /app/code/local/Mage/Adminhtml/Block/Sales/Order/Grid.php

    PHP的,如果路徑不存在創建它。

  2. 打開新Grid.php後getResourceModel行添加以下代碼_prepareCollection()

    $collection->getSelect()->join(array('mt'=>'sales_flat_order'), 'mt.entity_id = main_table.entity_id', array('mt.increment_id','mt.store_id','mt.created_at','mt.shipping_description','mt.status','mt.base_grand_total','mt.grand_total'));

    $collection->getSelect()->group('main_table.entity_id');

  3. 添加以下代碼_prepareColumns()功能(在您需要的addColumn()之間電話)

    $this->addColumn('shipping_description', array( 'header' => Mage::helper('sales')->__('Delivery'), 'type' => 'text', 'index' => 'shipping_description',
    'filter_index' => 'mt.shipping_description', ));

  4. 查找addColumns()功能increment_id, store_id, created_at, base_grand_total, grand_total, status並在每個添加以下參數:

    'filter_index' => 'mt.___your_column_name____',

如何優化上述代碼的任何建議都歡迎。

0

爲了防止這種類型的錯誤在排序列

SQLSTATE[23000]: Integrity constraint violation: 1052 Column ‘status’ in where clause is ambiguous ERROR 

排序訂單時......確保你補充一點:

'filter_index'=>'main_table.status', 

到addColumn狀態陣列

希望這一定會幫助你。

+0

嗨liyakat,不幸的是你的解決方案沒有奏效。它仍然將我重定向到儀表板併發出上述SQLSTATE [23000]錯誤... – mike

2

我猜你正在做的是在集合中添加「shipping_description」字段,但是,我可以通過一個簡單的幫助你。即在網格中使用渲染器。在我看來這很容易。

你改寫順序網格塊(覆寫塊是一個很好的做法)添加到您的_prepareColumn()函數

$this->addColumn('shipping_description', array(
      'header'=> Mage::helper('sales')->__('Shipping Description'), 
      'index' => 'shipping_description', 
      'filter' => false, 
      'sortable' => false, 
      'renderer' => 'PackageName_ModuleName_Block_Adminhtml_Sales_Order_Renderer_Shipping', 
     )); 

這裏後,你可以看到這個指向類「PackageName_ModuleName_Block_Adminhtml_Sales_Order_Renderer_Shipping」渲染器。現在,繼續在上述路徑中創建名爲「Renderer」的文件夾,並在該文件夾內創建「Shipping.php」文件。

<?php 
class Custom_Customer_Block_Adminhtml_Customer_Renderer_Lifetime extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract 
{ 
    public function render(Varien_Object $row) 
    { 
     $customerId = $row->getData('entity_id'); 

     $customer = Mage::getModel('customer/customer')->load($customerId); 
     $customerTotals = Mage::getResourceModel('sales/sale_collection') 
      ->setCustomerFilter($customer) 
      ->load() 
      ->getTotals(); 
     $customerLifetimeSales = $customerTotals->getLifetime(); 
     //$customerNumberOfOrders = $customerTotals->getNumOrders(); 
     echo Mage::helper('core')->currency($customerLifetimeSales); 
    } 
} 

在上述類別i覆蓋客戶模塊來確定客戶的終身銷售。在這個功能中,你可以做任何操作,你將在這個文件中顯示「返回」或「回顯」。

這樣你就不需要加入表中的collection.Just打電話,讓你發貨的描述和打印it.That的it.It將輕鬆很多

希望這將有助於模型。

+0

這個想法在理論上聽起來很棒,但在我的情況下並沒有解決。它只顯示一個白色的空白訂單屏幕。 – mike

相關問題