商品に対してセールや新着商品などのタグを設定し、商品一覧の中で目立たせたいことがあります。
そのような場合はProduct.phpへタグを判断するメソッドを追加しておくと非常に便利です。
次のコードはタグID、タグ名、タグエンティティ(Tagクラスのインスタンス)のいずれかを引数として渡すと商品にタグが設定されているかどうかを判断するメソッドです。
/** * 商品にタグが設定されているかどうかをbooleanで返却するメソッド * @see https://umebius.com/eccube/check_if_product_has_tag/ * @param $Tag \Eccube\Entity\Master\Tag|integer|string * @return bool */ public function hasTag($Tag){ return false === $this->ProductTag->filter(function (ProductTag $T) use ($Tag){ if (is_int($Tag)) { if ($T->getTagId() === $Tag) { return true; } } else if (is_string($Tag)) { if ($T->getTag()->getName() === $Tag) { return true; } } else if ($Tag instanceof \Eccube\Entity\Master\Tag) { if ($T->getTag() === $Tag) { return true; } } return false; })->isEmpty(); }
4系では\Eccube\Entity\Master\Tagではなく\Eccube\Entity\Tagに変更してください。
このようにProduct.phpへメソッドを作っておくと、Productインスタンスからタグを簡単にチェックすることができます。
$Product->hasTag('セール商品') // タグ名でチェック $Product->hasTag(11) // IDでチェック $Product->hasTag($Tag) // Tagエンティティでチェック
Twigテンプレート内でも
{% if Product.hasTag('新着商品') %} 新着商品です。 {% else %} 新着商品ではありません。 {% endif %}
といった形で使用できるので非常に便利です!
同様に商品がカテゴリに登録されているかどうかを判断する方法は以前の記事で紹介しています。
商品があるカテゴリーに含まれるかどうかをチェックする方法
EC-CUBE3、4系をカスタマイズされている方はぜひお試しください。