7

カスタム列を Sales Order グリッドに追加しようとしていて、結合と列をコレクションに追加しましたが、列が空で表示されます。また、フィルタリングしようとすると、次のエラーが表示されます: Column not found: 1054 Unknown column 'method' in 'where clause'. 私のコードは、そこにあるチュートリアルの大部分と同じように見えるので、私の列に支払いデータがない理由がわかりません. 最終的な SQL クエリをエコーし​​て MySQL Workbench で実行したところ、結果と構文は問題ないようです。何か不足していますか?sales_flat_order_grid テーブルに列を追加する必要がありますか? 「きれいな」支払い方法の名前が、フィルターに移動するときに列に表示されている支払いコードとうまく一致しない場合があることに気付きましたが、フィルター オプションで支払いコードを使用する場合も同じ問題があります。いくつかの列データを取得した後、その詳細を後でヒットすると考えました。Enterprise 1.12.0.2 を使用しています。

アプリ/コード/ローカル/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,
    ));

}

管理画面

4

4 に答える 4

3

で提案されたソリューション:

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

よりきれいです。

いずれにせよ、バックエンド グリッドのオプションとして $methods を取得する方法は、Web サイト スコープで支払い方法が有効になっている場合、マルチストア対応ではありません。この場合、次のようにします。

        $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;
            }
        }
    }
于 2015-01-22T15:01:48.423 に答える