Saltar al contenido principal

Insertar datos de tus tablas

Las etiquetas son cómo tu HTML habla con tus tablas. Están inspiradas en Handlebars (parecen {{...}}) pero solo hay unas pocas.

Etiquetas básicas

{{campo_sufijo}} — mostrar un valor

Inserta el valor de una columna, escapado para HTML (seguro contra XSS):

<h1>{{nombre_producto}}</h1>
<p>{{descripcion_producto}}</p>

Fíjate: el nombre de la etiqueta incluye el sufijo del módulo. Si tu módulo se llama productos con sufijo producto, las columnas se llaman nombre_producto, precio_producto, etc.

{{money campo_x}} — formatear como dinero

Muestra un número como precio con símbolo y separadores:

<strong>{{money precio_producto}}</strong>

Se muestra como $4.500 (según el formato regional configurado).

{{fecha campo_x}} — formatear como fecha legible

Muestra una fecha en formato claro:

<time>{{fecha fecha_visita}}</time>

Se muestra como 24 de julio, 2026 (o el formato que tengas configurado).

{{img campo_x}} — obtener la URL de una imagen

Devuelve la dirección de la imagen. Se usa dentro de <img src="">:

<img src="{{img imagen_producto}}" alt="{{nombre_producto}}" />

{{#cada}}...{{/cada}} — repetir por cada registro

Repite el contenido interno por cada fila de la tabla:

<ul>
{{#cada}}
<li>{{nombre_producto}} — {{money precio_producto}}</li>
{{/cada}}
</ul>

Si tu tabla tiene 20 productos, se generan 20 <li>.

{{#si campo}}...{{/si}} — mostrar solo si tiene valor

Renderiza el bloque interno solo si la columna tiene valor (para booleanos, campos opcionales, etc.):

{{#si activo_producto}}
<span class="badge bg-success">Disponible</span>
{{/si}}

Muy útil para etiquetas condicionales, banners de oferta, avisos de agotado.

{{#imagenes campo}}...{{/imagenes}} — galería

Recorre las imágenes de un campo tipo Múltiples imágenes:

<div class="galeria">
{{#imagenes fotos_producto}}
<img src="{{url}}" alt="Foto" />
{{/imagenes}}
</div>

Dentro del bloque, {{url}} es la URL de cada imagen individual. Ver Galerías de imágenes.

Datos del registro único (detalle)

Si tu página no tiene {{#cada}}, las etiquetas usan el primer registro de la tabla como fuente. Útil para páginas de configuración o info institucional que sacas de una tabla con una sola fila.

Si necesitas una página de detalle (mostrar un producto específico), la manera limpia es crear una página nueva por cada registro con el generador, o usar rutas amigables custom. La versión pública básica no soporta ?id=X para detalles.

Ejemplo completo — carta con etiquetas condicionales

<div class="container my-5">
<h1>Nuestra carta</h1>

<div class="row">
{{#cada}}
<div class="col-md-4 mb-4">
<div class="card h-100">
<img src="{{img imagen_producto}}" class="card-img-top" />
<div class="card-body">
<h5>{{nombre_producto}}</h5>
<p>{{descripcion_producto}}</p>
<div class="d-flex justify-content-between align-items-center">
<strong class="fs-4">{{money precio_producto}}</strong>
{{#si activo_producto}}
<span class="badge bg-success">Disponible</span>
{{/si}}
</div>
</div>
</div>
</div>
{{/cada}}
</div>
</div>

Ejemplo completo — visitas próximas (Aseo Brillo)

<div class="container my-4">
<h2>Próximas visitas programadas</h2>

<table class="table">
<thead>
<tr>
<th>Fecha</th>
<th>Unidad</th>
<th>Servicio</th>
<th>Supervisor</th>
</tr>
</thead>
<tbody>
{{#cada}}
<tr>
<td>{{fecha fecha_visita}}</td>
<td>{{unidad_visita}}</td>
<td>{{servicio_visita}}</td>
<td>{{supervisor_visita}}</td>
</tr>
{{/cada}}
</tbody>
</table>
</div>

Autoescape (seguridad)

Todas las etiquetas {{campo_x}} escapan HTML por defecto. Si un valor contiene <script>, se muestra como texto y no se ejecuta. Esto protege contra XSS sin que hagas nada.

Etiquetas de formularios

Para crear un formulario que guarde registros al enviar:

EtiquetaQué genera
{{#form}}...{{/form}}Envuelve un formulario que crea un registro
{{input campo_x}}<input type="text"> según el tipo de columna
{{textarea campo_x}}<textarea>
{{file campo_x}}<input type="file"> para subir archivo/imagen
{{submit "Enviar"}}Botón de envío con el texto que le pases

Ver Formularios públicos para el detalle.

¿Qué sigue?