Campos repetibles del layout
Los layouts suelen incluir datos en los que se repiten varios elementos con la misma forma, como sliders, banners, preguntas frecuentes o logotipos de socios. Antes había que declarar decenas de variables como slider1_title, slider2_title … e implementar a mano el cambio de orden, la adición y la eliminación.
Con los campos repetibles (repeat field) de Zittme, basta con declarar los campos de un solo elemento y el núcleo ofrece automáticamente lo siguiente en la configuración detallada del layout.
- Agregar / eliminar elementos
- Reordenar arrastrando
- Mostrar/ocultar + periodo de visualización (fecha de inicio a fin): incluido por defecto sin declararlo
- Guardado en JSON y filtrado por condiciones de visualización al renderizar el frente
El slider es solo uno de los usos de esta función general.
1. Declaración: conf/info.xml
Envuelve la variable en un <group> dentro de <extra_vars> y coloca los campos de un elemento dentro del <item> de la variable 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>- Los
<var>dentro de<item>usan los mismos tipos que un extra_var normal:text/textarea/image/select/checkbox/color, etc. - Puedes tener varios campos repetibles en un mismo layout (por ejemplo,
visuals,partners). - Colócalos siempre dentro de un
<group>. La configuración detallada del layout dibuja cada grupo como una pestaña, así que las variables fuera de un grupo no aparecen en pantalla.
2. Campos de elemento que se agregan automáticamente
El núcleo administra automáticamente los siguientes campos en cada elemento. No los declares tú.
| Clave | Significado |
|---|---|
_id | id único del elemento (para seguir el orden y las eliminaciones) |
_label | título que se muestra en la lista de administración |
_visible | si se muestra (activado por defecto) |
_start_date | fecha y hora de inicio de visualización (vacío = de inmediato) |
_end_date | fecha y hora de fin de visualización (vacío = sin límite) |
El orden del arreglo es el orden de visualización. No hay un campo de orden aparte.
3. Uso en la plantilla: layout.html
Los valores guardados llegan a la plantilla como un arreglo de objetos de elemento en $layout_info->{variable-name}. Las condiciones de visualización (mostrar/ocultar y periodo) se filtran con el helper LayoutModel::getVisibleItems(): no necesitas comparar fechas tú mismo.
@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>
@endifEn el panel de administración se ven todos los elementos (incluidos los ocultos); en el frente solo se ven los que pasan por getVisibleItems().
4. Formato de guardado
Los valores se guardan en la instancia del layout como un arreglo JSON de objetos de elemento. Las fechas usan el formato YYYYMMDDHHIISS y las imágenes, la ruta del archivo subido. No tendrás que analizarlo tú mismo, pero tenlo en cuenta si creas herramientas de exportación o migración.
5. Restricciones y precauciones
- No se admiten campos repetibles dentro de otro campo repetible (anidados).
- No hay límite de elementos, pero por rendimiento se recomienda no pasar de 20.
- Evita que los nombres de variable coincidan con los de extra_vars normales existentes.
- Esta función es exclusiva de Zittme. Si instalas el mismo info.xml en Rhymix, los campos repetibles se ignoran (no se produce ningún error).