我的版本是 1.8.1.0(社区版)。

我对 magento 前端的日期格式有问题,尤其是在高级搜索中。
我添加了一个自定义属性“event_date”,输入类型为“Date”。

Configuration->General 下,我将语言环境设置为“France”,在 Configuration->Catalog->Date & Time Custom Options 下,我将 日期字段订单 设置为日/月/年。

但是当我在高级搜索中使用日期选择器在前端选择一个日期时,它会以美国格式添加它。 (月日年)

真正奇怪的是:搜索仅适用于美国格式,但搜索验证器期望日期格式为 d/m/y。我发现日期格式是硬编码在“app/code/core/Mage/CatalogSearch/Block/Advanced/Form.php”中。如果我在这个文件中更改它,日历和验证器会以正确的格式工作,但我没有得到任何结果,因为搜索仍然需要美国格式。

那么强制 Magento 以指定日期格式工作的最佳方法是什么?

更新:

我还发现,如果我将浏览器首选语言设置为 en_US,则验证适用于美国(月/日/年)格式。因此 Magento 似乎检查客户端语言环境并为其设置日期验证,而不是日历或搜索本身的日期格式。

更新 2:

在我没有得到回复后,我发布了同样的问题,但在 https://magento.stackexchange.com/questions/16257/date-format-in-advanced-search 下有不同的描述。

请看看那里。最后,我可以解决 3 个问题中的 2 个问题,以便我的高级搜索现在以 en_US 日期格式运行。最后一个问题是:在代码中的何处为高级搜索构建了 db 查询,我该如何切换到另一种日期格式?似乎 en_US 日期格式是硬编码的。

最佳答案

我在日期过滤器上遇到了类似的问题:)
日期时间以这样的形式实例化的方式
步骤1:-
在 Block Form 类中 Mage_CatalogSearch_Block_Advanced_Form

public function getDateInput($attribute, $part = 'from')
{
    $name = $attribute->getAttributeCode() . '[' . $part . ']';
    $value = $this->getAttributeValue($attribute, $part);

    return $this->_getDateBlock()
        ->setName($name)
        ->setId($attribute->getAttributeCode() . ($part == 'from' ? '' : '_' . $part))
        ->setTitle($this->getAttributeLabel($attribute))
        ->setValue($value)
        ->setImage($this->getSkinUrl('images/calendar.gif'))
        ->setFormat('%m/%d/%y') //So you need change the Format here !!!!!
        ->setClass('input-text')
        ->getHtml();
}
因此,您需要在 ->setFormat('%m/%d/%y') 行中更改日历的日期格式
!在此处查看支持的日期时间格式 http://www.dynarch.com/jscal/#sec34
然后在下面的方法中使用它来生成块
$block = $this->getLayout()->createBlock('core/html_date');
$this->setData('_select_block', $block);
在那个块类中 Mage_Core_Block_Html_Date
Line 40: $displayFormat = Varien_Date::convertZendToStrFtime($this->getFormat(), true, (bool)$this->getTime());
.......
Line53: ifFormat    : "' . $displayFormat . '",

第2步:-
在高级搜索集合类 Mage_CatalogSearch_Model_Resource_Advanced_Collection您需要修改此方法以允许您需要的新语言环境或新数据时间格式!
Line43: public function addFieldsToFilter($fields) {
.......
.......
.......
.......
Line96: if (!Zend_Date::isDate($conditionValue['from'])) {
.......
Line109:if (!Zend_Date::isDate($conditionValue['to'])) {
.......
}
现在您需要使用新的日期时间格式修改这两行,您更改搜索块以允许验证此方法
例如,我将 Javascript 日历格式修改为 %d-%m-%Y ,它将在日历中生成日期,例如( 25-12-2014 )
然后我把上面集合类中的方法修改成这样
if (!Zend_Date::isDate($conditionValue['from'], 'd-m-Y' )) { // I added the format for the validation
.......
.......
if (!Zend_Date::isDate($conditionValue['to'], 'd-m-Y' )) { // same as above one

第 3 步:-
Mage_CatalogSearch_Model_Resource_Advanced_Collection 类中的日期输入值更改为任何格式或语言环境。
一切正常。
我制作了一个小模块,可以根据您需要的语言环境重写您需要修改的 2 个类
检查一下 https://github.com/Meabed/magento-advanced-search-datetime-field
问候 !

关于php - 高级搜索中的 Magento 日期格式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22130413/

10-12 12:32
查看更多