在Admin Grid中添加一个过滤列
-
22-10-2019 - |
题
我添加了一列 review_detail
表IE 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')
),
));
其他提示
去除
致命错误:在C: XAMPP htdocs efk efk app code code mage mage mage eav eav entity entity abstract.php上,在第8166666666年,请致电c: xampp efk efk app code code code code code code code code code code code code code code code code code.php在第816行816
添加
'filter_index' => 'rdt.view_type' // (your newly added column)
在 addColumn