Trường lặp của layout
Layout thường chứa dữ liệu gồm nhiều mục cùng dạng lặp lại như slider, banner, FAQ, logo đối tác. Trước đây phải khai báo hàng chục biến kiểu slider1_title, slider2_title … rồi tự cài đặt việc đổi thứ tự, thêm, xóa.
Với trường lặp (repeat field) của Zittme, chỉ cần khai báo cấu trúc trường của 1 mục, lõi sẽ tự động cung cấp những điều sau trong cài đặt chi tiết layout.
- Thêm / xóa mục
- Kéo thả để đổi thứ tự
- Bật/tắt hiển thị + thời gian hiển thị (ngày bắt đầu ~ kết thúc): có sẵn mặc định dù không khai báo
- Lưu dạng JSON và lọc theo điều kiện hiển thị khi render phía trước
Slider chỉ là một công dụng của tính năng đa năng này.
1. Khai báo: conf/info.xml
Bọc bằng <group> bên trong <extra_vars>, rồi đặt các trường của 1 mục vào <item> của biến type="repeat".
<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><var>trong<item>dùng nguyên các kiểu như extra_var thông thường:text/textarea/image/select/checkbox/colorv.v.- Một layout có thể có nhiều trường lặp (ví dụ:
visuals,partners). - Nhất định phải đặt trong
<group>. Cài đặt chi tiết layout vẽ mỗi nhóm thành một tab, nên biến nằm ngoài nhóm sẽ không hiện trên màn hình.
2. Các trường mục được tự động thêm
Lõi tự động quản lý các trường dưới đây cho từng mục. Bạn không tự khai báo.
| Khóa | Ý nghĩa |
|---|---|
_id | id riêng của mục (để theo dõi thứ tự, xóa) |
_label | Tiêu đề hiển thị trong danh sách quản lý |
_visible | Có hiển thị hay không (mặc định bật) |
_start_date | Ngày giờ bắt đầu hiển thị (để trống là ngay lập tức) |
_end_date | Ngày giờ kết thúc hiển thị (để trống là vô thời hạn) |
Thứ tự trong mảng chính là thứ tự hiển thị. Không có trường thứ tự riêng.
3. Dùng trong template: layout.html
Giá trị đã lưu đi vào template dưới dạng mảng đối tượng mục qua $layout_info->{variable_name}. Điều kiện hiển thị (bật/tắt, thời gian) được lọc bằng hàm hỗ trợ LayoutModel::getVisibleItems(): không cần tự so sánh ngày.
@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>
@endifMàn hình quản trị hiện toàn bộ mục (kể cả mục đã tắt), còn phía trước chỉ hiện các mục đã qua getVisibleItems().
4. Định dạng lưu
Giá trị được lưu vào instance layout tương ứng dưới dạng mảng JSON các đối tượng mục. Ngày có định dạng YYYYMMDDHHIISS, ảnh là đường dẫn tệp đã tải lên. Bạn không cần tự phân tích, nhưng hãy tham khảo khi làm công cụ xuất hoặc chuyển dữ liệu.
5. Giới hạn và lưu ý
- Không hỗ trợ trường lặp bên trong trường lặp (lồng nhau).
- Không có giới hạn số mục, nhưng nên giữ dưới 20 mục vì hiệu năng.
- Đừng để tên biến trùng với extra_var thông thường đã có.
- Tính năng này là riêng của Zittme. Nếu cài cùng info.xml lên Rhymix, trường lặp sẽ bị bỏ qua (không gây lỗi).