Я расширил класс Mage_Adminhtml_Block_Sales_Order_Grid
с помощью пользовательского модуля для добавления нескольких атрибутов клиента (Magento EE 1.10) в сетку.
Два из добавленных мною атрибутов являются текстовыми полями (то есть они живут в таблице customer_entity_varchar
, и я смог добавить их в коллекцию и отобразить их в сетке. Пока все хорошо.
Третий атрибут - это выбор, поэтому значения хранятся в таблицах 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;
}
Любой совет / объяснение будет высоко ценится.
UPDATE:
Оказывается, мой код также вызывает ошибку SQL в среде с несколькими веб-сайтами, когда пользователь с правами администратора имеет разрешения только для некоторых веб-сайтов:
"SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'store_id' in where clause is ambiguous"