gpt4 book ai didi

php - 高级搜索中的 Magento 日期格式

转载 作者:搜寻专家 更新时间:2023-10-31 21:10:01 26 4
gpt4 key购买 nike

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

我对 magento 前端的日期格式有疑问,尤其是在高级搜索中。我添加了输入类型为“日期”的自定义属性“event_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 日期格式运行。最后一个问题是:在代码中为高级搜索构建数据库查询的位置以及如何切换到另一种日期格式?似乎 en_US 日期格式是硬编码的。

最佳答案

我在日期过滤器方面遇到过类似的问题:)

以这种形式实例化日期时间的方式

第一步:-

在 block 形式类 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

$block = $this->getLayout()->createBlock('core/html_date');
$this->setData('_select_block', $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'])) {
.......
}

现在您需要使用新的日期时间格式修改这两行,您更改搜索 block 以允许验证此方法

例如,我将 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

第三步:-

将类 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com