无法使用自定义渲染器过滤或搜索网格中的产品

时间:2015-01-10 18:29:30

标签: magento grid admin renderer

  

我的管理网格模块中的过滤器有问题。   我还使用了' order_item_id '我的自定义表格中的字段,并根据' (sales / order_item)'提取产品名称使用渲染器。   我也用#34;的' filter_condition_callback' =>数组($ this,' _productFilter')"但它不能#39;工作   我的问题是:无法过滤自定义渲染器不起作用的列。   当我在列中搜索产品名称时,它返回零记录。   我的代码中错了什么?

public function _prepareColumns()
{
   $this->addColumn('entity_id', array(
      'header'    => Mage::helper('adminhtml')->__('ID'),
      'align'     =>'right',
      'width'     => '50px',
      'index'     => 'entity_id',
    ));         

    $this->addColumn('order_item_id', array(
      'header'    => Mage::helper('adminhtml')->__('Product Name'),
      'align'     =>'right',
      'index'     => 'order_item_id',
      'renderer' => 'Test_Module1_Block_Adminhtml_Renderer_Product',
      'filter_condition_callback' => array($this, '_productFilter'),
    ));
    return parent::_prepareColumns();
}
protected function _productFilter($collection, $column)
{
    if (!$value = $column->getFilter()->getValue()) {
        return $this;
    }

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


    return $this;
}
  

我的渲染器是

 class Test_Module1_Block_Adminhtml_Renderer_Product extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
{
    public function render(Varien_Object $row)
    {
        $order = Mage::getModel('sales/order_item')->load($row->getData('order_item_id'));

        return $order->getName();
    }
}

2 个答案:

答案 0 :(得分:1)

这是因为您已经呈现了ID,并且您正在使用产品名称进行搜索。因此,您需要更改productfilter函数,并根据产品名称将代码用于搜索表中的id。 你需要改变你的功能:

protected function _productFilter($collection, $column)
{
  if (!$value = $column->getFilter()->getValue()) {
    return $this;
}
 $orderitem = Mage::getModel('sales/order_item')->getCollection();
 $orderitem->addFieldToFilter('name',array('like'=>'%'.$value.'%'));  
   $ids =array();
  foreach($orderitem as $item){
      $ids[] = $item->getId();
 }

$this->getCollection()->addFieldToFilter("id",array("in",$ids));
return $this;
}

答案 1 :(得分:0)

我对saumik代码及其工作做了一些改变。

protected function _productFilter($collection, $column)
    {
        if (!$value = $column->getFilter()->getValue()) {
            return $this;
        }
        $orderitem = Mage::getModel('sales/order_item')->getCollection();
        $orderitem->addFieldToFilter('name',array('like'=>'%'.$value.'%'));  
        $ids =array();
        foreach($orderitem as $item){
          $ids[] = $item->getOrderId(); //  sales_flat_order_item.order_id = sales_flat_order.entity_id
        }
        $this->getCollection()->addFieldToFilter("entity_id",array("in",$ids));
        return $this;
    }