根据多个ID筛选订单网格
我们都知道Magento的网格很棒,是有效显示数据的不二选择。
我们的客户在选择Magento后有时(基本是经常)会有些特殊的需求。其中有人提出通过订单ID来过滤订单网格。
当你有大批订单要跟踪的时候就显得很有用了。一个一个筛选是个繁琐而又耗时的任务。
我要告诉你的诀窍可以处理几乎所有的网格,只要你知道它是如何做的。
首先,重写你的订单网格块(app\code\core\Mage\Adminhtml\Block\Sales\Order\Grid.php)——我想你知道怎么做。
在你的 _prepareColumns() 方法里,向数组里添加一个元素,如下:
protected function _prepareColumns()
{
$this->addColumn('real_order_id', array(
'header'=> Mage::helper('sales')->__('Order #'),
'width' => '250px',
'type' => 'text',
'index' => 'increment_id',
'filter_condition_callback' => array($this, 'spaceSeparatedFilter')//calling spaceSeparatedFilter method
));
....
}
在我们网格中一行被渲染时,渲染器被调用。通过cell被渲染成一个字段。过滤器回调,另一方面,调用整个列和集合作为字段。结果是,我们可以创建自己的方法,调用变量filter_condition_callback元素,向数据库执行自定义查询语句,获取我们网格中的输入框等等……
这正是我们要做的……
我们的过滤器回调将调用spaceSeparatedFilter()方法并把real_order_id列作为一个参数。让我们声明我们的方法(在Grid.php文件中):
protected function spaceSeparatedFilter($collection, $column)
{
if (!$value = $column->getFilter()->getValue()) {
return $this;
}
//if there was a space input
else if(preg_match('/\s+/', $value))
{
//explode by space, getting array of IDs
$val = explode(" ", $value);
//filter the collection, where collection index (order_id) is present in $val array
$this->getCollection()->addAttributeToFilter($column->getData('index'), array('in'=>$val));
}
else
{
//else use default grid filter functionality (like $value input)
$this->getCollection()->addAttributeToFilter($column->getData('index'), array('like' => '%'.$value.'%'));
}
return $this;
}
这两段代码可以让你通过多个订单ID来过滤订单,只要你用空间将他们分开。如果你没有进入一个空间,那么会按默认的工作。
你也可以使用网格的所有功能:排序,筛选,导出。没有任何问题。
电商网站开发服务。
版权声明:本站内容源自互联网,如有内容侵犯了你的权益,请联系删除相关内容。