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.
  • quantity_rule con la forma de Shopify, sin quantity_price_breaks. variant.quantity_rule e item.quantity_rule (línea de carrito) traen { min, max, increment }; max es null cuando no hay tope. En la tarjeta, product.quantity_rule solo existe cuando el producto tiene una sola variante; con varias es nil y la regla se lee en la PDP. Sin regla, los tres valores son 1, null, 1. El carrito ajusta cada escritura a la regla, así que un stepper que no la lea igual termina en un múltiplo válido; leerla evita que el cliente muestre una cantidad distinta a la que quedó guardada. item.quantity_rule_valid es false cuando un cambio de regla dejó la línea fuera de ella; el checkout la rechaza hasta que el comprador la corrija. Ver Carrito AJAX y secciones.
  • Cada variante tiene su propia galería. product.images trae solo las imágenes del producto; las de las variantes no se suman. variant.images y variant.featured_image traen las imágenes de la variante o, si no tiene, las del producto. Al elegir una variante, el tema puede reemplazar la galería por variant.images sin más comprobaciones.
  • {% 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.