如何检查Magento中的产品是否是新产品?

How to check if a product is new in Magento?

提问人:KaMZaTa 提问时间:9/20/2014 更新时间:12/11/2018 访问量:4430

问:

如何检查Magento 1.9.0.1中的产品是否是新的?

我试过了:

    <?php if($_product->getNewProduct()) { ?>
          ...my HTML code...
    <?php } ?>

但它不起作用。这是怎么回事?

php magento magento-1.9.1

评论

0赞 Rajeev K Tomy 9/20/2014
你在哪里尝试过这个?

答:

1赞 Rajeev K Tomy 9/20/2014 #1

不幸的是,你不能这么简单。没有检查产品是否新的方法。

为新产品定义的块类是 和 中定义的。如果你看一下那里,那么你就会明白,没有好的方法对你有用。Mage_Catalog_Block_Product_Newapp\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
    }
?>

有关详细信息,可以使用此线程

1赞 KaMZaTa 9/21/2014 #2

我是这样解决的:

    <?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 } ?>
2赞 Amit Bera 9/21/2014 #3

简单地说,我想说 e 和is new depends on attributenews_from_datnews_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
    }
3赞 Denis Óbukhov 9/21/2015 #4

您绝对不能手动转换和验证日期,因为这可能会导致时区问题。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/

2赞 Nguyễn Hồng Quân 11/16/2016 #5
<?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 种情况:

  1. from_date <= 当前时间 <= to_date 为 true --> $new 为 true
  2. 未设置起始日期且当前时间 <= to_date 为 true --> $new为 true
  3. from_date <= 当前时间,未设置to_date为 true --> $new为 true

评论

0赞 Nguyễn Hồng Quân 11/26/2016
有三种情况:
0赞 Nguyễn Hồng Quân 11/26/2016
1. from_date <=当前时间<=to_date为真=> $new为真,2.未设置日期和当前时间 <= to_date 为 true => $new为 true, 3.from_date <= 当前时间,未设置to_date为 true => $new为 true
0赞 Nguyễn Hồng Quân 11/26/2016
哦,先解决了同样的问题,我只是复制到这个,我现在就删除这个。:)