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áticamenteassets/theme.cssyassets/theme.js. Un tema es secciones + snippets + plantillas + config + assets. Ver Anatomía de un tema. - Sin
locales/ni filtrot. 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}">(noshopify-section-…). El evento de refresco de sección esriqra:section:loady el de cambios de carrito esriqra:cart-changed. Ver Carrito AJAX y secciones. {% paginate %}es por cursor. No hay páginas numeradas: el droppaginateexponenextyprevious, nada más.- El dinero es centavos enteros. Todo precio en los drops (
product.price,cart.total_price, …) es un entero en centavos;| moneylo formatea con la moneda de la tienda. request.queryno 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 paraproduct,cartosearch; no hay parámetroclassni 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.sizede 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ámetrosectionsopcional para re-renderizar secciones en la misma respuesta),POST /cart/addcomo fallback sin JavaScript,GET /products/{handle}.jsyGET /api/sections?path=§ions=. Ver Carrito AJAX y secciones.