製品が Magento 1.9.0.1 で新しいかどうかを確認するにはどうすればよいですか?
私は試した:
<?php if($_product->getNewProduct()) { ?>
...my HTML code...
<?php } ?>
しかし、うまくいきません。どうしたの?
製品が Magento 1.9.0.1 で新しいかどうかを確認するにはどうすればよいですか?
私は試した:
<?php if($_product->getNewProduct()) { ?>
...my HTML code...
<?php } ?>
しかし、うまくいきません。どうしたの?
タイムゾーンの問題が発生する可能性があるため、日付を手動で変換および検証しないでください。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);
}
簡単に言いたいのは、eis 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 つのケースがあります。
残念ながら、これをそれほど単純にすることはできません。商品が新品かどうかを確認する方法はありません。
新製品用に定義されたブロック クラスは で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
}
?>
詳細については、このスレッドを使用できます