ОБНОВЛЕНО: Magento добавляет фильтр атрибутов клиента в сетку заказов
Я продлил 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;
}
Любой совет / объяснение будет высоко ценится.
ОБНОВЛЕНИЕ: Оказывается, мой код также вызывает ошибку SQL в среде с несколькими веб-сайтами, когда пользователь с правами администратора имеет разрешения только для некоторых веб-сайтов:"SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'store_id' in where clause is ambiguous"
1 ответ
У @clockworkgeek был ответ на первую часть моего вопроса.
Проблема заключалась в том, что мой joinLeft()
извлекал текстовые значения из параметров атрибута, в то время как я должен был получать целочисленные значения при использовании 'type => 'options'
,
Однажды я сменил joinLeft()
получать только целочисленные значения из customer_entity_int
(на самом деле более простое соединение), фильтрация и отображение работали безупречно - спасибо, сэр.
Я повторно опубликую свою вторую проблему (об ошибках SQL, вызванных разрешениями) как отдельный вопрос.