Grid Promocional
Una grilla de celdas promocionales. Cada celda es una imagen con textos y un botón opcionales.
| En el panel | tipo en el JSON | Token de la clave |
|---|---|---|
| Grid Promocional | GRID_PROMOCIONAL | grid_promocional |
{ tipo: 'GRID_PROMOCIONAL'; titulo: string | null; items: Array<{ imagen: string; // URL suelta, requerida titulo?: string; subtitulo?: string; texto_boton?: string; url_boton?: string; // solo http/https orden: number; }>;}Ejemplo
Sección titulada «Ejemplo»{ "grid_promocional-home-general-cmr3k81ap0002fg7dq1x8pl4c": { "tipo": "GRID_PROMOCIONAL", "titulo": "Destacados de temporada", "items": [ { "imagen": "https://cdn.example.com/promo-1.jpg", "titulo": "Hasta 30% off", "subtitulo": "Solo esta semana", "texto_boton": "Ver ofertas", "url_boton": "https://mitienda.com/ofertas", "orden": 0 }, { "imagen": "https://cdn.example.com/promo-2.jpg", "orden": 1 } ], "estado": { "lifecycle": "active", "storefrontVisible": true }, "orden": 0 }}La segunda celda es el caso mínimo: solo imagen y orden. Ningún otro campo está presente en el objeto.
Renderizar
Sección titulada «Renderizar»function renderCelda(item) { // No hay alt en el contrato: derivarlo del título, o vacío si es decorativa. const alt = escapar(item.titulo ?? '');
// El botón necesita las dos partes para ser usable. const boton = item.url_boton && item.texto_boton ? `<a class="sectionfy-grid__cta" href="${item.url_boton}">${escapar(item.texto_boton)}</a>` : '';
return `<li class="sectionfy-grid__celda"> <img src="${item.imagen}" alt="${alt}" loading="lazy"> ${item.titulo ? `<h3>${escapar(item.titulo)}</h3>` : ''} ${item.subtitulo ? `<p>${escapar(item.subtitulo)}</p>` : ''} ${boton} </li>`;}- El botón necesita las dos partes.
texto_botonsinurl_boton(o al revés) no alcanza para un CTA usable. url_botonestá restringida ahttpyhttpsen el contrato, así que no recibirásjavascript:nidata:por esa vía.- Está pensada para pocas celdas, pero no asumas una cantidad fija: lee
items.lengthy adapta las columnas.
