商品に対してセールや新着商品などのタグを設定し、商品一覧の中で目立たせたいことがあります。
そのような場合はProduct.phpへタグを判断するメソッドを追加しておくと便利です。

メソッド実例

次のコードはタグID、タグ名、タグエンティティ(Tagクラスのインスタンス)のいずれかを引数として渡すと商品にタグが設定されているかどうかを判断するメソッドです。

src/Eccube/Entity/Product.phpにメソッドとして追加します。

    /**
     * 商品にタグが設定されているかどうかを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();
    }

このようにProduct.phpへメソッドを作っておくと、Productインスタンスからタグを簡単にチェックすることができます。

phpから実行する場合

$Product->hasTag('セール商品') // タグ名でチェック
$Product->hasTag(11) // IDでチェック
$Product->hasTag($Tag) // Tagエンティティでチェック

twigから実行する場合

Twigテンプレート内でも

{% if Product.hasTag('新着商品') %}
  新着商品です。
{% else %}
  新着商品ではありません。
{% endif %}

といった形で使用できるので便利です!

4系での注意点

4系では\Eccube\Entity\Master\Tagではなく\Eccube\Entity\Tagに変更してください。
また、この方法ではEntityファイルを直接修正していますが、app/proxy/entity/にプロキシファイルが生成されている場合はそちらも同様の修正を行う必要があります。

また、srcのEC-CUBE本体ファイルを修正したくないという方はTrait(@EntityExtension)でエンティティ拡張する方法をお試しください。
EC-CUBE 4.0 開発者向けドキュメントサイト

カテゴリの場合

同様に商品がカテゴリに登録されているかどうかを判断する方法は以前の記事で紹介しています。
商品があるカテゴリーに含まれるかどうかをチェックする方法

EC-CUBE3、4系をカスタマイズされている方はぜひお試しください。

日本発!ECオープンプラットフォーム「EC-CUBE」 EC-CUBEゴールドパートナー EC-CUBEは株式会社イーシーキューブの商標です

EC-CUBEカスタマイズに関するお問い合わせはこちら


    [重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。

    EC-CUBEバージョンアップ