コレクションコンテンツ

コレクションコンテンツは、複数のレコード(アイテム)を登録できるコンテンツです。カスタムフィールドを利用できます。

たとえば、お知らせ情報を登録してその情報をページネーションで表示する、という活用方法があります。 商品や店舗情報のデータベースとして登録して、ざまざまなページで情報を引き出して表示するという使い方もできます。

コレクションリスト画面

標準フィールド

コレクションコンテンツは次の標準フィールドを持ちます。 標準フィールドの設定を変更したい場合は、標準フィールドのカスタマイズ を参考にしてください。

フィールド名 ラベル
name 名前
date 日付
published_at 公開日時
display_order 表示順

コレクションコンテンツ設定

コレクションコンテンツの設定ファイルは system/config/collections.php です。 この設定ファイルはPHPの配列で定義されます。配列のキーがコンテンツタイプ名になります。

設定ファイルのフォーマットと設定項目について説明します。
設定ファイルフォーマット:

<?php

return [
    'コンテンツタイプ名' => [
        // コンテンツタイプの設定項目
        'inputs' => [
            '標準フィールド名' => [
                // 標準フィールドの設定項目
            ],
            // ... 以降の標準フィールド設定
        ],
        'fields' => [
            'フィールド名' => [
                // フィールドタイプの設定項目
            ],
            // ... 以降のフィールドタイプ設定
        ],
    ],
    // ... 以降のコンテンツタイプ設定
];

コンテンツタイプの設定項目

項目 説明
label 店舗 管理画面でコンテンツタイプの表示名として使われる。
outline 店舗を管理します。 管理画面でコンテンツタイプの説明文として使われる。
inputs 標準フィールド設定。標準フィールドのカスタマイズ を参考にしてください。
fields カスタムフィールド設定。カスタムフィールドページを参考にしてください。
meta
[
    'pref' => 'pref.select',
],
メタ保存するフィールドを指定します。配列のキーには保存する際の名前を指定します。配列の値にはフィールド名とインプット名をドットつなぎで指定します。
search 1 1 を指定すると、検索用テーブル(collection_seaches)に検索用データを保存します。

設定例:

    'store' => [ // コンテンツタイプ名
        'label' => '店舗',
        'outline' => '店舗を管理します。',
        'inputs' => [
            'date' => [
                'hidden' => 1,
            ],
        ],
        'fields' => [
            'store_code' => [
                'label' => '店舗コード',
                'type' => 'text',
                'inputs' => [
                    'text' => [
                        'rule' => 'required',
                    ],
                ],
            ],
            'pref' => [
                'label' => '都道府県',
                'type' => 'select',
                'inputs' => [
                    'select' => [
                        'table' => 'pref_code',
                    ],
                ],
            ],
            'address' => [
                'label' => '住所',
                'type' => 'textarea',
            ],
            'tel' => [
                'label' => '電話番号',
                'type' => 'text',
                'inputs' => [
                    'text' => [
                        'value' => '',
                    ],
                ],
            ],
            'hours' => [
                'label' => '営業時間',
                'type' => 'textarea',
                'inputs' => [
                    'textarea' => [
                        'value' => '9:00~21:00',
                    ],
                ],
            ],
            'information' => [
                'label' => 'お知らせ',
                'type' => 'textarea',
            ],
        ],
        'meta' => [
            'pref' => 'pref.select',
            'store_code' => 'store_code.text',
        ],
    ],

コレクションテンプレート

コレクションコンテンツの1レコードの内容を表示するための部分的なテンプレートを持つことができます。 コレクションテンプレートは、public/themes/{テーマ名}/views/collection/ ディレクトリに保存します。 コンテンツタイプ名が store の場合は、store.twig がコレクションテンプレートになります。
このテンプレートの中では、{{ field('address') }} のように記述することで、コレクションコンテンツのフィールドを出力することができます。

コレクションテンプレートを使ってレンダリングするためには、ページコンテンツのテンプレートなどで collection() 関数を使います。

{{ collection(storeObject) }}

この場合、引数の storeObject がコレクションオブジェクトです。コレクションオブジェクトはクエリ機能などで取得できます。

プレビューテンプレート

コレクション編集画面のプレビューパネルは、フィールドの内容を順番に出力するデフォルトのプレビューテンプレートでレンダリングされます。 コレクションタイプごとに専用のプレビューテンプレートを用意することもできます。 コンテンツタイプ名が store の場合は、public/themes/{テーマ名}/views/collection/preview/store.twig がプレビューテンプレートになります。 プレビューテンプレートは、HTML全体をレンダリングできるテンプレートを用意します。

コレクションを表示する

コレクションは、ページネーションやアーカイブアクションで表示するか、クエリを使ってコンテンツの内容を表示することができます。 ページネーションアーカイブを使って表示したい場合は、それぞれのマニュアルページを参考にしてください。

サンプルテーマには「店舗」というコレクションコンテンツが用意されています。 店舗コレクションでは、都道府県コードをテーブルコンテンツで管理していて、店舗情報ページでは都道府県別にまとめて表示するという応用的な使い方をしています。 ここでは、サンプルテーマの店舗コレクションをシンプルに表示する例を紹介します。

まず、クエリを用意します。クエリ名が重複しないように注意して、typeとbase_typeを指定するだけです。このクエリでは、公開状態のコレクションをすべて取得します。

'store_all' => [
    'type' => 'store',
    'base_type' => 'collection',
],

次に、ページまたはモジュールのテンプレートに次のコードを追加します。
※ 動作を確認するだけなら既存のページテンプレートに追加してみても良いです。

{% for store in query('store_all') %}
  <h4>{{ store.name }}</h4>
  {{ collection(store) }}
{% endfor %}

このコードでは、query関数で store_all を指定することで query.php に定義した該当クエリの内容を取得します。 ここでは、forタグを使っているので、 store 変数にコレクション一つ分のデータがセットされます。 次の行では、collection関数を使って、コレクションの内容を表示しています。

collection関数を使うと、コレクションテンプレートを使って一つのコレクションの内容をまるごと表示することになります。 コレクションの特定のフィールドだけを表示したい場合は、サンプルテーマの views/module/store_list.twig を参考にしてください。