2013-01-09 38 views
4

时间戳列的日期部分滤波器我有在网格下列柱:Magento的1.7 - 在电网

 $this->addColumn('order_date', 
     array(
      'header'=> $this->__('Date'), 
      'align' =>'left', 
      'width' => '100px', 
      'index' => 'order_date', 
      'type' => 'date', 
      'filter_index' => 'orders_alias.created_at' 
     ) 
    ); 

实施例的数据看起来像这样:http://imageshack.us/photo/my-images/502/scr028.jpg/

当日期13 Oct 2012没有行滤波被发现。这是有道理的,因为它是一个时间戳列。 http://imageshack.us/photo/my-images/29/scr029.jpg/

如何使用Magento日期从/到选择器并选择13/10/2012并显示所有行与此日期的行 而不考虑时间部分?

+0

看看app/code/core/Mage/Adminhtml/Block/Widget/Grid/Column/Filter/Date.php,它可以给你一些线索 – ivantedja

+0

我会看看那个。 – Guus

+0

外部链接不再工作-.- – Phil

回答

9

这是一个仅在您试图将值显示为日期和数据库列时显示的错误是datetime或timestamp。

发生这种情况的原因是日期从00到00:00变为YYYY-MM-DD HH:MM:SS和HH:MM:SS。日期应该设置为23:59:59。

这样做的一种方法是更改​​app/code/core/Mage/Adminhtml/Block/Widget/Grid/Column/Filter/Date.php中的代码以支持此操作。在setValue函数只是改变

编辑:第一个解决方案将需要更改Datetime.php getValue肯定会是首选的。

$value['to'] = $this->_convertDate($value['to'], $value['locale']); 

$value['to'] = $this->_convertDate($value['to'], $value['locale'])->addDay(1)->subSecond(1); 

因为这改变了所有的过滤器更好的解决办法是改变你的本地代码的功能:

$this->addColumn('order_date', 
    array(
     'header'=> $this->__('Date'), 
     'align' =>'left', 
     'width' => '100px', 
     'index' => 'order_date', 
     'type' => 'datetime', 
     'filter_index' => 'orders_alias.created_at', 
     'frame_callback' => array($this,'styleDate') 
    ) 
// ... 

public function styleDate($value,$row,$column,$isExport) 
{ 
    $locale = Mage::app()->getLocale(); 
    $date = $locale->date($value, $locale->getDateFormat(), $locale->getLocaleCode(), false)->toString($locale->getDateFormat()) ; 
    return $date; 
} 

这将被显示删除部分时间在网格的字段中,但会让您按照上述方式使用过滤器。

+0

第二种解决方案的工作原理!首先,我忘记将类型从'date'更改为'datetime'。现在过滤工作,谢谢! – Guus

+0

谢谢。第二个答案正常工作。 – KNKM