Magento日期文本:它来自何处以及如何更改?

时间:2013-02-16 01:03:42

标签: magento

凭借我从最近的Magento升级和随后的修复中学到的知识,请帮助我解决我最大的UI抱怨之一:日期。这是愚蠢的:

enter image description here

我攻击核心文件app/code/core/Mage/Adminhtml/Block/Sales/Order/Grid.php并将'100px'更改为'165px',这会阻止日期换行。我真的很想将日期从'M n,Y g:i:s A'更改为Gmail使用'g:i:s a'如果今天或'M n,ga',如果不是今天。如果要显示的日期年份不是当年,我会在年份中添加。

我看到Overriding Magento Admin Controller, for Beginners,这可能足以让我覆盖核心文件中的_prepareColumns(),但我真的想知道如何更改该日期!顺便说一句,我对整个安装进行了深思熟虑,并没有显示该日期格式字符串的任何部分。


更新:发现日期字符串格式在lib/Zend/Locale/Data/root.xml中设置,如果您的语言环境不是en_us,其文件为空,则可能会被覆盖。为了阐述R.S答案的第一部分,日期“格式”不是php date()样式,我试过并得到了相当奇怪的结果。仔细阅读Locale XML文件,我做了一些实验,其中包括:

    $this->addColumn('created_at', array(
        'header' => Mage::helper('sales')->__('Purchased On'),
        'index' => 'created_at',
        'type' => 'datetime',
        'format' => 'MMM d, h:mm a',  // Feb 18, 1:57 PM
        //'format' => Mage::app()->getLocale()->getDateTimeFormat(Mage_Core_Model_Locale::FORMAT_TYPE_MEDIUM), 
        //'format' => 'MMM d, y G',
        'width' => '165px', // CKCK: edited to fix date field width was 100px
    ));

制作自定义模块以覆盖块渲染器。如图所示,R.S代码的第2部分不起作用,但是他的链接给了我一个配方。将再次更新结果。


更新 我尝试(and failed)覆盖Adminhtml块销售订单网格(absog)。另一个模块EM_DeleteOrder已经覆盖了absog。我搜索了一个未覆盖absog的替换模块,并找到了一个与销售网格相关的强大扩展程序:MageWorx Enhanced Orders。所以我安装了它,并且正在攻击我想要的日期格式的源代码!我很开心,也没有更新这个问题。

1 个答案:

答案 0 :(得分:2)

尝试

$this->addColumn('created_at', array(
     'header' => Mage::helper('sales')->__('Purchased On'),
     'index' => 'created_at',
     'type' => 'datetime', 
     'format'    => 'MMM d, h:mm a',
     'width' => '165px',
));

您也可以使用renderer

$this->addColumn('created_at', array(
     'header' => Mage::helper('sales')->__('Purchased On'),
     'index' => 'created_at',
      //'type' => 'datetime', //remove
      'renderer' = new MageIgniter_FormatDate_Block_Adminhtml_Renderer_Data()
      'width' => '165px',
));

然后创建

class MageIgniter_FormatDate_Block_Adminhtml_Renderer_Data extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Action
{
  public function render(Varien_Object $row)
   {
     return $this->_getValue($row);
   }

   public function _getValue(Varien_Object $row)
   {
     $val = $row->getData($this->getColumn()->getIndex());  // row value
     // need to format $val

     return $val;

   } 
}