Files
agenticSystem/docs/11-quick-reference.md
Jordan Diaz 6881d64a08 ajustes
2026-04-25 10:27:51 +00:00

6.7 KiB
Raw Blame History

Quick Reference — Cheat sheet

Este documento es un resumen ejecutable de las reglas críticas, los tipos de campo, los filtros Twig, los formatos de datos para insert/update y las variables globales. Es la fuente única de verdad para resolver dudas rápidas sin tener que abrir los docs largos. Léelo antes de cualquier operación cuando quieras refrescar las reglas; el resto de docs (0110) profundizan en cada tema.

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
checkbox <input> o <div> 1 / 0
colorpicker <div> Hex color

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">
c-hidden Variable oculta <div c-hidden="true">
c-class Clase condicional <div c-class="{ 'bg-red': color == '1' }">
c-required Required condicional c-required="'2' not in camposquitar"
c-form Formulario <c-form tableName="'contacto'" captcha="true">

Filtros Twig

Filtro Uso
get 'tabla' | get(where, order, limit)
queryDB 'SELECT ... FROM cms_tabla' | queryDB()
hook 'hooks/module_id/' | hook({params})
module 'module_id' | module({params})
imagec path | imagec(width)
translate 'texto' | translate (tabla textos_generales)
raw variable | raw
truncate text | truncate(100)
json_decode 'json_string' | json_decode
default variable | default('fallback')
length, upper, lower, trim, replace, split, filter Estándar Twig

Formato de datos para insert/update

Tipo Formato Ejemplo
textfield String "Texto"
textbox String multilínea "Línea 1\nLínea 2"
date/datetime YYYY-MM-DD HH:mm:ss "2025-12-03 10:30:00"
wysiwyg HTML string "<p>Texto</p>"
list String o número "activo" o "1"
checkbox Número 1/0 1 o 0
multitext String JSON "[{\"item\":\"valor\"}]"
upload NO enviar — usar upload_record_image después

Variables globales

Variable Descripción
section_id ID único por instancia del módulo
interno true dentro del editor CMS
server.HTTP_HOST Dominio actual (sin protocolo)
loop.index Índice 1-based en c-for/{% for %}
loop.index is odd / is even Layouts alternados
thisrecord Registro actual (solo en secciones generales)

Decisión rápida — qué tool usar

Intención Tool / workflow
Crear módulo nuevo acai-write index-base.tpladd_module_to_recordset_module_config_vars
Editar template de módulo acai-viewacai-line-replace
Ver datos de un módulo en una página get_module_config_vars
Cambiar valores de un módulo set_module_config_vars
Subir imagen a un módulo Usa uploadFields de set_module_config_varsupload_record_image (tableName: "builder_custom")
Crear tabla nueva create_table (pregunta enlace/seoMetas antes) → create_field
Crear detalle de registro Sección general en template/estandar/modulos/custom-{tableName}/
Editar header / footer get_layout_fieldset_layout_field (NUNCA edites los .tpl directamente)
Añadir librería global list_global_librariesadd_global_library (top o bottom)
Hook que se ejecuta antes de cada página acai-write el .phpset_hook_middleware({ middleWare: ["allurls"] })
Generar imagen IA generate_imageupload_record_image con uploadUrl/fullUrl
Buscar archivos acai-glob
Buscar texto en archivos acai-grep
URL del proyecto get_web_url (añade ?pruebas=1)
Navegar el preview del usuario navigate_browser
Token JWT expirado (403) refresh_acai_token
Necesito un doc no cargado read_doc({ name: "..." })
Listado de docs list_docs()

Errores comunes a evitar

  • Editar index.tpl, index-twig.tpl o builder.json (autogenerados).
  • Editar layout.json o custom-header-twig/* directamente (usa set_layout_field).
  • Usar el sectionId como recordId para subir imágenes (es el num de builder_custom).
  • Usar el nombre de la variable como fieldName (es el campo de relations: image1, no imagenes).
  • Crear página por registro en apartados para detalles (usa custom-{tableName}/).
  • Cambiar enlace o controlador de un registro existente.
  • Usar localhost:8080 o dominios de producción (siempre get_web_url + ?pruebas=1).
  • Crear archivos JSON de i18n (usa | translate + tabla textos_generales).
  • Usar Twig dentro de script.js o style.css (estáticos — pasa valores via data-*).
  • Llamar mkdir (usa acai-write directamente — crea el directorio padre).