Добавьте столбец фильтрации в сетку администратора
Я добавил столбец в таблицу 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
панели администратора, но я не могу отфильтруйте или просмотрите значения, присвоенные по умолчанию любому обзору.
2 answers
Значение вашего столбца не присоединяется автоматически к коллекции, указанной в таблице.
Коллекция, указанная в таблице, является экземпляром Mage_Review_Model_Resource_Review_Product_Collection
.
Вам нужно изменить метод _joinFields
в этом классе. (Для целей тестирования, конечно. Когда вы будете уверены, что это работает, сделайте это правильным способом Magento, переписав класс.).
По умолчанию поля соединяются следующим образом:
$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\Abstract.php в строке 816
Добавить
'filter_index' => 'rdt.view_type' // (your newly added column)
В addColumn