Mage_Adminhtml_Block_Sales_Order_Grid
クラスをカスタムモジュールで拡張し、いくつかの顧客属性(Magento EE 1.10)をグリッドに追加しました。私が追加された属性の更新:Magentoは注文グリッドに顧客属性フィルタを追加します
二つは、テキストフィールド(すなわち、それらはcustomer_entity_varchar
テーブルに住んでいる、と私はこれまでのところは良い。コレクションに追加し、グリッドでそれらを表示することができました。
第三です値は、に住んでeav_attribute_option
とeav_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"
カラムタイプがテキストの場合、オプションで解決されたデータベースまたはテキストに格納されている値が表示されますか? – clockworkgeek
@clockworkgeekそれらは属性オプションから解決されたテキストです - それは問題ですか?私の結合が整数値を引き出すべきか? –
私は、 'options'型を使うときに整数値を取り出すべきだと思っていますが、確かではありませんでした。あなたがそれをやる方法を既に知っているなら、それを試してみてください! – clockworkgeek