2013-01-04 126 views
6

我在管理網格中的模塊中使用過濾器時出現問題。我的問題是: 篩選自定義渲染器不工作的列。用自定義渲染器在網格中過濾

public function _prepareColumns() 
    { 
     $this->addColumn('entity_id', array(
      'header' => 'ID', 
      'index' => 'entity_id', 
      'width' => '30px' 
     )); 
     $this->addColumn('author', array(
      'header' => 'Author', 
      'index' => 'author', 
      'renderer' => 'Test_Block_Adminhtml_Vj_Renderer_Author' 
     )); 

渲染器是

class Test_Block_Adminhtml_Vj_Renderer_Author extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract 
{ 
    public function render(Varien_Object $row) 
    { 
     $value = $row->getData($this->getColumn()->getIndex()); 
     $autor = Mage::getModel('test/test')->load($value); 
     return ($author->getName() . ' ' . $author->getSurname()); 
    } 
} 

作者在網格顯示精細例如「喬治·布什」,但如果我嘗試寫過濾(例如「卜」)過濾器歸零行。 : -/

任何想法? Thx。

回答

14

這篇文章可以幫助... http://www.atwix.com/magento/grid-filter-for-columns/

在您addColumn()調用自定義字段中,添加類似...

'filter_condition_callback' => array($this, '_myCustomFilter'),

然後添加過濾方法(改變「where()」根據需要)...

protected function _myCustomFilter($collection, $column) 
{ 
    if (!$value = $column->getFilter()->getValue()) { 
     return $this; 
    } 

    $this->getCollection()->getSelect()->where(
     "my_field like ?" 
    , "%$value%"); 


    return $this; 
} 
+0

我試圖使用屬性ID過濾屬性集合 它爲單值這樣工作 $這 - > getCollection() - > getSelect() - >其中( 「main_table.attribute_id =?」 ,173,226); 但我想篩選多個ID,當我試試這個。 $ this-> getCollection() - > getSelect() - >其中( 「main_table.attribute_id IN?」 ,array(173,226)); 它給了一個錯誤,您在您的SQL語法錯誤 –