En OXID eShop 7, añades el aviso de garantía legal debajo del botón de añadir a la cesta con una extensión de plantilla: en el bloque Twig details_productmain_tobasket del tema APEX, mediante un pequeño módulo o un tema hijo. Una página CMS en el panel no basta, porque el editor elimina los scripts y no hay ningún hueco CMS libre en la página de producto.
El código para OXID eShop
<div data-garantielabel></div>
<script src="https://www.garantielabel.app/widget.js" async></script>Más opciones, como la forma de mostrarlo y el idioma, las ajustas en el generador de código.
Paso a paso en OXID eShop
- Módulo o tema hijo
La extensión va en un pequeño módulo o en un tema hijo (entheme.phpcon'parentTheme' => 'apex') para que las actualizaciones del tema APEX no la sobrescriban. Lo activas en “Extensions” → “Modules” o “Extensions” → “Themes” (Extensiones → Módulos o Temas). Para ello necesitas acceso a los archivos; normalmente se encarga tu agencia. - Amplía el bloque
Amplía la plantillapage/details/inc/productmain.html.twigy pega el código del widget en el bloquedetails_productmain_tobasketdespués de{{ parent() }}. Conparent(), el botón de añadir a la cesta queda sin cambios. - Etiqueta GARAN por producto
Para tus propias etiquetas GARAN, crea dos atributos en “Administer Products” → “Attributes” (Administrar productos → Atributos), por ejemplo “GARAN completa” y “GARAN pequeña”, e introduce en el producto, en “Selection” → “Assign Attributes” (Selección → Asignar atributos), las direcciones de los dos archivos. En la plantilla, muestra los valores endata-garan-vollydata-garan-klein. - Vacía la caché
Vacía la caché de plantillas convendor/bin/oe-console oe:cache:cleary revisa la página de producto, también las variantes.
Los nombres de menú entre comillas son los de la interfaz en inglés; entre paréntesis va nuestra traducción.
En un módulo, el archivo está en views/twig/extensions/themes/apex/page/details/inc/productmain.html.twig y tiene este aspecto:
{% extends 'page/details/inc/productmain.html.twig' %}
{% block details_productmain_tobasket %}
{{ parent() }}
<div data-garantielabel></div>
<script src="https://www.garantielabel.app/widget.js" async></script>
{% endblock %}Lo que conviene saber de OXID eShop
- El editor de páginas CMS elimina
<script>. A partir de OXID 7.5 existe además un HTML sanitizer que elimina los scripts cuando está activado. Por eso el código va en la plantilla. - Por defecto, los atributos asignados también aparecen en la lista de propiedades del producto en la página de detalle. Si hace falta, oculta ahí en la plantilla los dos atributos GARAN.
- OXID 6 con los temas Smarty Flow y Wave: el bloque se llama igual. Los módulos lo enganchan mediante
blocksenmetadata.php; la plantilla espage/details/inc/productmain.tpl.
Dónde va exactamente el aviso en OXID eShop
En la página de producto, el aviso va en el bloque details_productmain_tobasket, como se describe arriba. Cuando el cliente elige otra variante, APEX vuelve a cargar la zona details_container y la sustituye por HTML recién generado. El tema vuelve a ejecutar los scripts que contiene. Así que tu extensión del bloque vuelve a estar en la página también después del cambio de variante.
Para un aviso en todas las páginas, amplía la plantilla layout/footer.html.twig. En el tema APEX contiene, entre otros, el bloque dd_footer_copyright, que muestra el contenido de la página CMS con el ident oxstdfooter. En un módulo, tu archivo está en views/twig/extensions/themes/apex/layout/footer.html.twig:
{% extends 'layout/footer.html.twig' %}
{% block dd_footer_copyright %}
{{ parent() }}
<div data-garantielabel></div>
<script src="https://www.garantielabel.app/widget.js" async></script>
{% endblock %}El texto del pie de página lo sigues gestionando en la página CMS. El marcador de posición, en cambio, va en la plantilla, por el mismo motivo que arriba: el editor elimina los scripts. La plantilla se aplica a todos los idiomas de la tienda. El widget elige el idioma del aviso según el idioma indicado en la página, que APEX fija a partir del idioma activo de la tienda.
Variantes e identificador del modelo para la etiqueta GARAN
En OXID, primero creas un producto padre. Según la documentación de usuario, contiene toda la información básica que heredan las variantes. Las variantes se gestionan en la pestaña «Variants» (nombres de la interfaz en inglés). Allí puedes indicar, entre otras cosas, un número de producto, un precio y un stock distintos de los del producto padre. La descripción larga del producto padre se muestra en todas las variantes, salvo que una variante tenga la suya propia.
El fabricante y la referencia del fabricante (MPN) están en la pestaña «Main». El fabricante lo eliges de una lista que gestionas en «Master Settings ‣ Brands/Manufacturers». Según la documentación, la vista de edición de una variante es casi idéntica a la de un producto normal.
Una etiqueta GARAN corresponde a un identificador del modelo. Si todas las variantes comparten el mismo, basta con la etiqueta en el producto padre. Si las variantes son modelos distintos, cada modelo necesita su propia etiqueta. Después de configurarlo, comprueba en la tienda publicada si tu plantilla muestra, al cambiar de variante, la etiqueta de la variante elegida o la del producto padre.
Errores habituales en OXID eShop
- Caché de plantillas: Según OXID, los cambios en plantillas, configuraciones o módulos a menudo solo se aplican correctamente después de vaciar la caché. Además del comando de consola de arriba, el módulo de OXID Admin Tools vacía la caché de plantillas en «Service ‣ Tools». Esa caché contiene las plantillas Twig compiladas.
- Varnish: Con el proxy inverso Varnish, un servidor aparte guarda las páginas en caché. Para ello, OXID divide las páginas en secciones, los llamados widgets. Comprueba tu cambio solo cuando esta caché también sirva la nueva versión. Normalmente la vacía tu agencia o tu proveedor de hosting.
- Subtiendas: Según la documentación para desarrolladores, activas un módulo para una subtienda con la opción
--shop-id, es decir,vendor/bin/oe-console oe:module:activate <module-id> --shop-id=<shop-id>. Después comprueba cada subtienda por separado. - Contenido CMS por idioma: Según la documentación, las páginas CMS se gestionan por separado para cada idioma, con el selector de idioma. Una extensión de plantilla, en cambio, solo hace falta una vez.
Más fuentes
- Documentación de usuario de OXID: productos, pestaña Variants (en inglés)
- Documentación de usuario de OXID: productos, pestaña Main (en inglés)
- OXID Admin Tools: vaciar la caché (en inglés)
- Documentación de usuario de OXID: proxy inverso Varnish (en inglés)
- Documentación para desarrolladores de OXID: activar un módulo, también para subtiendas (en inglés)
- Tema APEX en GitHub: plantilla del pie de página
- Tema APEX en GitHub: script de selección de variantes
Aviso de garantía legal en la confirmación de pedido
Según las directrices de la Comisión, el aviso también debería aparecer en el correo de confirmación. La confirmación de pedido usa la página CMS con el ident oxuserorderemail, que editas en “Customer Info” → “CMS Pages” (Información al cliente → Páginas CMS). En los correos no se ejecuta JavaScript, así que añade ahí el gráfico oficial como imagen. Es poco probable que un simple enlace cuente como soporte duradero (TJUE, asunto C-49/11, Content Services); lo más seguro es poner el aviso directamente en el correo como imagen, texto o adjunto. Encontrarás los archivos oficiales en nuestra página de descargas.
Fuentes
- Documentación para desarrolladores de OXID: ampliar un bloque de un tema activo (en inglés)
- Documentación para desarrolladores de OXID: crear un tema hijo (en inglés)
- Documentación para desarrolladores de OXID: HTML sanitizer (7.5) (en inglés)
- Documentación de usuario de OXID: productos, pestaña Selection (en inglés)
- Documentación de usuario de OXID: páginas CMS (en inglés)
- Tema APEX en GitHub (plantilla de la página de producto) (en inglés)
¿Garantía del productor? Entonces añade la etiqueta GARAN
Si el productor da gratis una garantía comercial de durabilidad de más de dos años que cubre la totalidad del bien, la etiqueta GARAN también va en la página de producto. Con el generador de etiquetas GARAN la creas en segundos a partir de los años, la marca y el modelo; tus primeras 3 etiquetas son gratis y sin registro. Debajo de cada etiqueta terminada recibes un código para insertar con direcciones de imagen permanentes: no subes nada y lo pegas en OXID eShop como se muestra arriba.
¿Prefieres tus propios archivos? Sube la versión completa y la anidada a la biblioteca de medios de OXID eShop e introduce las direcciones en el código del widget:
<div data-garantielabel
data-garan-voll="https://…/GARAN-MX-500.svg"
data-garan-klein="https://…/GARAN-MX-500-anidada.svg"></div>El widget muestra entonces la versión anidada debajo del aviso de garantía legal, y un clic abre la etiqueta GARAN completa.
Preguntas frecuentes
¿Puedo pegar el código sin más en una página CMS?
No de forma fiable. El editor elimina el script y no hay ningún hueco estándar en la página de producto donde aparezca automáticamente una página CMS. Una pequeña extensión de plantilla es el camino seguro.
¿Tengo que cambiar el propio tema APEX?
No. Basta con un módulo o tema hijo con {{ parent() }}. El tema original sigue pudiendo actualizarse y el botón de compra queda como está.
¿Dónde introduzco la etiqueta GARAN por producto?
Por ejemplo, como valor de atributo en el producto, en “Selection” → “Assign Attributes”. La plantilla lee entonces las direcciones y se las pasa al widget.
¿Cómo muestro el aviso en todas las páginas en OXID eShop?
En tu módulo o tema hijo, amplía la plantilla layout/footer.html.twig, en el tema APEX por ejemplo el bloque dd_footer_copyright. Pega ahí el código del widget después de {{ parent() }}.
¿El aviso se mantiene al cambiar de variante?
Sí, si está en el bloque details_productmain_tobasket. Al cambiar de variante, APEX vuelve a cargar toda la zona de detalles, incluida tu extensión del bloque, y vuelve a ejecutar los scripts que contiene.
¿Tengo que activar el módulo en cada subtienda?
Según la documentación para desarrolladores, lo activas para una subtienda con la opción --shop-id. Después comprueba cada subtienda en la tienda publicada.