SW Shopware 6 Intermedio

DfPreorder SW — Guía completa

Instalar, configurar y explotar DfPreorder SW: lista de espera de reposición con doble opt-in RGPD, detección de reposición en tiempo real + barrido programado, correos multilingües y modalidad de reserva para Shopware 6.5, 6.6 y 6.7.

Actualizado Versión del módulo 1.0.0

Shopware no incluye ninguna función nativa de «avísame cuando vuelva a estar disponible». DfPreorder SW cubre esa carencia: en cada ficha de producto agotado aparece automáticamente un formulario de suscripción, y el cliente recibe un aviso por correo —en su propio idioma— en cuanto el producto vuelve. El plugin añade además una modalidad de reserva ligera (insignia y fecha de envío prevista) y un módulo de administración para seguir las suscripciones. Un único ZIP se instala en Shopware 6.5, 6.6 y 6.7. Esta guía cubre la instalación, la compilación de assets, el worker y la tarea programada, la configuración, el uso en el storefront, la modalidad de reserva, los correos, la Store API, la conformidad con el RGPD y la resolución de problemas.

Compatible con Shopware 6.5.x, 6.6.x y 6.7.x sobre un único código base. No añade ninguna dependencia de Composer. A diferencia de algunos plugins entregados con un dist precompilado, DfPreorder incluye las fuentes JavaScript: tras la instalación es necesaria una compilación del storefront y de la administración (ver abajo).

Cómo funciona la detección de la reposición

DfPreorder detecta las reposiciones de dos formas complementarias, que convergen en una misma rutina idempotente — así tus clientes reciben siempre el aviso, nunca dos veces:

  • En tiempo real: un suscriptor escucha la escritura de los productos y reacciona en cuanto cambia el stock o el stock disponible.
  • Barrido programado: una tarea programada se ejecuta cada 15 minutos y recupera las actualizaciones de stock hechas por SQL directo — normalmente el decremento del stock disponible al realizar un pedido, o una importación ERP, que no disparan un evento de la aplicación.

El formulario de lista de espera aparece en una ficha de producto cuando se cumplen dos condiciones: el producto está en modo closeout y su stock disponible ha caído a cero.

Instalación

  1. Descarga el archivo DfPreorder-v1.0.0.zip desde tu cuenta DataFirefly.
  2. Copia la carpeta descomprimida DfPreorder en custom/plugins/, o instala el ZIP en Administración → Extensiones → Mis extensiones → Cargar extensión.
  3. Instala y activa el plugin:
    bin/console plugin:refresh
    bin/console plugin:install --activate DfPreorder
  4. Compila los assets del storefront y de la administración (paso imprescindible — no se entrega ningún dist):
    ./bin/build-storefront.sh
    ./bin/build-administration.sh
  5. Vacía la caché:
    bin/console cache:clear

En la instalación, el plugin crea la tabla df_stock_notification, el conjunto de campos personalizados df_preorder en la entidad producto, dos plantillas de correo y la tarea programada. Al desinstalar sin conservar los datos, todo se elimina.

Worker y tarea programada

Para que los correos salgan realmente, dos mecanismos deben estar en ejecución — normalmente ya es el caso en producción mediante el admin-worker, systemd o cron:

  • El worker de Messenger, que consume el mensaje asíncrono de reposición y envía los correos;
  • El planificador de tareas, que dispara el barrido de seguridad cada 15 minutos.
bin/console messenger:consume async --time-limit=60
bin/console scheduled-task:run

Si ni el worker ni el planificador están en ejecución, las suscripciones se registran pero no se envía ningún correo. Esta es la causa número uno de «el plugin no avisa a nadie». Comprueba el estado del admin-worker en Ajustes → Sistema → Cola de mensajes y las tareas programadas en Ajustes → Sistema → Tareas programadas.

Configuración

Abre Extensiones → Mis extensiones → DataFirefly Reserva y Lista de espera → ⋯ → Configurar. Todas las opciones pueden ajustarse por canal de venta mediante el selector nativo en la parte superior de la página.

  • Activar lista de espera: interruptor principal. Muestra el formulario en las fichas agotadas.
  • Doble opt-in: exige una confirmación por correo antes de activar la suscripción (recomendado para el RGPD). Desactivado por defecto.
  • Permitir invitados: si se desactiva, solo los clientes registrados pueden suscribirse.
  • Eliminar la entrada tras la notificación: minimización de datos — la dirección de correo se borra una vez enviado el aviso. Si se desactiva, la entrada se conserva con estado «notificado».
  • Notificaciones por lote: número máximo de correos enviados por ejecución (worker o barrido). 100 por defecto.
  • Mostrar insignia de reserva: activa la insignia y la fecha de envío en los productos configurados para reserva.

La lista de espera en el storefront

