Skip to main content
El dialecto Liquid de Riqra es deliberadamente literal a Shopify OS 2.0: los nombres de etiquetas, filtros, objetos y tipos de setting se conservan para que tu conocimiento de Shopify aplique 1:1. Las tablas de esta página se generan desde el registro del dialecto — la misma fuente contra la que se valida cada subida de tema — así que no pueden desviarse del runtime. Todo el núcleo de Liquid viene incluido y no se lista aquí: control de flujo (if, unless, case, for), assign, capture, liquid, echo, raw, comment, cycle, tablerow, increment/decrement, render, y los filtros estándar de texto, arreglos, números, date y json.

Etiquetas

Soportadas

No soportadas

Filtros

Soportados

No soportados

No hay filtros de expresiones regulares. Para transformar texto usa los filtros estándar de Liquid (replace, split, slice, downcase, handleize, …).

Objetos

Soportados

No soportados

Desviaciones de comportamiento

Diferencias deliberadas frente a Shopify que afectan cómo escribes el tema:
  • Sin layout/theme.liquid. El framework es dueño del documento HTML y enlaza automáticamente assets/theme.css y assets/theme.js. Un tema es secciones + snippets + plantillas + config + assets. Ver Anatomía de un tema.
  • Sin locales/ ni filtro t. Los textos van en español, inline en el Liquid (v1).
  • Sin versionado de temas ni migraciones. Re-subir actualiza el tema en su lugar; un rediseño incompatible se entrega como un tema nuevo.
  • Las plantillas subidas son defaults. La personalización del comerciante vive en la base de datos y siempre gana; una re-subida nunca la pisa (a diferencia del write-back de Shopify).
  • Wrapper y eventos propios. Cada sección se envuelve en <div id="riqra-section-{id}"> (no shopify-section-…). El evento de refresco de sección es riqra:section:load y el de cambios de carrito es riqra:cart-changed. Ver Carrito AJAX y secciones.
  • {% paginate %} es por cursor. No hay páginas numeradas: el drop paginate expone next y previous, nada más.
  • El dinero es centavos enteros. Todo precio en los drops (product.price, cart.total_price, …) es un entero en centavos; | money lo formatea con la moneda de la tienda.
  • request.query no está expuesto. Reconstruye los query strings desde los drops de filtros y orden (collection.filters[*].values[*].url, collection.sort_options[*].url), que ya traen la URL correcta con la paginación reseteada.
  • Los badges de descuento se derivan. No hay objeto de promociones en el catálogo: un producto está en oferta cuando compare_at_price > price.
  • {% form %} no acepta atributos. Emite el <form> fijo para product, cart o search; no hay parámetro class ni atributos extra. Estiliza un contenedor propio alrededor.
  • No nombres un argumento de {% render %} como una clave global o meta-propiedad. {% render 'card', size: 3 %} colisiona con la meta-propiedad .size de Liquid; settings, cart, shop, etc. colisionan con los globals. Usa nombres propios (items_per_row, card_size).
  • Endpoints AJAX propios (forma Shopify). GET /cart.js, POST /cart/{add,change,update,clear}.js (con parámetro sections opcional para re-renderizar secciones en la misma respuesta), POST /cart/add como fallback sin JavaScript, GET /products/{handle}.js y GET /api/sections?path=&sections=. Ver Carrito AJAX y secciones.