La seccion ya estaba escrita, pero el agente no llegaba a ella. Dos motivos:
- El summary del frontmatter y el parrafo de entrada de 01-builder-fields
enumeran lo que cubre el doc y no mencionaban ni el agrupado en pestanas ni
la visibilidad condicional. Ese summary no es decorativo: entra en el texto
que se embebe (title + summary + primeros 2000 chars) y es lo que se ve en
list_docs, asi que una seccion en el char 10000 sin rastro arriba es
invisible para la busqueda semantica y para el que decide que doc abrir.
- 11b-rules-cheat-sheet es el doc de consulta rapida y ya tenia la linea de
data-field-group; sin la hermana de data-field-show, quien mirase ahi
concluia que las pestanas no se pueden condicionar.
Se anade la linea al cheat-sheet con la gramatica minima y los dos errores
tipicos (se referencia el nombre de variable y no el label; `campo=` es vacio).
Reglas no negociables (cms_, num, _num, upload arrays, c-if/{% if %}), tipos de builder field, pestañas y visibilidad condicional de campos (data-field-group, data-field-show), atributos Acai, filtros Twig, formato de datos para insert/update, errores comunes.
Reglas inmutables y cheat-sheet
Resumen ejecutable de reglas críticas, tipos de campo, filtros y formatos de datos. Si tienes duda rápida, consulta esto antes de los docs largos.
Reglas inmutables
Regla
Correcto
Incorrecto
Nombres de tabla en tools/Twig/CmsApi
'productos'
'cms_productos'
Nombres en queryDB
cms_productos
productos
Primary key
record.num
record.id
Foreign keys
categoria_num
categoria_id
Upload fields
record.imagen[0].urlPath
record.imagen
Optimizar imagen
imagen[0].urlPath | imagec(800)
imagen.url
Filtros Twig
{{ 'tabla' | get() }}
{{ get('tabla') }}
Campo enlace
{{ producto.enlace }} (ya tiene barras)
"/{{ producto.enlace }}/"
Builder var name
data-field-label → minúsculas, sin espacios
Mantener casing original
Checkbox
1 o 0 (número)
true / false
Formato fecha
YYYY-MM-DD HH:mm:ss
Cualquier otro
c-if igualdad
c-if="x = 'valor'" (un =)
c-if="x == 'valor'"
Twig {% if %}
{% if x == 'valor' %} (doble ==)
{% if x = 'valor' %}
Concatenación Twig
'value=' ~ variable
'value=' + variable
Tipos de builder field (data-field-type)
Tipo
Elemento
Devuelve
textfield
<p>
String
headfield
<h1>–<h6>
String + variable _tag
textbox
<div>
String multilínea
wysiwyg
<div class="wysiwyg">
HTML string
link
<a>
URL string
upload
<img>
Array [{urlPath, info1, info2, info3, info4}]
uploadMulti
<li>
Itera archivos subidos
list (fijo)
<div data-list-options="...">
Valor seleccionado
list (tabla)
<div data-list-table="...">
num del registro
multiv2
<li> wrapper
Array de objetos
colors
<div data-field-colors="fondo,titulo">
Objeto de N colores por nombre
colorpicker
<div>
Hex color
Pestañas en el panel del módulo: data-field-group="Estilos" en el elemento del campo (sin group → pestaña "Principal").
Visibilidad condicional: data-field-show="modo=1" en el campo, y data-field-group-show="modo=1" en una var del grupo para condicionar la pestaña entera. Se referencia el NOMBRE DE VARIABLE, no el label. modo= significa vacío (clave de la primera opción de todo list), , es OR, != niega y ; encadena condiciones (AND).
Atributos Acai
Atributo
Uso
Ejemplo
c-if
Condicional
<p c-if="activo = 1">
c-else
Rama else
<p c-else>
c-for
Loop array
<li c-for="item in items">
c-for (tabla)
Loop BD
<li c-for="p in productos" c-where="'activo=1'" c-limit="10">