Cuando un producto está agotado (closeout + stock disponible a cero), el formulario «Avísame cuando vuelva a estar disponible» aparece automáticamente bajo el botón de compra. El cliente introduce su correo (precargado si está conectado) y confirma.

  • El envío se realiza mediante AJAX con una alternativa completa sin JavaScript (mensaje flash + redirección).
  • Un campo honeypot invisible filtra los robots.
  • Si el doble opt-in está activado, se envía un correo de confirmación; la suscripción solo se activa tras hacer clic en el enlace de confirmación.
  • Cada correo puede incluir un enlace de baja en un clic.

El formulario se renderiza en una plantilla sobreescribible: views/storefront/component/df-waitlist/waitlist-form.html.twig, inyectada mediante el buy widget. Sobreescríbela en tu tema para cambiar su aspecto o su ubicación.

Modalidad de reserva

El plugin crea un grupo de campos personalizados Reserva en la entidad producto. Abre un producto en Catálogos → Productos, pestaña Especificaciones → Campos personalizados, grupo Reserva:

  • Activar reserva: interruptor de activación para este producto.
  • Fecha de envío prevista: la fecha mostrada en la insignia.
  • Nota de reserva: texto libre mostrado bajo la insignia.

Cuando la reserva está activada y la insignia está permitida en la configuración, aparece una insignia ámbar encima del botón de compra con la fecha de envío prevista. El renderizado está aislado en la plantilla del buy widget y sigue siendo sobreescribible.

Correos y traducciones

Se crean dos plantillas de correo en la instalación, traducidas a cinco idiomas — francés, inglés, alemán, español e italiano:

  • Reposición (df_preorder.back_in_stock): variables productName, productUrl y el objeto product completo.
  • Confirmación de suscripción (df_preorder.double_opt_in): añade la variable confirmUrl.

Cada cliente recibe el aviso en el idioma de la tienda en el momento de su suscripción: el plugin reconstruye un contexto de idioma propio del suscriptor para resolver el nombre del producto traducido y la plantilla correcta. La URL del producto se resuelve mediante la URL SEO canónica del canal y el idioma correspondientes.

Las plantillas siguen siendo totalmente editables en Ajustes → Correos → Plantillas de correo. Busca «back in stock» o «reposición» para encontrarlas.

Módulo de administración

El menú Marketing → Lista de espera y Reserva enumera todas las suscripciones: dirección de correo, producto, estado (pendiente / confirmado / notificado), fecha de suscripción y fecha de notificación. La eliminación en masa está disponible, útil para purgar manualmente suscripciones antiguas.

Store API (headless / móvil)

Para tiendas headless o apps móviles, un endpoint Store API permite suscribir a un cliente a la lista de espera:

POST /store-api/df-waitlist/subscribe
Content-Type: application/json
sw-access-key: <tu-clave-de-acceso>

{
  "productId": "0189a1b2c3d4...",
  "email": "cliente@example.com"
}

Una solicitud válida devuelve una respuesta de éxito; un identificador de producto o un correo no válidos devuelven un error 400. Se aplican las mismas reglas de configuración (doble opt-in, permiso de invitados, etc.).

Conformidad con el RGPD

  • Las direcciones de correo se recogen únicamente para la notificación solicitada.
  • El doble opt-in opcional registra un consentimiento explícito.
  • El comportamiento por defecto elimina el dato personal en cuanto se envía el aviso.
  • Puede insertarse un enlace de baja en un clic en las plantillas de correo.
  • La desinstalación con eliminación de datos borra la tabla, las plantillas, los campos personalizados y la configuración.

Compatibilidad 6.5 → 6.7 y resolución de problemas

El formulario no aparece en un producto agotado. Comprueba que «Activar lista de espera» está marcado para el canal de venta correcto, que el producto está en modo closeout y que su stock disponible es cero. Vacía la caché tras cualquier cambio de configuración.

Las suscripciones se registran pero no sale ningún correo. El worker de Messenger y/o el planificador no están en ejecución. Lánzalos manualmente para probar (ver la sección Worker), y luego asegúrate de que se ejecutan de forma continua en producción.

Error del servicio de correo al activar en Shopware 6.7. La clase de servicio de correo abstracta se sustituyó por una clase concreta en 6.7. El plugin gestiona esta diferencia automáticamente mediante un compiler pass que crea el alias adecuado; un simple cache:clear recompila el contenedor si el error persiste tras una actualización.

El correo sale en el idioma equivocado. El idioma usado es el del canal de venta en el momento de la suscripción. Comprueba que el canal correspondiente tiene el idioma esperado y que la plantilla de correo dispone de una traducción para él.

Los correos parecen enviarse dos veces. No debería ocurrir: el procesamiento es idempotente y marca (o elimina) cada entrada tras el envío. Si lo observas, comprueba que no estás ejecutando varios workers concurrentes sin la configuración de transporte adecuada.

¿Qué ocurre al desinstalar? Con la opción de eliminación de datos, la tabla df_stock_notification, las dos plantillas de correo, el conjunto de campos df_preorder, la tarea programada y la configuración se eliminan. Sin ella, todo se conserva para una reinstalación posterior.

¿Te ha resultado útil esta página?

¿Sigues atascado? Contacta con soporte