# Variables y Tipos de Datos
En Liquid, trabajas con variables para almacenar y manipular datos. Esta sección cubre cómo crear variables y los diferentes tipos de datos disponibles.
# Variables
Las variables almacenan valores que puedes reutilizar en tu plantilla. Puedes crear tus propias variables o usar las que Modyo proporciona automáticamente.
# Crear variables
Usa assign para crear nuevas variables:
{% assign nombre = "Juan" %}
{% assign precio = 100 %}
{% assign activo = true %}
{{ nombre }} → Juan
{{ precio }} → 100
# Sintaxis de acceso
{{ variable }} → Muestra el valor
{{ objeto.propiedad }} → Accede a una propiedad (notación de punto)
{{ objeto['propiedad'] }} → Acceso con corchetes (necesario si hay espacios)
{{ objeto.anidado.propiedad }} → Propiedades anidadas
Diferencias entre notación de punto y corchetes:
- Punto: Más simple pero no permite espacios ni variables dinámicas
- Corchetes: Permite espacios, guiones y usar variables como claves
{{ producto.titulo }} → Funciona
{{ producto['titulo'] }} → También funciona
{{ producto['precio-especial'] }} → Necesario con guiones
{{ producto[nombre_variable] }} → Acceso dinámico con variable
# Tipos de Datos
Liquid en Modyo soporta los siguientes tipos de datos:
# Strings (cadenas de texto)
Las cadenas deben estar entre comillas simples o dobles:
{% assign mensaje = "Hola mundo" %}
{% assign nombre = 'Juan' %}
{{ mensaje }} → Hola mundo
# Numbers (números)
{% assign precio = 100 %} → Entero
{% assign descuento = 0.15 %} → Decimal
{{ precio | minus: 10 }} → 90
# Booleans (booleanos)
{% assign activo = true %}
{% assign publicado = false %}
{% if activo %}
Este contenido está activo
{% endif %}
# Nil (nulo)
Representa la ausencia de valor:
{% if user == nil %}
No hay usuario logueado
{% endif %}
# Arrays (arreglos)
Colecciones ordenadas de elementos:
{% assign productos = spaces['tienda'].types['producto'].entries %}
{{ productos[0].fields.name }} → Primer elemento (índice 0)
{{ productos[2] }} → Tercer elemento (índice 2)
{{ productos.first.fields.name }} → Primer elemento (método .first)
{{ productos.last.fields.name }} → Último elemento (método .last)
{{ productos.size }} → Cantidad de elementos
{% for producto in productos %}
{{ forloop.index }}: {{ producto.fields.name }}
{% endfor %}
Nota sobre índices: Los arrays en Liquid comienzan en 0, por lo que el primer elemento es [0], el segundo es [1], etc.
# Hashes (objetos/diccionarios)
Colecciones de pares clave-valor:
{% assign config = site.metadata %}
{{ config.theme }} → Notación de punto
{{ config['theme'] }} → Notación de corchetes
{{ config['color-primary'] }} → Necesario con guiones
{% for item in config %}
{{ item[0] }}: {{ item[1] }} → Clave: Valor
{% endfor %}
# Operaciones con Tipos de Datos
# Conversión de tipos
{{ "100" | plus: 0 }} → Convierte string a número
{{ 100 | append: "" }} → Convierte número a string
# Verificación de tipos
{% if productos.size > 0 %}
Hay productos disponibles
{% elsif productos == empty %}
No hay productos
{% endif %}
# Valores por defecto
{{ user.name | default: "Invitado" }}
{{ producto.fields.precio | default: 0 }}
Buena práctica
Siempre usa default cuando no estés seguro si un valor existe para evitar mostrar contenido vacío.
# Objetos Especiales de Modyo
Modyo proporciona objetos predefinidos que contienen información del sistema:
user: Usuario actualsite: Sitio actualpage: Página actualspaces: Acceso a espacios de contenidoaccount: Información de la cuenta
Para una lista completa y detallada de todos los objetos disponibles, consulta la sección Objetos.
# Variables de Contexto
Además de esos objetos, en cada renderizado la plataforma inyecta un conjunto de variables que describen la página que se está resolviendo. No son contenido: son el contexto con el que trabaja la plantilla, y determinan qué puedes escribir en cada vista.
No todas existen en todos lados. Fuera del contexto donde se inyecta, una variable simplemente no existe y Liquid la imprime vacía, sin ningún aviso, así que un nombre mal escrito y una variable usada fuera de su contexto se ven exactamente igual en la página. Consulta Comportamiento ante Errores de Renderizado.
# Siempre disponibles
Estas cuatro colecciones se inyectan en todos los renderizados, sin importar el tipo de página ni si estás en un layout, una vista, un snippet o la plantilla de un widget:
| Variable | Qué contiene |
|---|---|
assets | El gestor de archivos de la cuenta. Se indexa por el UUID del archivo, como en assets['uuid']. |
spaces | Los espacios de contenido de la cuenta. Se indexa por el identificador del espacio, como en spaces['blog']. |
menus | Los menús del sitio. Se indexa por el slug del menú, como en menus['main']. Consulta Navegación. |
vars | Las variables globales del sitio o, en la plantilla de un widget, las de ese widget. Consulta Variables globales. |
# Del contexto de la página
| Variable | Qué contiene | Dónde existe |
|---|---|---|
content_for_layout | El HTML ya renderizado de la vista. Marca el punto del layout donde se inserta la página. | Solo en los layouts |
page | La página actual. Consulta page. | Todas menos la de resultados de búsqueda |
page_context | El tipo de página que se resolvió: context-home, context-custom, context-content, context-origination o context-search. | Todas |
page_name | El mismo identificador con el sufijo -show, por ejemplo context-content-show. | Todas |
page_title | El nombre de la página. En la portada y en la búsqueda es el texto traducido de la plataforma. | Todas |
page_id | page_name seguido de la ruta de la página, por ejemplo context-custom-show-contacto. En la portada es solo context-home-show. | Todas menos la de resultados de búsqueda |
url | La URL que se está resolviendo, incluida la ruta de la categoría o el slug de la entrada cuando corresponde. | Todas menos la de resultados de búsqueda |
current_layout_page | La página de la que sale el layout en uso. | Todas menos la portada y la de resultados de búsqueda |
page_grid | La grilla de la página, la que se pasa a {% snippet page_grid %}. Consulta grid. | Portada y páginas personalizadas |
Tip
El tag {% body %} escribe page_context, page_name y page_id en el atributo class de la etiqueta body. Mirar el código fuente de una página publicada te dice en qué contexto se resolvió, sin tener que imprimir nada en la plantilla.
# De las páginas de contenido
| Variable | Qué contiene |
|---|---|
page_scope | index cuando se resolvió el listado y show cuando se resolvió una entrada. |
entries | Las entradas del listado. Solo cuando page_scope es index. |
entry | La entrada que corresponde al slug de la URL. Solo cuando page_scope es show. |
category_path | La ruta de categoría tomada de la URL, sin el slug de la entrada. Queda vacía cuando la URL no trae categoría. |
category | La categoría que corresponde a category_path. |
# De la página de resultados de búsqueda
| Variable | Qué contiene |
|---|---|
site_search | La búsqueda ya resuelta, con sus resultados. Consulta sitesearch. |
params_query | El término buscado, saneado y escapado, listo para imprimirse. Solo existe si la URL trae el parámetro. |
params_more | El filtro adicional de la búsqueda, saneado y escapado. Solo existe si la URL lo trae. |
# De las páginas de Origination
En las páginas de Origination se inyectan además origination, el flujo de la página; pending_submissions, las respuestas pendientes del usuario en ese flujo; submission, la respuesta que se está resolviendo; y, mientras esa respuesta está en curso, current_step y current_task.