EC-CUBE4で新しいブロックやページを作成したとき、データベースのデータが必要になることがあります。
例えば商品情報や新着情報、レビュープラグインのレビューデータなどです。このようなデータを新しく作ったブロックやテンプレートで取得する方法を紹介します。
今すぐ使える!Bootstrap4対応 格安レスポンシブテンプレート公開中
Bootstrap4に対応したレスポンシブテンプレートを公開しています。あらかじめデザインされたUIブロックを多数同梱しているので、面倒なコーディングなしに今すぐショップを構築したい方におすすめ。
-> 詳細はこちら
EC-CUBE4のデータ構造
Symfonyでデータのやり取りをするときに最低限理解しておきたいのが、EntityやRepository、Controllerの違いです。
- Entity: テーブルの構造が書かれている、テーブルそのもの
- Repository: テーブルからデータ一覧や合計金額など、クエリでデータを取得する
- Controller: テンプレートやブロックに処理したデータを渡す
なのでデータを取りたければRepositoryを見るようにします。ちなみにControllerを別のテンプレートやブロックで使うことはできないので、新しく作ったブロックでデータの処理が必要な場合は新しくControllerも作る必要があります。
どうやってデータを取得する?
データは基本的にRepositoryから取得します。Repositoryファイルはsrc/Eccube/Repository
にあります。
ファイルの中で見るのは関数の部分だけ。ここでget〇〇
と書かれたものを呼び出すとデータを取得できます。
例えば次のようなデータを取得できます。
// カテゴリ一覧
{% set Categories = repository('Eccube\\Entity\\Category').getList() %}
// タグ一覧
{% set Tags = repository('Eccube\\Entity\\Tag').getList() %}
// 新着情報
{% set NewsList = repository('Eccube\\Entity\\News').getList() %}
// ページ一覧
{% set Pages = repository('Eccube\\Entity\\Page').getPageList() %}
テンプレートやブロックでどうやって表示すればいいの?
データのタイプは配列かオブジェクトか変数かの3つしかないので取得したデータにどんなデータが詰まってるかを見れば表示する方法もわかります。
データのチェック方法はテンプレートやブロックのtwigファイルでdump()
を使います。
{% set Tags = repository('Eccube\\Entity\\Tag').getList() %}
{{ dump(Tags) }}
すると画像のように中身のデータが表示されます。
あとは配列を表示するコードを書けば必要なデータが表示されます。Twigではforやifも使えるので条件に合わせた表示も可能です。
{{ Tags[0]['name'] }} // 限定品
まとめ
SQLなどを使った細かいデータの取得はControllerの作成が必要です。
カテゴリやタグの一覧などの表示だけでよければこのページの方法で簡単に表示することができます。