版面重複欄位
版面中經常會放入輪播・橫幅・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 時,重複欄位會被忽略(不會發生錯誤)。