2011-06-21 23 views
0

Mage_Adminhtml_Block_Sales_Order_Gridクラスをカスタムモジュールで拡張し、いくつかの顧客属性(Magento EE 1.10)をグリッドに追加しました。私が追加された属性の更新:Magentoは注文グリッドに顧客属性フィルタを追加します

二つは、テキストフィールド(すなわち、それらはcustomer_entity_varcharテーブルに住んでいる、と私はこれまでのところは良い。コレクションに追加し、グリッドでそれらを表示することができました。

第三です値は、​​に住んでeav_attribute_optioneav_attribute_option_valueテーブルので属性は、選択している。私は$collection->getSelect()->joinLeft(.....)を使用して(コレクションに必要な値を追加しました。ここでも、これまでのところは良い。

私の問題は、表示することができることですは同時に属性をフィルタリングします。

私のMyCompany_MyModule_Block_Adminhtml_Order_Gridクラスの_prepareColumns()の内部では、このような列を追加すると、期待通りに各行に属性の値を表示できますが、ヘッダーにドロップダウンフィルターは表示されません:

protected function _prepareColumns() 
{ 
    ... 
    $this->addColumn('bureau', array(
     'header' => Mage::helper('sales')->__('Bureau'), 
     'index'  => 'bureau', 
     'type'  => 'text' 
    )); 
    ... 
} 

statusの例に続いて、このような列を追加する、私のヘッダ内のフィルタのドロップダウンを与えないが、それはもはや、各行における属性の値を表示:

protected function _prepareColumns() 
{ 
    ... 
    $this->addColumn('bureau', array(
     'header' => Mage::helper('sales')->__('Bureau'), 
     'index'  => 'bureau', 
     'type'  => 'options', 
     'options' => $this->_getBureauOptions(), 
     'filter_index' => 'value_option_table.option_id' 
    )); 
    ... 
} 

protected function _getBureauOptions() 
{ 
    $bureau = Mage::getResourceModel('eav/entity_attribute_collection') 
     ->setCodeFilter('bureau') 
     ->getFirstItem(); 

    $bureauOptions = $bureau->getSource()->getAllOptions(false); 
    $optionsArr = array(); 

    foreach ($bureauOptions as $option) { 
     $optionsArr[$option['value']] = $option['label']; 
    } 

    return $optionsArr; 
} 

アドバイス/説明wo uldは非常に高く評価されます。

UPDATE: これは、管理者ユーザーのみがいくつかのウェブサイトのための権限を持っていたときに私のコードは、マルチサイト環境でSQLエラーが発生することが判明: "SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'store_id' in where clause is ambiguous"

+0

カラムタイプがテキストの場合、オプションで解決されたデータベースまたはテキストに格納されている値が表示されますか? – clockworkgeek

+0

@clockworkgeekそれらは属性オプションから解決されたテキストです - それは問題ですか?私の結合が整数値を引き出すべきか? –

+0

私は、 'options'型を使うときに整数値を取り出すべきだと思っていますが、確かではありませんでした。あなたがそれをやる方法を既に知っているなら、それを試してみてください! – clockworkgeek

答えて

0

@clockworkgeekが答えを持っていました私の質問の最初の部分。

問題は、私のjoinLeft()が属性オプションからテキスト値を取得していたのに対し、'type => 'options'を使用しているときは整数値を取得していたはずです。

joinLeft()が​​(実際には単純な結合)から整数値のみを取得するように変更すると、フィルタリングと表示が完璧に機能しました。ありがとうございます。

別の質問として私の2番目の問題(権限によって引き起こされるSQLエラーについて)を再掲載します。

関連する問題