Добавить колонку фильтрации в сетку администратора
-
22-10-2019 - |
Вопрос
Я добавил столбец в review_detail
Таблица т.е. view_type
через PhpMyAdmin
и назначил значение по умолчанию 0
ко всем обзорам.
Я пытаюсь добавить тот же столб для фильтрация в All reviews
сетка, которую можно посетить из Catalog -> Reviews and Ratings -> Customer Reviews -> All Reviews
.
Для простого тестирования я изменяю core/Mage
файлы в Mage/Adminhtml/Block/Review/Grid.php
--- line ~ 130
:
$this->addColumn('view_type', array(
'header' => Mage::helper('review')->__('View type'),
'align' => 'left',
'width' => '100px',
'filter_index' => 'rdt.view_type',
'index' => 'view_type',
'type' => 'text',
'truncate' => 50,
'escape' => true,
));
Добавив приведенный выше код, я вижу свое недавно добавленное имя столбца фильтрации в All reviews
Сетка панели администратора, но я не могу отфильтровать или увидеть присвоенные значения по умолчанию для любого просмотра.
Решение
Значение вашего столбца не соединяется автоматически к коллекции, перечисленной в сетке.
Коллекция, перечисленная в сетке, является экземпляром Mage_Review_Model_Resource_Review_Product_Collection
.
Вам нужно изменить метод _joinFields
в этом классе. (Для целей тестирования, конечно. Когда вы уверены, что это работает, сделайте это правильным путем, переписывая класс.).
По умолчанию поля соединены таким образом:
$this->getSelect()
->join(array('rt' => $reviewTable),
'rt.entity_pk_value = e.entity_id',
array('rt.review_id', 'review_created_at'=> 'rt.created_at', 'rt.entity_pk_value', 'rt.status_id'))
->join(array('rdt' => $reviewDetailTable),
'rdt.review_id = rt.review_id',
array('rdt.title','rdt.nickname', 'rdt.detail', 'rdt.customer_id', 'rdt.store_id'));
Если вы добавили свой столбец в review_detail
Таблица, которую вам нужно добавить во второй join
. Анкет Сделайте код выше, выглядящим следующим образом:
$this->getSelect()
->join(array('rt' => $reviewTable),
'rt.entity_pk_value = e.entity_id',
array('rt.review_id', 'review_created_at'=> 'rt.created_at', 'rt.entity_pk_value', 'rt.status_id'))
->join(array('rdt' => $reviewDetailTable),
'rdt.review_id = rt.review_id',
array('rdt.title','rdt.nickname', 'rdt.detail', 'rdt.customer_id', 'rdt.store_id', 'rdt.view_type'));
Приведенный выше код позволит вам увидеть значения в вашем пользовательском столбце.
Чтобы сделать сортировку на работу, вам нужно изменить метод setOrder
в том же классе Mage_Review_Model_Resource_Review_Product_Collection
.
Измените это:
case 'rt.review_id':
case 'rt.created_at':
case 'rt.status_id':
case 'rdt.title':
case 'rdt.nickname':
case 'rdt.detail':
$this->getSelect()->order($attribute . ' ' . $dir);
break;
к этому:
case 'rt.review_id':
case 'rt.created_at':
case 'rt.status_id':
case 'rdt.title':
case 'rdt.nickname':
case 'rdt.detail':
case 'rdt.view_type': //you need to add this 'case'
$this->getSelect()->order($attribute . ' ' . $dir);
break;
Для фильтрации модифицируется addAttributeToFilter
в том же классе. Изменить это
case 'rt.review_id':
case 'rt.created_at':
case 'rt.status_id':
case 'rdt.title':
case 'rdt.nickname':
case 'rdt.detail':
$conditionSql = $this->_getConditionSql($attribute, $condition);
$this->getSelect()->where($conditionSql);
break;
К этому:
case 'rt.review_id':
case 'rt.created_at':
case 'rt.status_id':
case 'rdt.title':
case 'rdt.nickname':
case 'rdt.detail':
case 'rdt.view_type': //you need to add this 'case'
$conditionSql = $this->_getConditionSql($attribute, $condition);
$this->getSelect()->where($conditionSql);
break;
Черт ... много работы для простой колонки. Я надеюсь, что это будет повторно фактическое в 2.0.
РЕДАКТИРОВАТЬ
Чтобы добавить свой новый столбец в качестве столбца параметров, объявляйте это так:
$this->addColumn('view_type', array(
'header' => Mage::helper('review')->__('View type'),
'align' => 'left',
'width' => '100px',
'filter_index' => 'rdt.view_type',
'index' => 'view_type',
'type' => 'options',
'options' => array(
0 => Mage::helper('review')->__('Show in home page'),
1 => Mage::helper('review')->__('Show in product details page')
),
));
Другие советы
Удалять
Фатальная ошибка: вызовите функцию члена getbackend () на некомъекте в C: xampp htdocs efk app code core mage eav model entity abst ract.php в строке 816
Добавлять
'filter_index' => 'rdt.view_type' // (your newly added column)
в addColumn