Tienda, menús y CMS
Lee el snapshot de /v1/settings y el contenido publicado de la tienda.
El root generado carga /v1/settings antes de renderizar. Ese snapshot está
disponible en cada página y layout; no tienes que crear un provider.
Estructura del snapshot
| Campo | Contenido |
|---|---|
schemaVersion | Versión 1 o 2 del contrato. |
generatedAt | Fecha de generación. |
store | Identidad, dominio, moneda, idioma, tema, features y reglas de checkout. |
cms.settings | Branding, SEO, contacto, tracking y scripts. |
cms.pages | Páginas CMS incluidas en el snapshot. |
cms.menus | Menús publicados. |
En una página
settings llega directamente a component:
import { definePage } from "@ecomiq/storefront";
export default definePage({
component: ({ settings }) => (
<section>
<h1>{settings.store.name}</h1>
<p>{settings.store.description}</p>
<p>{settings.store.currency}</p>
</section>
),
});En un componente
Usa useSettings dentro del árbol generado:
import { useSettings } from "@ecomiq/storefront";
export function StoreLogo() {
const settings = useSettings();
const logo = settings.cms.settings.branding.logoUrl ?? settings.store.logo;
return logo ? (
<img src={logo} alt={settings.store.name} />
) : (
<span>{settings.store.name}</span>
);
}Menús
useMenu busca el menú por key, excluye los items con visible: false y los
ordena por order:
import { Link, useMenu } from "@ecomiq/storefront";
export function MainMenu() {
const items = useMenu("main");
return items.map((item) => (
<Link key={item.url} to={item.url}>
{item.label}
</Link>
));
}Páginas CMS
Para buscar una página publicada dentro del snapshot:
import { findStorefrontCmsPageBySlug } from "@ecomiq/storefront";
const page = findStorefrontCmsPageBySlug(settings, "home");Para pedir una página por slug desde Storefront API:
import { serverApi } from "@ecomiq/storefront";
const page = await serverApi.getPageBySlug("about");La ruta reservada /pages/:pageSlug usa getPageBySlug; no depende únicamente
del snapshot.
Config local vs. settings
ecomiq.config.js contiene ajustes operativos. El nombre, SEO, menús, moneda y
reglas comerciales pertenecen a /v1/settings.