通过快速搜索,我发现的唯一参考是在Magento论坛上的,这表明您必须编写一些自定义代码来检查产品是否是新产品。
我本来以为会有一个简单的isNew()
方法,Mage_Catalog_Model_Product
其中考虑了“ 特色”下拉列表以及“ 将产品设置为新的起始日期”和“ 将产品设置为新的截止日期”字段-但事实并非如此?
是否需要自定义编解码器?
isObjectNew()
但我明白你的意思。
通过快速搜索,我发现的唯一参考是在Magento论坛上的,这表明您必须编写一些自定义代码来检查产品是否是新产品。
我本来以为会有一个简单的isNew()
方法,Mage_Catalog_Model_Product
其中考虑了“ 特色”下拉列表以及“ 将产品设置为新的起始日期”和“ 将产品设置为新的截止日期”字段-但事实并非如此?
是否需要自定义编解码器?
isObjectNew()
但我明白你的意思。
Answers:
您绝对不能手动转换和验证日期,因为这可能会引起时区问题。Magento isStoreDateInInterval()
在Mage_Core_Model_Locale
类中具有内置方法。因此,您应该创建看起来像这样的辅助方法
function isProductNew(Mage_Catalog_Model_Product $product)
{
$newsFromDate = $product->getNewsFromDate();
$newsToDate = $product->getNewsToDate();
if (!$newsFromDate && !$newsToDate) {
return false;
}
return Mage::app()->getLocale()
->isStoreDateInInterval($product->getStoreId(), $newsFromDate, $newsToDate);
}
您可以在这里找到更多详细信息http://quicktips.ru/all/check-product-is-new/
没有单一方法调用。至少我不知道。
不过,您始终可以使用以下方式:
<?php if (date("Y-m-d") >= substr($_product->getNewsFromDate(), 0, 10) && date("Y-m-d") <= substr($_product->getNewsToDate(), 0, 10)) : ?>
...
<?php endif ?>
抱歉,我不太擅长PHP日期比较。
顺便问好问题。
作为参考,这是我想出新方法来检查的辅助方法。它同时支持“特色”下拉列表和日期,并支持任一日期为空。
public function isNew($product)
{
if ($product->getData('featured_product')) {
return true;
}
if ($product->getData('news_from_date') == null && $product->getData('news_to_date') == null) {
return false;
}
if ($product->getData('news_from_date') !== null) {
if (date('Y-m-d', strtotime($product->getData('news_from_date'))) > date('Y-m-d', time())) {
return false;
}
}
if ($product->getData('news_to_date') !== null) {
if (date('Y-m-d', strtotime($product->getData('news_to_date'))) < date('Y-m-d', time())) {
return false;
}
}
return true;
}
更新:感谢@Rooooomine提到我建议的此手动日期转换是一个非常糟糕的主意,因为可能存在区域设置问题。请Mage::app()->getLocale()->isStoreDateInInterval($product->getStoreId(), $newsFromDate, $newsToDate)
改签。
快速解决方案
<?php
foreach ($_productCollection as $_product):
$date = date("Y-m-d 00:00:00");
$newtodate = $_product['news_to_date'];
$newfromdate = $_product['news_from_date'];
if (isset($newfromdate) and isset($newtodate) and $date >= $newfromdate and $date <= $newtodate)
{
echo "Product is new";
}?>
<?php endforeach ?>
您可以尝试以下代码
$current_date = new DateTime($date); // compare date
$from_date = new DateTime($this->getData('news_from_date')); // begin date
$to_date = new DateTime($this->getData('news_to_date')); // end date
$new = ($current_date >= $from_date && $current_date <= $to_date);
$this
对象是哪里,Mage_Catalog_Model_Product
如果尚未加载产品,则需要加载该产品。