商品の登録情報は『dtb_product』テーブルに保存されていますが、カテゴリーやタグの情報は別のテーブルで管理されており、一見ではそれらの情報にどのようにアクセスすれば良いのかわかりづらいです。
本記事では、商品詳細ページ(Twigテンプレート)でこれらの情報にアクセスするためのコードを纏めました。
商品情報(Product)の中身
今回例として、EC-CUBE 4のデフォルト商品『彩のジェラートCUBE』のカテゴリー情報とタグ情報を、Twigテンプレート上で取得してみます。

カテゴリーは親を含めて5つ、タグは2つ登録しています。
商品詳細ページのTwigテンプレートでは、「Product」という変数に商品情報が格納されています。
まず、この「Product」の中身を確認してみます。
以下は、商品詳細ページのTwigテンプレート(detail.twig)で{{ dump(Product) }} 関数を使ったときの表示です。(dump()関数については こちら)

商品IDや商品名などの情報が格納されていますね。
ちなみに、商品名を表示したい場合はTwigテンプレートに以下コードを記載すればOKです。
{{ Product.name }}
IDなども同じですね。
なお、配列の場合は添え字([0]などのインデックス)が必要です。
カテゴリー情報にアクセスする
商品のカテゴリー情報は、先ほどのProductにある「ProductCategories」プロパティ内のCategoryプロパティに格納されています。(階層が深いので、一見わかりにくい。)
また「ProductCategories」は配列なので、以下のようなコードでカテゴリー情報を確認できます。
{% for ProductCategory in Product.ProductCategories %}
{{ dump(ProductCategory.Category) }}
{% endfor %}
実行結果

登録されているカテゴリー5つの情報が取得できました。

「ジェラート」のカテゴリー名を表示させたい場合は、以下コードをTwigテンプレートに記載すればOKです。
{{ (Product.ProductCategories[0].Category.name) }}
カテゴリー情報にアクセスできるようになれば、以下のように「特定のカテゴリーの商品ページにのみ特定のテキストを表示させる」といったカスタマイズもできます。



カテゴリー別・商品一覧ページのリンクを貼る
例えば、カテゴリーIDが1(初期は「ジェラート」)の商品一覧ページのURLは以下のようになっています。
https://noveblo-ec.site/products/list?category_id=1
末尾の数字がカテゴリーIDと対応しているので、以下のように表示したい一覧ページのIDを埋め込めばリンクを作れます。
<a href="{{ url('product_list') }}?category_id={{ Product.ProductCategories[0].Category.id }}">{{ Product.ProductCategories[0].Category.name }}</a>
- url(‘product_list’)
-
「https://ドメイン/products/list」の簡略表記です。
- Product.ProductCategories[0].Category
-
上で見たように、一番目に格納されているカテゴリー情報です。
タグ情報にアクセスする
商品のタグ情報は「Product.Tags」で取得できます。

カテゴリーと同じように配列で格納されているので、全情報を表示するにはfor文を使います。
例えば、登録されているタグIDを全て表示するには以下のようになります。
{% for Tag in Product.Tags %}
{{ dump(Tag.id) }}
{% endfor %}
タグ情報にアクセスできるようになれば、以下のように「特定のタグが付いた商品ページにのみ特定のテキストを表示させる」といったカスタマイズもできます。



タグ別・商品一覧ページは?
タグ別の商品一覧ページは用意されていないため、自分で作ることになります。
以下記事で作り方を紹介しているので、合わせてご覧ください。

まとめ
以上、商品のカテゴリーやタグ情報を取得し、ページに表示させる方法を紹介しました。
カテゴリーやタグは、データベースでは異なるテーブルで管理されているため、初めて見る方には構造がわかりにくいかと思います。本記事を参考に、使いこなしてみてください。