2013-07-26 14 views
7

カスタム注文の列を受注グリッドに追加しようとしていますが、その結合と列をコレクションに追加しましたが、列には何も表示されません。また、フィルタリングしようとすると、次のエラーが表示されます。列が見つかりません:1054 'where句'の 'method'が不明です。。私のコードは大部分のチュートリアルと同じように見えるので、なぜ自分のコラムに支払いデータがないのか分かりません。私は最終的なSQLクエリをエコーし​​、MySQL Workbenchで実行しました。結果と構文はうまくいくようです。何か不足していますか? sales_flat_order_gridテーブルに列を追加する必要がありますか?私の "かなり"の支払い方法の名前は、私がフィルタに行くときに私が列に表示している支払いコードとうまく合わないかもしれないことに気づいていますが、フィルタオプションで支払いコードを使用するときに同じ問題があります。私は列データを取得した後、その詳細を後で打つことにしました。私はエンタープライズ1.12.0.2を使用しています。Magento管理注文グリッドに支払方法を追加します。

アプリ/コード/ローカル/のmymodule/adminhtml /ブロック/販売/オーダー/グリッド:

 protected function _prepareCollection() 
{ 
    $collection = Mage::getResourceModel($this->_getCollectionClass()); 
    $collection->getSelect()->joinLeft(array('sfop'=>'sales_flat_order_payment'), 'main_table.entity_id = sfop.parent_id',array('sfop.method')); 
    $this->setCollection($collection); 
    return parent::_prepareCollection(); 
} 

    protected function _prepareColumns() 
{ //edited for brevity...only my additions below![enter image description here][1] 
     $payments = Mage::getSingleton('payment/config')->getActiveMethods(); 
    $methods = array(); 
    foreach ($payments as $paymentCode=>$paymentModel) 
    { 
     $paymentTitle = Mage::getStoreConfig('payment/'.$paymentCode.'/title'); 
     $methods[$paymentCode] = $paymentTitle; 
    } 

    $this->addColumn('method', array(
     'header' => Mage::helper('sales')->__('Payment Method'), 
     'index' => 'method', 
     'filter_index' => 'sfop.method', 
     'type' => 'options', 
     'width' => '70px', 
     'options' => $methods, 
    )); 

} 

Admin Screen

答えて

7

あなたが管理グリッドの親ではないクラスの親を返す必要がありますあなたは書き直しています。

以下で)(方法_prepareCollectionを交換: -

protected function _prepareCollection() 
{ 
    $collection = Mage::getResourceModel($this->_getCollectionClass()); 
    $collection->join(array('payment'=>'sales/order_payment'),'main_table.entity_id=parent_id','method'); 
    $this->setCollection($collection); 
    return Mage_Adminhtml_Block_Widget_Grid::_prepareCollection(); 
} 
+1

おかげで仕事!私はSQLエラー "あいまいな列parent_id"を取得しましたが、私は 'main_table.entity_id = parent_id'を 'main_table.entity_id = payment.parent_id'に変更しなければなりませんでした。また、テーブルエイリアスを "sfop"から "支払い"に変更したので、addColumn()の呼び出しで対応する変更を "filter_index"オプションに変更する必要があります。 –

1
$collection->getSelect()->joinLeft('sales_flat_order_payment', 'main_table.entity_id = sales_flat_order_payment.parent_id',array('method')); 
$this->addColumn('method', array(
     'header' => Mage::helper('sales')->__('Method'), 
     'index' => 'method', 
     'filter_index' => 'sales_flat_order_payment.method', 
     )); 
+0

それは動作しません、追加する必要があります: 'filter_index' => 'payment.method' - >支払いは、私たちが結合で示すテーブルのエイリアスです。 – jruzafa

2

のに提案された解決策:

http://www.atwix.com/magento/column-to-orders-grid/

がはるかにクリーンです。

バックエンドグリッドのオプションとして$メソッドを取得する方法は、支払い方法がウェブサイトの有効範囲で有効になっていれば、マルチストア対応ではありません。この場合の操作を行います。レンダリングのために

 $methods = array(); 
     foreach (Mage::app()->getStores() as $storeId => $store) { 
     $payments = Mage::getSingleton('payment/config')->getActiveMethods($storeId); 

     foreach ($payments as $paymentCode => $paymentModel) { 
      $paymentTitle = Mage::getStoreConfig('payment/'.$paymentCode.'/title'); 
      if (!isset($methods[$paymentCode])) { 
       $methods[$paymentCode] = $paymentTitle; 
      } 
     } 
    } 
1

、いないすべての支払方法は、タイトル(TIGポストNL例えば)

$payments = Mage::getSingleton('payment/config')->getActiveMethods(); 
$methods = array(); 
foreach ($payments as $paymentCode=>$paymentModel) 
{ 
    $paymentTitle = Mage::getStoreConfig('payment/'.$paymentCode.'/title', 1); 
    if(empty($paymentTitle)) { 
     $paymentTitle = Mage::helper('payment')->getMethodInstance($paymentCode)->getTitle(); 
    } 
    $methods[$paymentCode] = $paymentTitle; 
} 
関連する問題