2013-01-04 29 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'),

फिर फ़िल्टर विधि जोड़ने (बदलते "जहां()" के रूप में की जरूरत है) ...

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

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


    return $this; 
} 
+0

मैं विशेषता आईडी का उपयोग कर फिल्टर करने के लिए विशेषता संग्रह कोशिश कर रहा हूँयह $ इस तरह के एकल मान के लिए काम कर रहा है-> getCollection() -> getSelect() -> जहां ( "main_table.attribute_id =?" , 173, 226); लेकिन मैं एकाधिक आईडी के लिए फ़िल्टर करना चाहता हूं और जब मैं इसे आज़माता हूं। $ यह-> getCollection() -> getSelect() -> जहां ( "main_table.attribute_id IN?" , सरणी (173, 226)); यह एक त्रुटि दे रहा है आपको अपने SQL वाक्यविन्यास में कोई त्रुटि है –