我的版本是 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/