本文へスキップ
ドキュメント

開発者ガイド

レイアウトの繰り返しフィールド

レイアウトには、スライダー・バナー・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 にインストールすると、繰り返しフィールドは無視されます(エラーにはなりません)。