2

製品が Magento 1.9.0.1 で新しいかどうかを確認するにはどうすればよいですか?

私は試した:

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

しかし、うまくいきません。どうしたの?

4

5 に答える 5

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/

于 2015-09-20T18:41:29.963 に答える
2

簡単に言いたいのは、eis new depends on attribute による製品であり、news_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
    }
于 2014-09-20T19:34:44.483 に答える
2
<?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. from date が設定されておらず、現在時刻 <= to_date が true --> $new が true
  3. from_date <= 現在の時刻で、to_date が設定されていない場合は true --> $new は true
于 2016-11-16T03:43:56.567 に答える
1

残念ながら、これをそれほど単純にすることはできません。商品が新品かどうかを確認する方法はありません。

新製品用に定義されたブロック クラスは でMage_Catalog_Block_Product_New定義されていapp\code\core\Mage\Catalog\Block\Product\New.phpます。そこを見ればわかると思いますが、あなたの使い方に役立つ良い方法はありません。

そこで定義されている主な方法は、新製品の収集方法です。そのメソッド、つまり on_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
    }
?>

詳細については、このスレッドを使用できます

于 2014-09-20T07:06:51.913 に答える