カスタム モジュールを使用してクラスを拡張し、Mage_Adminhtml_Block_Sales_Order_Grid
いくつかの顧客属性 (Magento EE 1.10) をグリッドに追加しました。
追加した属性のうち 2 つはテキスト フィールドです (つまり、それらはcustomer_entity_varchar
テーブルに存在し、コレクションに追加してグリッドに表示することができました。今のところは問題ありません。
3 番目の属性は選択であるため、値はcustomer_entity_int
、 、eav_attribute_option
およびeav_attribute_option_value
テーブルに存在します。必要な値をコレクションに追加しました ( を使用し$collection->getSelect()->joinLeft(.....)
ます。
私の問題は、属性を同時に表示およびフィルタリングできることです。
_prepareColumns()
クラスの関数内で、MyCompany_MyModule_Block_Adminhtml_Order_Grid
次のような列を追加すると、予想どおり、各行に属性の値を表示できますが、ヘッダーにドロップダウン フィルターが表示されません。
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;
}
アドバイス/説明をいただければ幸いです。
更新:
管理者ユーザーが一部の Web サイトに対してのみ権限を持っている場合、マルチ Web サイト環境で私のコードが SQL エラーを引き起こすことも判明しました。
"SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'store_id' in where clause is ambiguous"