# Módulos y Secciones Generales Este documento explica el sistema modular de Acai: la diferencia entre **módulos** (componentes visuales reutilizables que el usuario coloca en páginas Builder) y **secciones generales** (plantillas ligadas a una tabla que se renderizan automáticamente al acceder al `enlace` de un registro). Cubre la estructura de archivos de un módulo, las reglas obligatorias sobre `index-base.tpl`, las variables globales (`section_id`, `interno`, `server.HTTP_HOST`, `loop`), la convención `custom-{tableName}` para detalles de registro, la inclusión de un módulo dentro de otro y el uso de `thisrecord` en secciones generales. Léelo antes de crear, mover o editar cualquier carpeta dentro de `template/estandar/modulos/`. ## Módulos Componentes visuales reutilizables. Viven en `template/estandar/modulos//`. El usuario los arrastra al builder de una página y rellena sus variables. ### Estructura de archivos ``` / ├── index-base.tpl # Plantilla source (Twig + atributos Acai) — EDITA ESTE ├── index.tpl # Compilado (auto-generado) — NO TOCAR ├── index-twig.tpl # Compilado Twig (auto-generado) — NO TOCAR ├── builder.json # Variables del builder (auto-generado) — NO TOCAR ├── style.css # CSS del módulo (estático) ├── script.js # JS del módulo (estático) └── hook.php # Hook PHP propio del módulo (opcional) ``` Reglas duras: - **Solo se edita `index-base.tpl`.** `index.tpl`, `index-twig.tpl` y `builder.json` los genera el compilador y se sobrescriben automáticamente. - Editar `index-base.tpl` con `acai-write` o `acai-line-replace` **dispara la compilación automática**. - `script.js` y `style.css` son **estáticos** — NO uses sintaxis Twig dentro. Pasa valores dinámicos vía atributos `data-*`. - `index-base.tpl` solo contiene HTML/Twig. **Nunca** embebas etiquetas `