我正在使用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搜索。
我的错误在哪里,为什么它不起作用,我该如何解决?
提前致谢!
答案 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',
));