跳到主要內容
文件

開發者指南

版面重複欄位

版面中經常會放入輪播・橫幅・FAQ・合作夥伴標誌等相同形式的項目重複多次的資料。過去必須以 slider1_title、slider2_title … 的方式宣告數十個變數,並自行實作排序變更・新增・刪除。

使用 Zittme 的重複欄位(repeat field),只要宣告一個項目的欄位組成,核心就會在版面詳細設定中自動提供以下功能。

  • 新增/刪除項目
  • 拖曳變更順序
  • 顯示開/關 + 顯示期間(開始~結束日):不需宣告即預設提供
  • JSON 儲存,以及前台渲染時依顯示條件篩選

輪播只是這個通用功能的其中一種用途。

1. 宣告:conf/info.xml

在 <extra_vars> 內以 <group> 包覆,並在 type="repeat" 變數的 <item> 內放入一個項目的欄位。

<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 等。
  • 一個版面中可以放置多個重複欄位(例: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 時,重複欄位會被忽略(不會發生錯誤)。