Chuyển đến nội dung
Tài liệu

Hướng dẫn cho nhà phát triển

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 / color v.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
_idid riêng của mục (để theo dõi thứ tự, xóa)
_labelTiêu đề hiển thị trong danh sách quản lý
_visibleCó hiển thị hay không (mặc định bật)
_start_dateNgày giờ bắt đầu hiển thị (để trống là ngay lập tức)
_end_dateNgà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>
@endif

Mà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).