Saltar al contenido principal

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>
ParteFunció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
  • querySelectorAll captura múltiples enlaces (footer + página de cookies)

Compatibilidad por plataforma

PlataformaPatrón A (onclick)Patrón B (href + listener)Notas
HTML estático✓ Funciona✓ FuncionaUsar Patrón A por simplicidad
WordPress (HTML block)✓ Funciona✓ FuncionaEl plugin de WP ya gestiona el FAB
WordPress (Gutenberg)⚠ Puede sanitizar✓ FuncionaUsar Patrón B si onclick da problemas
PrestaShop✗ TinyMCE sanitiza &&✓ FuncionaVer sección PrestaShop abajo
Shopify✗ Elimina onclick✓ FuncionaScript en theme.liquid
Wix✗ No permite onclick✓ FuncionaScript en "Custom Code" del tema
Squarespace✗ No permite onclick✓ FuncionaScript en "Code Injection"
Magento⚠ Depende del tema✓ FuncionaScript 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)Sintaxis HTML normal
theme.liquid (Shopify)Antes del cierre </body>
Módulo "Custom JS" del CMSNO — solo el JS puroEl módulo ya envuelve en <script> por su cuenta
Archivo .js propio del temaNO — solo el JS puroEs 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ás
  • TI_OPEN_PREFS_ — ninguno delante, uno detrás
  • TI_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ónDetalle
TinyMCE sanitiza onclickConvierte && 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ódigoSin {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 vesSignifica
Uncaught SyntaxError: Unexpected token '<'Pegaste HTML dentro de un archivo .js. Quita <script>, </script> y comentarios <!-- -->
window.__TI_OPEN_PREFS__ is not a functionEl 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 nadaEl 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

Enlace alternativo cuando el FAB está desactivado | Documentación | Consentiam | Consentiam