製品が新しいかどうかを確認する方法


15

クイック検索から、私が見つけた唯一の参照は、製品が新しいかどうかを確認するためにカスタムコードを記述する必要があることを示唆しているMagentoフォーラムにありました。

注目のドロップダウンとSet Product As New FromフィールドおよびSet Product As New To Dateフィールドを考慮に入れる簡単なisNew()方法があると思っていましたが、そうではないようですか?Mage_Catalog_Model_Product

カスタムcodezは必要ですか?


これは、DB(自動インクリメントほとんどの時間、それが保存されていない、まだ、それはまだエンティティIDを持っていないIE)に新しい場合isNewは()のみチェックしている
Foomanでクリストフ

@Foomanそれはそうだと思いますisObjectNew()が、私はあなたが言っていることを理解しています。
kalenjordan

このリンクを確認してください。方法を示しています。universalcoder.wordpress.com/2014/04/14/...
デクスター

回答:


13

タイムゾーンの問題が発生する可能性があるため、日付を手動で変換および検証しないでください。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/


良い電話をしてください-それに感謝します。私は答えをすぐに更新しました。
カレンヨルダン

6

単一のメソッド呼び出しはありません。少なくとも私はそれを知りません。

それにもかかわらず、いつでも次のようなものを使用できます。

<?php if (date("Y-m-d") >= substr($_product->getNewsFromDate(), 0, 10) && date("Y-m-d") <= substr($_product->getNewsToDate(), 0, 10)) : ?>
...
<?php endif ?>

申し訳ありませんが、PHPの日付の比較が苦手です。

いい質問ですね。


getNewsToDateも定義されていない製品を表示するように関数を調整しました。php if((date( "Ymd")> = substr($ _ product-> getNewsFromDate()、0、10)&& $ _product-> getNewsFromDate()!= "")&&(date( "Ymd")< = substr($ _ product-> getNewsToDate()、0、10)|| $ _product-> getNewsToDate()== "")):?> ... <?php endif?>
Eduardo

5

参考までに、新しさを確認するために私が思いついたヘルパーメソッドを次に示します。注目ドロップダウンと日付の両方をサポートし、いずれかの日付が空であることもサポートします。

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)代わりにチェックアウトしてください。


3

誰かにとって役立つかもしれない精度。これらの答えはすべて属性「news_from_date」を使用していますが、データベースで製品の実際の作成日を取得したい場合は、次のメソッドを使用して「created_at」属性を取得する必要があります。

$product->getCreatedAt()

私が取り組んでいるプロジェクトでは、「created_at」とは異なる「news_from_date」の値を持つ製品があります。実際、ビジネスルールによれば、製品は長期間在庫切れになり、カタログに戻ったときに新しい製品として戻ってくる可能性があります。


0

クイックソリューション

    <?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 ?>

1
ありがとうチラグ。このコード例について少し気になっているのは、インデントだけです!:)
kalenjordan 14年

0

以下のコードを試すことができます

 $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あり、まだロードされていない場合は製品をロードする必要があります。


1
Anshuに感謝します-これは日付からまたは日付への空をサポートしないかもしれませんが。
kalenjordan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.