【发布时间】:2015-09-24 23:55:55
【问题描述】:
我正在使用 magento 后端的自定义模块,在使用过滤器回调时,此过滤器不起作用! 任何人都可以建议我吗? 谢谢!
我试过这样的一些代码,
Grid.php
protected function _prepareCollection()
{
$collection = Mage::getModel('listings/listings')->getCollection();
$this->setCollection($collection);
return parent::_prepareCollection();
}
protected function _prepareColumns()
{
$this->addColumn("item_id", array(
"header" => Mage::helper("linkmanagement")->__("ID"),
"align" => "center",
"type" => "number",
"index" => "item_id",
));
$this->addColumn("title", array(
"header" => Mage::helper("linkmanagement")->__("Title"),
"index" => "title"
));
$this->addColumn("cat_ids", array(
"header" => Mage::helper("linkmanagement")->__("Cat ID"),
"align" => "center",
"index" => "cat_ids",
"renderer" => 'Sathish_Linkmanagement_Block_Adminhtml_Linkmanagement_Renderer_Categories',
'filter_condition_callback' => array($this, '_categoriesFilter')
));
$this->addColumn("url_key", array(
"header" => Mage::helper("linkmanagement")->__("URL"),
"index" => "url_key",
"width" => "200px",
));
$this->addColumn('status',
array(
'header' => Mage::helper('linkmanagement')->__('Status'),
'index' => 'status',
'type' => 'options',
'options' => array('1' => Mage::helper('linkmanagement')->__('Active'),
'0' => Mage::helper('linkmanagement')->__('Inactive')),
)
);
return parent::_prepareColumns();
}
回调函数
protected function _categoriesFilter($collection, $column)
{
if (!$value = $column->getFilter()->getValue()) {
return $this;
}
$this->getCollection()->getSelect()->where(
"cat_ids ?"
, "%$value%");
return $this;
}
Categories.php
class Sathish_Linkmanagement_Block_Adminhtml_Linkmanagement_Renderer_Categories extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
{
public function render(Varien_Object $row)
{
$value = $row->getData($this->getColumn()->getIndex());
// $value = 38,92
$value = explode(',',$value);
$collection = Mage::getModel("categories/categories")->getCollection()->addFieldToFilter('category_id',$value)->getData();
foreach($collection as $col){
$result[] = $col['title'];
}
$result = implode(',', $result);// $result = schools,colleges
return $result;
}
}
注意: 渲染器工作正常。, 只有过滤器回调函数不起作用!!!
【问题讨论】:
-
定义不工作。回调是否被调用过?回调代码对结果没有影响吗?
-
“不起作用”当我尝试过滤该列时它不会返回过滤器行
-
那么使用回调时生成的 SQL 是什么?如果,当您应用回调过滤器时,您没有得到任何结果,那么您的查询可能是错误的。鉴于您发布的信息,很难给出答案。
标签: magento filter grid adminhtml