EC-CUBE4でブロックやテンプレートから必要なデータを取得する方法

EC-CUBE4で新しいブロックやページを作成したとき、データベースのデータが必要になることがあります。

例えば商品情報や新着情報、レビュープラグインのレビューデータなどです。このようなデータを新しく作ったブロックやテンプレートで取得する方法を紹介します。

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'] }} // 限定品

まとめ

デザイナーがデータの取得やContorllerの作成までやるのは少し難易度高めなのでこれだけ覚えておけばOK。

「データはRepositoryからとる」

です。

Copyright © 2020 homupedia.com