2

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

在此处输入图像描述

我破解了核心文件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()在核心文件中覆盖,但我真的很想知道如何更改该日期!顺便说一句,我 grepped 了整个安装,并且没有显示该日期格式字符串的任何部分。


更新:发现日期字符串格式已设置,lib/Zend/Locale/Data/root.xml如果您的语言环境不是 en_us(其文件为空),则可能会被覆盖。为了阐述 RS 答案的第一部分,日期“格式”不是 phpdate()样式,我尝试过并得到了非常奇怪的结果。仔细阅读 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
    ));

致力于制作自定义模块以覆盖块渲染器。如图所示,RS 代码的第 2 部分不起作用,但他的链接给了我一个秘诀。将再次更新结果。


更新: 我尝试(但失败)覆盖 Adminhtml 块销售订单网格(absog)。另一个模块 EM_DeleteOrder 已经被覆盖了absog。我搜索了一个没有覆盖的替换模块,并absog找到了一个在销售网格方面具有强大功能的扩展:MageWorx 增强订单。所以我安装了它,并破解了我想要的日期格式的源代码!我很高兴并且完成了,不再更新这个问题。

4

1 回答 1

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;

   } 
}

于 2013-02-16T17:19:31.250 回答