ECサイトでは商品があるカテゴリーに含まれるかどうかチェックして、ページごとに情報を変えるというカスタマイズを良く行います。

EC-CUBE3やEC-CUBE4ではとても簡単に実現できるので、よくある確認方法をご紹介します。

Twig内だけで完結することもできるのですが、より使い回しが効くEntityにメソッドを追加の方法をご紹介します。

src/Eccube/Entity/Product.phpにメソッド追加

    /**
     * 商品がカテゴリーに属しているかどうかチェックする 子カテゴリーは考慮しない
     * @param $category \Eccube\Entity\Category|integer|string
     * @return bool
     */
    public function belongsToCategory($category)
    {
        if ($category instanceof \Eccube\Entity\Category) {
            $category = $category->getId();
        }
        foreach ($this->ProductCategories as $C) {
            if (is_int($category)) {
                if ($C->getCategoryId() === $category) {
                    return true;
                }
            } else if (is_string($category)) {
                if ($C->getCategory()->getName() === $category) {
                    return true; // もし同じ名前のカテゴリーが複数登録されていればこの比較はできません
                }
            } else {
                // throw new \Exception()するなりお好きに
            }
        }
        return false;
    }

 

上記メソッドを追加したことにより、Twigテンプレート内やコントローラで簡単にカテゴリーのチェックを行うことができます。

例えば商品詳細ページでは以下のように書くことが可能になります。

app/template/default/Product/detail.twig

{% if Product.belongsToCategory(3) %}
         {{ Product.name }}はIDが3のカテゴリーに所属しています。
{% endif %}
{% if Product.belongsToCategory('食器') %}
         {{ Product.name }}は食器のカテゴリーに所属しています。
{% endif %}

 

実際にはあまりTwig内でカテゴリー名を使ってチェックすることはおすすめしませんが・・・。

理由はカテゴリー名は頻繁に修正が入ることと、データベースへの余分な問い合わせが発生する可能性があるためです。

カテゴリーIDは管理画面や商品一覧ページのURLで確認することができます。

EC-CUBE3系4系をご利用の方はぜひお試しください。