¿Qué es Liquid, el lenguaje de plantillas de Shopify?
Liquid es el lenguaje de plantillas de código abierto que creó Shopify y con el que se escriben los temas de sus tiendas. Liquid mezcla HTML con marcas que insertan datos de la tienda, como el título o el precio de un producto, y con una lógica sencilla. Las plantillas Liquid de un tema se resuelven en el servidor, así que el navegador recibe HTML ya escrito.
Lo esencial
- Liquid es el lenguaje de plantillas de los temas de Shopify; es de código abierto y lo usan también otros proyectos.
- Tiene tres piezas: objetos entre llaves dobles, etiquetas de lógica y filtros que transforman un valor.
- Las plantillas Liquid de un tema se resuelven en el servidor: el dato llega escrito en el HTML inicial, sin depender de JavaScript.
- Un valor que no existe no da error: no imprime nada. Y una cadena vacía cuenta como verdadera en una condición.
- Un dato guardado en Shopify solo llega a la ficha si alguna plantilla Liquid, del tema o de una aplicación, lo imprime.
Aquí Liquid no tiene nada que ver con la liquidez ni con el diseño Liquid Glass de Apple: es el lenguaje en el que está escrito el tema de tu tienda Shopify. Cada vez que alguien abre una ficha, una plantilla Liquid decide qué título, qué precio y qué descripción aparecen en el HTML. Te importa aunque no vayas a programar nunca, porque un dato que guardas en Shopify solo llega a la página si una línea de Liquid lo imprime. Si la línea no está, el dato existe en el panel y en la tienda no lo ve nadie, ni las personas ni los buscadores.
Cómo funciona
Shopify define Liquid como un lenguaje de plantillas creado por la propia Shopify, disponible como proyecto de código abierto en GitHub y usado por muchos otros proyectos y empresas. Permite escribir una sola plantilla con el contenido fijo e insertar la información que cambia según dónde se renderice. Además de los temas, Shopify usa variantes de Liquid en las plantillas de notificaciones, en Shopify Flow y en las plantillas de albaranes y de impresión de pedidos.[1]Shopify.dev. Liquid reference
El repositorio explica por qué se diseñó así: para que quien usa una aplicación pueda editar su aspecto sin ejecutar código inseguro en el servidor. Liquid no evalúa código arbitrario, las plantillas están hechas para que las editen los usuarios y sirve igual para HTML que para correos. Es una biblioteca de Ruby con licencia MIT.[2]Shopify, repositorio en GitHub. Shopify/liquid
Todo Liquid se apoya en tres piezas:[1]Shopify.dev. Liquid reference
- Objetos, entre llaves dobles, que imprimen un dato:
{{ product.title }}escribe el título del producto. - Etiquetas, entre llave y porcentaje, que definen la lógica:
{% if %},{% for %}y compañía deciden qué se imprime y cuántas veces. - Filtros, detrás de una barra vertical, que transforman un valor antes de imprimirlo:
{{ product.price | money }}da al precio el formato de moneda que la tienda tiene configurado.[3]Shopify.dev. Liquid filters: money
Liquid maneja seis tipos de dato: cadena, número, booleano, nil, lista y empty. Dos reglas explican muchos errores de tienda. La primera: nil es un valor sin definir que no imprime nada, así que un dato que falta no rompe la página, simplemente no aparece. La segunda: en una condición solo nil y false son falsos; una cadena vacía, un cero o una lista vacía cuentan como verdaderos.[4]Shopify.dev. Liquid basics Cada recurso tiene además un handle, un identificador en minúsculas generado a partir de su título que se usa en las URL y para buscar el recurso desde la plantilla.[4]Shopify.dev. Liquid basics
Dónde vive en el tema
Un tema de Shopify se organiza en carpetas: layout, con el archivo theme.liquid que envuelve todas las páginas; templates, una por tipo de página, como la de producto; sections y blocks, los módulos que el comercio añade y ordena desde el editor; snippets, trozos de Liquid reutilizables; y assets, config y locales. Las plantillas en JSON solo envuelven secciones, y el código Liquid está en las secciones, los bloques y los snippets.[5]Shopify.dev. Theme architecture Si buscas qué línea imprime un dato de la ficha, casi siempre está en una sección de producto, no en la plantilla.
Liquid se resuelve en el servidor. Shopify recomienda pintar el contenido inicial con Liquid y HTML en lugar de con frameworks de JavaScript en el navegador, para que el HTML inicial funcione sin JavaScript y el navegador pueda mostrar el contenido en cuanto lo recibe.[6]Shopify.dev. Render essential content server-side Eso es renderizado del lado del servidor: lo que imprime Liquid viaja en la primera respuesta, sin esperar al renderizado de JavaScript, y lo lee también un rastreador que no ejecuta scripts.
En una tienda
Ejemplo ficticio. Una tienda de ropa quiere que la ficha de una camiseta muestre el título, el precio, las instrucciones de cuidado que guarda en un metafield y el marcado de producto en JSON-LD. La sección de producto del tema lo resuelve con estas líneas:
<h1>{{ product.title }}</h1>
<p class="precio">{{ product.price | money }}</p>
{% if product.metafields.custom.cuidados %}
<p class="cuidados">{{ product.metafields.custom.cuidados.value }}</p>
{% endif %}
<script type="application/ld+json">
{{ product | structured_data }}
</script>
Y esto es lo que recibe el navegador, ya escrito, sin ninguna llave a la vista:
<h1>Camiseta de lino</h1>
<p class="precio">29,00 €</p>
<p class="cuidados">Lavar a 30 °C. No usar secadora.</p>
La última parte merece una línea. El filtro structured_data convierte el objeto de producto en datos estructurados de Schema.org: un Product si no tiene variantes y un ProductGroup si tiene una o más.[7]Shopify.dev. Liquid filters: structured_data Así que el JSON-LD de muchos temas no lo escribe nadie a mano: lo genera Liquid con los datos que tenga el producto, y solo con esos.
Lo que se suele confundir
Comprobar que un dato «existe» con un {% if %} no protege de un campo vacío. En Liquid solo nil y false son falsos: una cadena vacía cuenta como verdadera,[4]Shopify.dev. Liquid basics así que la condición pasa y la ficha imprime una etiqueta sin contenido. Para un dato que de verdad no existe, en cambio, no hace falta condición para evitar un error: nil no imprime nada.
Cómo comprobarlo
- Abre el código del tema y ve a la carpeta
sections: busca la sección que usa la plantilla de producto. La plantilla JSON solo te dice qué secciones carga; el Liquid está dentro de ellas.[5]Shopify.dev. Theme architecture - Busca el dato por su nombre. Para un metafield, busca su espacio de nombres y su clave (por ejemplo,
custom.cuidados). Si no aparece en ningún archivo del tema, el tema no lo imprime, salvo que lo conecte un bloque desde el editor o lo pinte una aplicación con un app embed de Shopify. - Mira el resultado en el código fuente de la ficha, no en el inspector. Lo que imprime Liquid aparece ya escrito; si un valor solo aparece en el inspector, lo ha añadido JavaScript después.
- Busca
application/ld+jsonen ese código fuente y cuenta cuántos bloques hay. Si el tema usa el filtrostructured_datay además una aplicación añade su propio marcado, puede haber dos descripciones del mismo producto. - Prueba con un producto incompleto, sin descripción o sin el metafield, y mira qué deja la plantilla: nada, una etiqueta vacía o un texto por defecto.
Concepto cercano: Stencil
Liquid es el lenguaje de plantillas de Shopify; Stencil es el motor de temas de BigCommerce, basado en plantillas Handlebars.[8]BigCommerce Dev Center. Stencil Hacen el mismo trabajo, convertir los datos del catálogo en el HTML de cada página, con sintaxis distintas, así que un fragmento escrito para un tema de Shopify no sirve tal cual en uno de BigCommerce. Dentro de Shopify, Liquid es la pieza que imprime lo que guardan los metafields y los metaobjetos.
Para seguir, la guía del metafield a la página publicada sigue un dato de Shopify hasta el HTML de la ficha, y la ruta de lectura de publicación por plataforma ordena el resto de términos.
Sinónimos
- English
- Shopify Liquid, Liquid template language
- Español
- lenguaje de plantillas Liquid, Liquid de Shopify
Fuentes
- [1] Shopify.dev. Liquid reference. Consultado el . ↑ ↑
- [2] Shopify, repositorio en GitHub. Shopify/liquid. Consultado el . ↑
- [3] Shopify.dev. Liquid filters: money. Consultado el . ↑
- [4] Shopify.dev. Liquid basics. Consultado el . ↑ ↑ ↑
- [5] Shopify.dev. Theme architecture. Consultado el . ↑ ↑
- [6] Shopify.dev. Render essential content server-side. Consultado el . ↑
- [7] Shopify.dev. Liquid filters: structured_data. Consultado el . ↑
- [8] BigCommerce Dev Center. Stencil. Consultado el . ↑
Historial de cambios
- Primera versión.
Esta definición se publica bajo licencia CC BY 4.0. Puedes reutilizar esta definición citando a Clione con un enlace a esta página.
Términos relacionados
Metafields
Qué son los metafields de Shopify, de qué partes constan, cómo llegan del panel al HTML de la ficha y cómo comprobar que tu tema los publica.
Metaobjeto de Shopify
Qué es un metaobjeto de Shopify, en qué se diferencia de un metafield, cómo se enlaza a tus productos y cómo comprobar que el tema lo publica en la ficha.
App embed de Shopify
Qué es un app embed de Shopify, en qué se diferencia de un app block, por qué viene desactivado tras instalar la app y cómo comprobar que funciona.
Renderizado del lado del servidor
Qué es el SSR o renderizado del lado del servidor, en qué se diferencia del renderizado en el navegador y por qué decide qué leen Google y los bots de IA.
Renderizado de JavaScript
Qué es el renderizado de JavaScript, cómo lo hace Google en una segunda fase, qué ven los bots de IA que no lo ejecutan y cómo comprobarlo en tu tienda.
Stencil
Qué es Stencil, el motor de temas de BigCommerce: Handlebars en el servidor, Cornerstone, regiones para widgets y su diferencia con Catalyst.
Haz que los bots entiendan tu catálogo
Clione completa cada ficha de producto con lo que los bots leen mejor: el grafo JSON-LD con sus datos estructurados, la meta description y las preguntas frecuentes. Tú revisas y pulsas Push; después comprobamos tu tienda en vivo para que todo siga publicado.