# Acai Modular System ## Modules Modules are the visual building blocks of Acai websites. Each module lives in `template/estandar/modulos//`. ### File Structure ``` / ├── index-base.tpl # Source template (EDIT THIS) ├── index.tpl # Compiled output (auto-generated, do NOT edit) ├── index-twig.tpl # Compiled Twig output (auto-generated, do NOT edit) ├── builder.json # Compiled builder vars (auto-generated, do NOT edit) ├── style.css # Module-scoped styles └── script.js # Module JavaScript ``` ### Template Syntax Templates use a hybrid of **Twig** and **Acai attributes**. The source file is always `index-base.tpl`. ```html

Title here

Description text

Call to action
``` ### Including Modules from Other Modules ```html ``` Parameters are received as variables inside the included module. ### Global Variables | Variable | Description | |----------|-------------| | `section_id` | Unique ID per module instance (use for anchors, JS scoping) | | `interno` | `true` when viewing in CMS editor, `false` on public site | | `server.HTTP_HOST` | Current domain | | `loop.index` | 1-based iteration index (inside `c-for`) | | `loop.index is odd` / `loop.index is even` | For alternating layouts | ## General Sections General sections are database-backed templates used for record views, headers, footers, and reusable layouts. They use the same template engine as modules. ### Key Differences from Modules - Access record data via the `thisrecord` variable - Upload fields return **arrays**: `thisrecord.image[0].urlPath` - Additional upload metadata: `info1` (alt text), `info2`, `info3`, `info4` - Foreign key fields use `_num` suffix: `thisrecord.category_num` - Saved via `save_general_section()` (not `save_module()`) - Parser type 2 = Twig (recommended), 0 = Acai legacy syntax ### Example: Record Template ```html
{{ thisrecord.imagen[0].info1 }}

{{ thisrecord.nombre }}

{{ thisrecord.descripcion | raw }}

{{ thisrecord.precio }}€
``` ### Variable Assignment Use `` tag to create variables from queries: ```html ``` ## Repeatable Content (multiv2) The `multiv2` builder field type creates repeatable groups of fields: ```html

{{ item.title }}

{{ item.description }}

``` Access individual items: `record.items[0].title`, `record.items[1].image`, etc.