レイアウトの繰り返しフィールド
レイアウトには、スライダー・バナー・FAQ・パートナーロゴのように、同じ形の項目が複数繰り返されるデータがよく入ります。以前は slider1_title、slider2_title … のように変数を何十個も宣言し、並べ替え・追加・削除を自分で実装する必要がありました。
Zittme の繰り返しフィールド(repeat field)では、項目 1 つ分のフィールド構成を宣言するだけで、コアがレイアウトの詳細設定で次の機能を自動的に提供します。
- 項目の追加 / 削除
- ドラッグによる並べ替え
- 表示オン/オフ + 表示期間(開始日〜終了日):宣言しなくても標準で提供
- JSON での保存と、フロント描画時の表示条件によるフィルタリング
スライダーは、この汎用機能の用途の 1 つにすぎません。
1. 宣言:conf/info.xml
<extra_vars> の中を <group> で囲み、type="repeat" 変数の <item> の中に項目 1 つ分のフィールドを入れます。
<extra_vars>
<group>
<title xml:lang="ko">첫 화면</title>
<var name="visuals" type="repeat">
<title xml:lang="ko">비주얼 슬라이드</title>
<item>
<var name="image" type="image"><title xml:lang="ko">배경 이미지</title></var>
<var name="title" type="text"><title xml:lang="ko">제목</title></var>
<var name="text" type="textarea"><title xml:lang="ko">설명</title></var>
<var name="link_text" type="text"><title xml:lang="ko">버튼 이름</title></var>
<var name="link_url" type="text"><title xml:lang="ko">버튼 링크</title></var>
<var name="align" type="select" default="center">
<title xml:lang="ko">문구 정렬</title>
<options value="left"><title xml:lang="ko">왼쪽</title></options>
<options value="center"><title xml:lang="ko">가운데</title></options>
</var>
</item>
</var>
</group>
</extra_vars><item>の中の<var>は、通常の extra_var と同じタイプをそのまま使います:text/textarea/image/select/checkbox/colorなど。- 1 つのレイアウトに繰り返しフィールドを複数置けます(例:
visuals、partners)。 - 必ず
<group>の中に置いてください。 レイアウトの詳細設定はグループをタブとして描画するため、グループ外の変数は画面に表示されません。
2. 自動で付く項目フィールド
コアが項目ごとに以下のフィールドを自動で管理します。自分で宣言する必要はありません。
| キー | 意味 |
|---|---|
_id | 項目の固有 id(並び順・削除の追跡用) |
_label | 管理一覧に表示されるタイトル |
_visible | 表示するかどうか(デフォルトはオン) |
_start_date | 表示開始日時(空なら即時) |
_end_date | 表示終了日時(空なら無期限) |
配列の順番がそのまま表示順です。別途の並び順フィールドはありません。
3. テンプレートでの使用:layout.html
保存された値は、テンプレートで $layout_info->{variable_name} として項目オブジェクトの配列になって渡されます。表示条件(オン/オフ・期間)は LayoutModel::getVisibleItems() ヘルパーで絞り込みます:日付を自分で比較する必要はありません。
@version(2)
@php
$slides = LayoutModel::getVisibleItems($layout_info->visuals ?? []);
@endphp
@if (count($slides))
<div class="my-slider">
@foreach ($slides as $slide)
<div class="slide" style="background-image:url('{{ $slide->image }}')">
<h2>{{ $slide->title }}</h2>
@if (!empty($slide->text))<p>{{ $slide->text }}</p>@endif
@if (!empty($slide->link_text))<a href="{{ $slide->link_url }}">{{ $slide->link_text }}</a>@endif
</div>
@endforeach
</div>
@endif管理画面ではすべての項目(オフのものを含む)が、フロントでは getVisibleItems() を通った項目だけが表示されます。
4. 保存形式
値は項目オブジェクトの JSON 配列として、該当するレイアウトインスタンスに保存されます。日付は YYYYMMDDHHIISS 形式、画像はアップロードされたファイルのパスです。自分でパースすることはありませんが、エクスポート・移行ツールを作るときの参考にしてください。
5. 制約と注意
- 繰り返しフィールドの中にさらに繰り返しフィールド(ネスト)を置くことはできません。
- 項目数の上限はありませんが、パフォーマンスのため 20 個以内をおすすめします。
- 既存の通常の extra_var と変数名が重ならないようにしてください。
- この機能は Zittme 固有です。同じ info.xml を Rhymix にインストールすると、繰り返しフィールドは無視されます(エラーにはなりません)。