Magento - Adminhtml尝试通过自定义列搜索产品网格

时间:2016-07-25 08:16:24

标签: magento adminhtml

我正在使用Magento 1.9.2,我正在重写产品网格表。

我从原始的Grid.php中完成了一个副本并创建了这个:

/app/code/local/Mage/Adminhtml/Block/Catalog/Product/Grid.php以及它包含的内容:

    $this->addColumn('number',
        array(
            'header'=> Mage::helper('catalog')->__('Поръчка №'),
            'width' => '50px',
            'index' => 'entity_id',
            'renderer'  => 'Mage_Adminhtml_Block_Catalog_Product_Renderer',
    ));

我在Grid.php中添加的自定义代码是:

<?PHP
class Mage_Adminhtml_Block_Catalog_Product_Renderer extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
{
      public function render(Varien_Object $row)
      {

        $productId = $row->getData($this->getColumn()->getIndex());
            $orders = array();
            $collection = Mage::getResourceModel('sales/order_item_collection')
                ->addAttributeToFilter('product_id', array('eq' => $productId))
                ->load();
            foreach($collection as $orderItem) {
                $orders[$orderItem->getOrder()->getIncrementId()] = $orderItem->getOrder();
            }

            $first_key = key($orders);  
            return $first_key;


      }
}

我也创造并渲染,我在另一个答案中看到了这一点:

\)?

我已添加了附加列,因此我可以在购买产品的订单ID的每一行中显示。我没有问题。一切都是正确的,但是当我尝试使用这个自定义列进行搜索时会出现问题。

订单ID在列中正确显示,但无法按订单ID搜索。

我的错误在哪里,为什么它不起作用,我该如何解决?

提前致谢!

2 个答案:

答案 0 :(得分:1)

您无法在网格中搜索custom_column,因为您刚刚使用了渲染器,它在运行时返回order_id并准备列。就是这样。什么是magento网格搜索,它使用&#34;搜索文本&#34;过滤加载的集合。

例如: - 您搜索order_id = 10000901,搜索结果返回null,因为集合中不存在order_id。

所以你应该加入sales_flat_order&amp; sales_flat_order_item与您的产品表一起,以便在集合中获得increment_id。然后排序&amp;搜索两者将完美地工作。

答案 1 :(得分:1)

请添加此代码

$collection->getSelect()->joinLeft( 
        array('order_item'=>'sales_flat_order_item'),
        'e.entity_id = order_item.product_id', 
        array('order_item.product_id','order_item.order_id')
        );
$collection->getSelect()->joinLeft( 
        array('order'=>'sales_flat_order'),
        'order_item.order_id = `order`.entity_id', 
        array('order.increment_id')
        );
$collection->getSelect()->group('e.entity_id');
$this->setCollection($collection);

的方法_prepareCollection()中的/app/code/local/Mage/Adminhtml/Block/Catalog/Product/Grid.php之前

更新列代码如下

$this->addColumn('increment_id',
    array(
        'header'=> Mage::helper('catalog')->__('Order Id'),
        'width' => '100px',
        'type'  => 'number',
        'index' => 'increment_id',
));