> ## Documentation Index
> Fetch the complete documentation index at: https://docs.riqra.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Viniendo de Shopify

> Compatibilidad del dialecto Liquid de Riqra con Shopify: etiquetas, filtros, objetos y desviaciones deliberadas.

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

| Etiqueta           |
| ------------------ |
| `{% schema %}`     |
| `{% form %}`       |
| `{% paginate %}`   |
| `{% style %}`      |
| `{% stylesheet %}` |
| `{% javascript %}` |
| `{% section %}`    |
| `{% sections %}`   |

### No soportadas

| Etiqueta        | Alternativa                                              |
| --------------- | -------------------------------------------------------- |
| `{% include %}` | usa `{% render %}` (aislado, como Shopify moderno)       |
| `{% layout %}`  | el framework es dueño del documento; no hay theme.liquid |

## Filtros

### Soportados

| Filtro                         |
| ------------------------------ |
| `asset_url`                    |
| `image_url`                    |
| `image_tag`                    |
| `stylesheet_tag`               |
| `script_tag`                   |
| `link_to`                      |
| `handleize`                    |
| `money`                        |
| `money_with_currency`          |
| `money_without_trailing_zeros` |
| `color_darken`                 |
| `color_lighten`                |
| `escape`                       |

### No soportados

| Filtro          | Alternativa                                                 |
| --------------- | ----------------------------------------------------------- |
| `t`             | los temas v1 llevan textos en español inline (sin locales/) |
| `asset_img_url` | usa image\_url sobre un asset del tema                      |

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

## Objetos

### Soportados

| Objeto        |
| ------------- |
| `shop`        |
| `settings`    |
| `cart`        |
| `collections` |
| `linklists`   |
| `request`     |
| `routes`      |
| `template`    |
| `section`     |
| `block`       |
| `product`     |
| `collection`  |
| `search`      |
| `page`        |
| `paginate`    |

### No soportados

| Objeto         | Alternativa                                          |
| -------------- | ---------------------------------------------------- |
| `metafields`   | sin metafields en v1; usa settings del tema          |
| `localization` | temas v1 en español, sin selector de idioma          |
| `customer`     | las páginas de cuenta son del framework, no del tema |
| `selling_plan` | sin planes de venta                                  |

## 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](/temas/anatomia-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](/temas/cart-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](/temas/cart-ajax-y-secciones).
