Enlace alternativo cuando el FAB está desactivado
Si desactivas el botón flotante de Consentiam, tu sitio debe ofrecer un enlace alternativo para que los visitantes puedan cambiar sus preferencias de cookies en cualquier momento.
Por qué es obligatorio
El GDPR Art. 7(3) establece que el usuario debe poder retirar su consentimiento en cualquier momento, de forma tan sencilla como lo dio. El botón flotante (FAB) es el mecanismo principal que ofrece Consentiam para esto.
Cuando el FAB se desactiva desde el dashboard (floatingButton.enabled = false), tu sitio debe incluir un enlace alternativo para no incumplir la normativa.
Ubicación recomendada: footer del sitio, junto a "Política de Privacidad" y "Aviso Legal". Debe ser visible sin scroll excesivo.
Dos patrones de implementación
Hay dos formas de implementar el enlace. Elige según el tipo de sitio:
Patrón A: HTML directo con onclick
Usar cuando: tienes acceso directo al HTML del sitio, sin pasar por un editor WYSIWYG que sanitice atributos.
<a href="#" onclick="event.preventDefault();window.__TI_OPEN_PREFS__&&window.__TI_OPEN_PREFS__()">
Configurar cookies
</a>| Parte | Función |
|---|---|
event.preventDefault() | Evita la navegación a # |
window.__TI_OPEN_PREFS__ | Función global de Consentiam (siempre disponible) |
&& | Guard: solo ejecuta si la función existe |
() | Carga el panel de preferencias y lo abre |
Patrón B: href + listener separado (CMS universal)
Usar cuando: trabajas con un CMS cuyo editor sanitiza atributos onclick (PrestaShop, Shopify, Wix, Squarespace, etc.).
Paso 1 — Enlace HTML (en el editor del CMS, footer, o página de cookies):
<a href="#open-cookie-prefs">Configurar cookies</a>Paso 2 — Script listener (en el archivo del tema, fuera del editor WYSIWYG):
<script>
document.addEventListener('DOMContentLoaded', function() {
document.querySelectorAll('a[href="#open-cookie-prefs"]').forEach(function(btn) {
btn.addEventListener('click', function(e) {
e.preventDefault();
if (window.__TI_OPEN_PREFS__) {
window.__TI_OPEN_PREFS__();
}
});
});
});
</script>Por qué funciona en todos los CMS:
- Ningún editor sanitiza un
href="#algo"(es HTML estándar) - El JavaScript va en el archivo del tema, fuera del editor WYSIWYG
- El selector
a[href="#open-cookie-prefs"]es independiente del idioma querySelectorAllcaptura múltiples enlaces (footer + página de cookies)
Compatibilidad por plataforma
| Plataforma | Patrón A (onclick) | Patrón B (href + listener) | Notas |
|---|---|---|---|
| HTML estático | ✓ Funciona | ✓ Funciona | Usar Patrón A por simplicidad |
| WordPress (HTML block) | ✓ Funciona | ✓ Funciona | El plugin de WP ya gestiona el FAB |
| WordPress (Gutenberg) | ⚠ Puede sanitizar | ✓ Funciona | Usar Patrón B si onclick da problemas |
| PrestaShop | ✗ TinyMCE sanitiza && | ✓ Funciona | Ver sección PrestaShop abajo |
| Shopify | ✗ Elimina onclick | ✓ Funciona | Script en theme.liquid |
| Wix | ✗ No permite onclick | ✓ Funciona | Script en "Custom Code" del tema |
| Squarespace | ✗ No permite onclick | ✓ Funciona | Script en "Code Injection" |
| Magento | ⚠ Depende del tema | ✓ Funciona | Script en default_head_blocks.xml |
Dónde NO pegar el JavaScript del Paso 2
El JavaScript del Patrón B (Paso 2) cambia según el archivo de destino. Pegarlo en el sitio equivocado rompe el listener silenciosamente:
| Dónde pegas el código | ¿Lleva <script>? | Notas |
|---|---|---|
footer.tpl (PrestaShop/Smarty) | SÍ + {literal}...{/literal} | El bloque {literal} es obligatorio para Smarty |
footer.php (WordPress/custom) | SÍ | Sintaxis HTML normal |
theme.liquid (Shopify) | SÍ | Antes del cierre </body> |
| Módulo "Custom JS" del CMS | NO — solo el JS puro | El módulo ya envuelve en <script> por su cuenta |
Archivo .js propio del tema | NO — solo el JS puro | Es un fichero JavaScript, no HTML |
Error típico que rompe el listener
Si pegas el código con las etiquetas <script> y los comentarios <!-- --> dentro de un archivo .js, el navegador lanza:
Uncaught SyntaxError: Unexpected token '<'El navegador descarta el archivo entero y el clic en el enlace deja de funcionar. El síntoma exterior: el href="#open-cookie-prefs" solo cambia la URL pero no abre el modal.
Cuidado con el nombre __TI_OPEN_PREFS__
El identificador correcto es __TI_OPEN_PREFS__ con dos guiones bajos delante y dos guiones bajos detrás (cuatro en total).
Algunos editores (autocompletado, linters, "correctores") recortan los guiones a uno o cero. Variantes incorrectas que no funcionan:
_TI_OPEN_PREFS_— un guion delante, uno detrás_TI_OPEN_PREFS— un guion delante, ninguno detrásTI_OPEN_PREFS_— ninguno delante, uno detrásTI_OPEN_PREFS— sin guiones
Si tu editor cambia los nombres, escríbelos a mano.
Caso específico: PrestaShop multidioma
PrestaShop tiene restricciones específicas que obligan a usar el Patrón B:
| Restricción | Detalle |
|---|---|
TinyMCE sanitiza onclick | Convierte && en &&, generando error de validación al guardar |
ps_customtext no permite <script> | El módulo "Bloque de texto personalizado" bloquea etiquetas script por seguridad |
Smarty interpreta { como código | Sin {literal}, el motor de plantillas intenta interpretar el JS como Smarty |
Implementación recomendada
1. Script en el footer del tema
Archivo: /themes/[nombre-tema]/templates/_partials/footer.tpl
Justo antes del cierre </footer>, después del último bloque {/literal} existente:
{* Consentiam - Abre el panel de preferencias de cookies *}
{literal}
<script>
document.addEventListener('DOMContentLoaded', function() {
document.querySelectorAll('a[href="#open-cookie-prefs"]').forEach(function(btn) {
btn.addEventListener('click', function(e) {
e.preventDefault();
if (window.__TI_OPEN_PREFS__) {
window.__TI_OPEN_PREFS__();
}
});
});
});
</script>
{/literal}2. Enlace en el módulo Custom Links del footer
Módulo: stmultilink (Custom Links de SUNNYTOO) u otro de gestión de enlaces del footer. Configuración del link item:
- Link:
#open-cookie-prefs(siempre igual, independiente del idioma) - Label ES: MODIFICAR CONSENTIMIENTO
- Label EN: MANAGE COOKIE PREFERENCES
- Label FR: MODIFIER LES PRÉFÉRENCES
- Status: Enabled
Importante: NO uses módulos tipo "Custom JS" (classy_custom_js_cs, ets_blockcustom_js, etc.) para pegar el bloque completo con <script>. Esos módulos sirven archivos .js puros y rechazan el HTML. Si insistes, pega solo el JavaScript del Patrón B (sin etiquetas <script>).
Verificación con DevTools
Si tras pegar el script el enlace sigue sin funcionar, abre DevTools (F12) y:
1. Consola — busca errores rojos
| Si ves | Significa |
|---|---|
Uncaught SyntaxError: Unexpected token '<' | Pegaste HTML dentro de un archivo .js. Quita <script>, </script> y comentarios <!-- --> |
window.__TI_OPEN_PREFS__ is not a function | El nombre de la función está mal escrito. Debe ser __TI_OPEN_PREFS__ (4 guiones bajos: 2 delante + 2 detrás) |
| Ningún error pero el clic no abre nada | El listener no se registra. Verifica que el archivo del tema se carga (DevTools → Network) |
2. Llamada manual desde la consola
Escribe en la consola y pulsa Enter:
window.__TI_OPEN_PREFS__()- Si abre el panel de preferencias: el banner funciona, el problema está en tu script o el enlace.
- Si da error
is not a function: el banner Consentiam no se ha cargado, revisa el snippet de instalación.
3. Inspecciona el enlace
En DevTools → Elements, busca tu <a href="#open-cookie-prefs">. Comprueba que no tiene onclick propio que pueda estar interfiriendo:
<a href="#open-cookie-prefs">MODIFICAR CONSENTIMIENTO</a>Documentación relacionada
- Cumplimiento GDPR — requisitos legales y cómo Consentiam te ayuda a cumplirlos
- Instalación en WordPress — guía paso a paso del plugin oficial
- Volver al índice de documentación
