根据多个ID筛选订单网格

redmaomail 2024-07-24 18:12 阅读数 66 #Magento

红帽云邮外贸主机

我们都知道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来过滤订单,只要你用空间将他们分开。如果你没有进入一个空间,那么会按默认的工作。

你也可以使用网格的所有功能:排序,筛选,导出。没有任何问题。

电商网站开发服务


红帽云邮外贸主机

分享到:
版权声明:本站内容源自互联网,如有内容侵犯了你的权益,请联系删除相关内容。
    红帽云邮外贸主机
热门
    红帽云邮外贸主机
    红帽云邮外贸主机