Как проверить, является ли продукт новым в Magento 1.9.0.1?
Я старался:
<?php if($_product->getNewProduct()) { ?>
...my HTML code...
<?php } ?>
но это не сработает. Что с этим не так?
Просто хочу сказать, что продукт is new depends on attribute
от news_from_dat
е и news_to_date
$todayStartOfDayDate = Mage::app()->getLocale()->date()
->setTime('00:00:00')
->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);
$todayEndOfDayDate = Mage::app()->getLocale()->date()
->setTime('23:59:59')
->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);$collection = Mage::getResourceModel('catalog/product_collection');
$collection
->addAttributeToFilter('news_from_date', array('or'=> array(
0 => array('date' => true, 'to' => $todayEndOfDayDate),
1 => array('is' => new Zend_Db_Expr('null')))
), 'left')
->addAttributeToFilter('news_to_date', array('or'=> array(
0 => array('date' => true, 'from' => $todayStartOfDayDate),
1 => array('is' => new Zend_Db_Expr('null')))
), 'left')
->addAttributeToFilter(
array(
array('attribute' => 'news_from_date', 'is'=>new Zend_Db_Expr('not null')),
array('attribute' => 'news_to_date', 'is'=>new Zend_Db_Expr('not null'))
)
)
->addAttributeToFilter('entity_id',$_product->getId())
->addAttributeToSort('news_from_date', 'desc')
->setPageSize(1)
->setCurPage(1);
if($count($collection)>0){
//new products
}
<?php
$current_date=M age::getModel( 'core/date')->date('Y-m-d');
$from_date = substr($_product->getNewsFromDate(), 0, 10);
$to_date = substr($_product->getNewsToDate(), 0, 10);
$new = ($current_date >= $from_date && $current_date <=$ to_date) ||
($from_date=='' && $current_date <=$ to_date && $to_date !='' ) ||
($from_date !='' && $current_date>= $from_date && $to_date == '') ;
//echo $new; ?>
<?php if($new==1 ) { ?>
<label for="">
<?php echo $this->__('New') ?></label>
<?php } ?>
Код выше имеет 3 случая:
Вы абсолютно НЕ должны конвертировать и проверять даты вручную, потому что это может вызвать проблемы с часовым поясом. Magento имеет встроенный метод isStoreDateInInterval()
в Mage_Core_Model_Locale
учебный класс. Таким образом, вы должны создать вспомогательный метод, который может выглядеть следующим образом
function isProductNew(Mage_Catalog_Model_Product $product)
{
$newsFromDate = $product->getNewsFromDate();
$newsToDate = $product->getNewsToDate();
if (!$newsFromDate && !$newToDate) {
return false;
}
return Mage::app()->getLocale()
->isStoreDateInInterval($product->getStoreId(), $newsFromDate, $newsToDate);
}
Более подробную информацию вы можете найти здесь http://quicktips.ru/all/check-product-is-new/
К сожалению, вы не можете сделать это так просто. Не существует метода для проверки, является ли продукт новым.
Класс блока, который определен для нового продукта: Mage_Catalog_Block_Product_New
и определяется в app\code\core\Mage\Catalog\Block\Product\New.php
, Если вы посмотрите туда, то поймете, что не существует хорошего метода, который будет полезен для вашего использования.
Основным методом, который здесь определен, является новый метод сбора продуктов. Если вы посмотрите на этот метод, то есть на _getProductCollection()
Вы можете видеть, что он использует дату начала и даты окончания (то есть мы устанавливаем для каждого продукта), чтобы сделать коллекцию. Таким образом, наилучший способ, которым вы можете достичь, — это проверить дату начала и дату окончания продукта, и она находится в пределах нашей желаемой даты, а затем выполнить коды внутри вашего if
заявление. Будет кое-что похожее на это.
<?php
if (date("Y-m-d") >= substr($_product->getNewsFromDate(), 0, 10)
&& date("Y-m-d") <= substr($_product->getNewsToDate(), 0, 10)) {
//your code comes here
}
?>
Для получения дополнительной информации, вы можете использовать это нить
Я решил таким образом:
<?php
$current_date = Mage::getModel('core/date')->date('Y-m-d');
$from_date = substr($_product->getNewsFromDate(), 0, 10);
$to_date = substr($_product->getNewsToDate(), 0, 10);
$new = ($current_date >= $from_date && $current_date <= $to_date) || ($from_date == '' && $current_date <= $to_date && $to_date != '') || ($from_date != '' && $current_date >= $from_date && $to_date == '') ;
?>
<?php if($new == 1) { ?>
<img src="...
<?php } ?>