Module Product FAQs
987 respuestasPreguntas
El módulo solo se renderiza cuando la tienda no está en modo catálogo y cuando PrestaShop devuelve más de una moneda activa. Si solo hay una moneda activa, el hook no devuelve nada, por lo que no se muestra ningún selector. La ubicación también depende de que el tema renderice el hook displayNav2 en el header o área de navegación.
Sí. El módulo está diseñado para PrestaShop 1.7.7 y versiones posteriores y funciona en 1.7.x, 8.x y 9.x con PHP 7.1 o superior. Se registra en los hooks de la página de inicio (displayHome / displayHomeIntro) y también puede insertarse como widget, por lo que funciona en los temas compatibles sin cambios en el núcleo.
Sí. El módulo registra su propio selector en el hook displayNav2 y carga una hoja de estilos que oculta el selector de moneda nativo de escritorio de PrestaShop con #_desktop_ps_currencyselector { display: none !important; }. El cliente ve el desplegable compacto de símbolo del módulo en lugar del bloque de moneda predeterminado.
No desinstala ni edita el módulo nativo de moneda de PrestaShop. Simplemente renderiza un desplegable de reemplazo en el hook de cabecera/navegación y oculta el bloque de escritorio estándar con CSS. Eso hace el cambio reversible: desactiva o desinstala el módulo y el selector nativo puede volver a mostrarse, suponiendo que el tema todavía lo renderice.
El reemplazo usa el símbolo de la moneda actual en el toggle, opcionalmente muestra la etiqueta ISO junto a él y lista monedas activas en el desplegable. Los valores predeterminados son SHOW_LABEL=0 y SHOW_NAMES=1, así que el toggle se mantiene compacto mientras el desplegable sigue mostrando nombres completos de moneda. Cada opción es un enlace nofollow construido con los parámetros normales de cambio de moneda de PrestaShop.
La colocación sigue dependiendo del tema. Si el tema no llama a displayNav2 en el área de cabecera o navegación, el módulo no tiene dónde renderizar el selector aunque los assets se carguen.
Añade el Messenger oficial de Intercom a tu tienda PrestaShop. El módulo inserta el cargador de Intercom justo antes de la etiqueta body de cierre en cada página, de modo que solo pegas tu App ID de Intercom una vez en lugar de editar plantillas del tema. El widget se carga exactamente como el fragmento de instalación de Intercom, manteniendo plenamente operativos tu bandeja de entrada, los tours de producto y los mensajes automáticos.
El módulo crea eventos GA4 a partir de acciones reales de PrestaShop en lugar de una etiqueta genérica de página vista. Registra vistas de producto, añadir al carrito y cambios de cantidad, el inicio del pago, compras completadas, búsquedas en el sitio, inicios de sesión y creación de cuentas, cada uno enviado con los parámetros de comercio electrónico de GA4 correspondientes. Un generador de eventos integrado también permite definir eventos personalizados.
El módulo solo renderiza cuando la tienda no está en modo catálogo y cuando PrestaShop devuelve más de una moneda activa. Si solo hay una moneda activa, el hook no devuelve nada, así que no se muestra selector. La ubicación también depende de que el tema renderice el hook displayNav2 en el área de cabecera o navegación.
Comprueba primero estos puntos:
- Modo catálogo: si el modo catálogo está activado, el selector devuelve intencionadamente una cadena vacía.
- Recuento de monedas: el módulo llama a la lista de monedas activas de PrestaShop y se oculta cuando esa lista contiene una moneda o ninguna.
- Hook del tema: el selector se renderiza solo mediante
displayNav2. Algunos temas personalizados eliminan o mueven ese hook. - CSS del bloque nativo: el módulo oculta
#_desktop_ps_currencyselector. Si solo estás buscando el bloque antiguo, está oculto intencionadamente mientras este módulo está activo.
Si el selector todavía no aparece después de activar varias monedas, inspecciona el código fuente de la página buscando mprcurrency-dropdown. Si ese marcado falta, el hook no se está renderizando o el módulo devolvió salida vacía antes. Si el marcado existe pero no puedes verlo, el problema es CSS del tema o layout de cabecera, no disponibilidad de moneda.
El módulo carga su propio CSS y JavaScript en front office. El JavaScript solo abre y cierra el desplegable; no crea el marcado del selector. Así que un selector ausente casi siempre es modo catálogo, configuración de una sola moneda, falta del hook displayNav2 o estilos del tema ocultando el bloque renderizado.
Inicia sesión en tu cuenta de Intercom en app.intercom.com, abre Ajustes > Instalación > Web y copia el App ID del código de instalación. Pégalo en el campo App ID del módulo y guarda. Mientras no introduzcas un App ID el widget permanece inactivo, de modo que el módulo nunca emite un script roto o vacío en tu tienda.
Sí, cuando lo activas. Si configuras un API Secret de GA4, el módulo puede enviar las compras del lado del servidor mediante el Measurement Protocol como respaldo, de modo que un pedido se registra en GA4 incluso cuando la etiqueta gtag.js del navegador está bloqueada por un bloqueador de anuncios o se pierde en una página fallida. El respaldo solo se ejecuta si lo activas y proporcionas el API Secret.
No. Usa las monedas ya configuradas en PrestaShop y construye enlaces de cambio con SubmitCurrency=1&id_currency=.... No crea monedas, no edita tipos de cambio ni calcula conversiones. La disponibilidad de monedas, tipos y comportamiento de precios siguen gestionados por la configuración de moneda de PrestaShop.
El módulo lee las monedas activas de PrestaShop, encuentra la moneda actual desde el contexto del cliente y renderiza un enlace para cada moneda disponible. Al hacer clic en un enlace, se pide a PrestaShop que cambie la moneda seleccionada por el visitante; después de eso, PrestaShop gestiona conversión de precio, redondeo, visualización de impuestos y formato exactamente como lo haría normalmente.
Usa los propios ajustes de moneda de PrestaShop para cambios operativos: añadir o desactivar monedas, actualizar tipos de cambio, configurar localización y decidir cómo deben mostrarse los precios. Usa este módulo para la presentación del selector en front office: toggle solo con símbolo, código ISO opcional en el toggle, nombres opcionales en el desplegable, estilos conscientes del tema y una huella compacta en cabecera.
Una forma útil de pensarlo es: PrestaShop controla la lógica del dinero; el módulo controla la UI del desplegable. Si falta una moneda en el selector, corrige primero su estado activo/disponible en PrestaShop. Si los valores de conversión son incorrectos, actualiza los tipos de cambio en PrestaShop en lugar de en este módulo.
Sí. Cuando "Pasar datos de usuario" está activado, el módulo envía el correo y el nombre del cliente con sesión iniciada a intercomSettings, de modo que las conversaciones llegan ya identificadas a tu bandeja de Intercom. Los invitados siguen viendo el Messenger, pero de forma anónima: no se envía ningún dato personal de los visitantes sin sesión.
El módulo admite una carga respetuosa con el consentimiento, de modo que el seguimiento tiene en cuenta el estado de consentimiento del visitante, y ofrece un User ID con hash respetuoso con la privacidad en lugar de almacenar identificadores en bruto. El comportamiento del consentimiento depende de las opciones que actives y de la solución de consentimiento externa (por ejemplo, una CMP) que conectes. Sigues siendo responsable de tu propia configuración de privacidad y consentimiento.
Sí. El texto de la diapositiva —título, subtítulo y etiqueta del botón— se almacena por idioma, de modo que cada idioma activo de tu tienda puede mostrar su propia redacción compartiendo el mismo diseño e imágenes. Las traducciones se gestionan directamente en la administración del módulo.
Sí. Puedes elegir si el Messenger se muestra en todas las páginas o solo en algunas, activar o no su aparición en móviles y fijar un retraso en segundos para que el widget cargue un poco después de la página. Así mantienes la tienda rápida y muestras el chat solo donde realmente ayuda a los compradores.
Sí. El módulo incluye exclusión de tráfico por empleado y por dirección IP, de modo que las visitas del personal con sesión iniciada o de las direcciones IP que indiques no se envían a GA4. Así, las pruebas internas y la actividad del back-office quedan fuera de tus informes de analítica.
No. Banner Revolution solo muestra los banners, textos y enlaces de llamada a la acción que configures. No recopila datos personales de los visitantes ni establece cookies de seguimiento, por lo que no tiene impacto propio en el RGPD más allá de las páginas a las que enlaces.
Un panel de diagnóstico en el back-office valida el Measurement ID de GA4 antes de iniciar el seguimiento y comprueba la entrega de eventos, con reintentos para el Measurement Protocol. Un registro de eventos anota los eventos que el módulo ha creado y enviado, de modo que puedes confirmar la llegada de datos a GA4 antes de fiarte de los informes.
El módulo es compatible con PrestaShop de la 1.6 a la 9.x, incluida la 8.x, y funciona con PHP 7.2 y versiones posteriores. Toda la configuración se realiza en el back-office, por lo que no depende de editar las plantillas de tu tema.
No. Nunca edita plantillas ni sobrescribe archivos del tema. Funciona mediante los hooks de presenter de PrestaShop — actionPresentProduct y actionPresentProductListing añaden los datos loading y decoding a los arrays de imágenes que tu tema ya renderiza — y mediante el hook filterHtmlContent para el texto WYSIWYG. Tu tema conserva el control total del marcado; el módulo solo aporta los atributos. Al desinstalarlo, los atributos simplemente dejan de añadirse y nada queda modificado en tu tema.
No. El botón flotante de LINE se añade mediante los hooks de PrestaShop displayBeforeBodyClosingTag y displayHeader, por lo que tus archivos de tema y plantilla nunca se editan ni se sobrescriben. Al desinstalarlo, el botón se retira por completo sin dejar rastro en el tema.
Sí. El módulo no analiza ni reescribe el HTML final renderizado de una página. Enriquece los datos de imagen en la capa del presenter antes de que se ejecute la plantilla y solo procesa determinados campos de contenido WYSIWYG. Como nunca toca la salida de la página, puede funcionar con seguridad junto a la caché de página completa, CCC y CDN — no hay búfer de salida que invalidar, por lo que las páginas en caché siguen siendo válidas.
El widget abre tu enlace de contacto de LINE (https://line.me/ti/p/tu-LINE-ID) en una pestaña nueva para que el visitante inicie una conversación en la app de LINE. No añade ningún mensaje predefinido ni guardado al enlace: simplemente traslada al cliente a LINE.
Sí. Para las imágenes dentro del contenido WYSIWYG, añade la clase CSS de exclusión (por defecto no-autolazy) a la etiqueta img y el módulo la omite. Es la forma recomendada de que tu imagen principal visible al cargar se cargue de inmediato, porque aplicar carga diferida a la imagen visible más grande puede perjudicar el Largest Contentful Paint. Las imágenes data-URI en línea y las que ya tienen un atributo loading también se omiten automáticamente.
Sí. La segmentación por páginas permite mostrar el botón en todas las páginas o limitarlo a algunas, y un interruptor móvil independiente permite ocultarlo en los teléfonos. Una opción de retardo de carga también puede contener el botón un momento para que no compita con la página mientras se carga.
Es una sugerencia para el navegador que permite decodificar una imagen fuera del hilo principal, de modo que decodificar una imagen grande tenga menos probabilidades de bloquear el desplazamiento o la interacción. Complementa a loading="lazy". El módulo lo añade por defecto pero ofrece un único control para desactivarlo si lo prefieres, dejando solo loading="lazy". Los atributos decoding existentes nunca se sobrescriben.
Las imágenes de producto en la página de producto, las imágenes de producto en los listados de categoría y búsqueda, y las imágenes incrustadas en el contenido WYSIWYG como las descripciones de producto, categoría, páginas CMS y fabricante. Las dos primeras se gestionan mediante los hooks de presenter de producto; la última mediante el hook del filtro de contenido. Es una ayuda específica a la velocidad — no comprime, redimensiona ni convierte imágenes, solo añade los atributos loading y decoding.
El toggle cerrado del header siempre muestra el símbolo o signo de la moneda actual, como $, €, £ o el código ISO como fallback. Si Show ISO label in toggle está activado, el toggle también muestra el código ISO actual junto al símbolo. El dropdown abierto siempre lista cada moneda con su símbolo/signo, y si Show currency names in dropdown está activado también muestra el nombre completo de la moneda junto a cada símbolo.
El toggle no renderiza un tooltip al pasar el cursor. Los nombres de moneda se usan en las filas del dropdown, incluido el atributo title del enlace para cada opción de moneda.
Sí. El módulo registra su propio selector en el hook displayNav2 y carga una hoja de estilos que oculta el selector de moneda desktop nativo de PrestaShop con #_desktop_ps_currencyselector { display: none !important; }. El cliente ve el dropdown compacto de símbolos del módulo en lugar del bloque de moneda predeterminado.
Activa el módulo, pega tu ActiveCampaign Account ID y guarda la configuración. El Account ID es el valor numérico que ActiveCampaign muestra en Settings > Tracking > Site Tracking; se almacena como ACCOUNT_ID, y el módulo no renderizará el script del storefront hasta que tanto ENABLED como ACCOUNT_ID estén presentes.
- En PrestaShop, abre la configuración del módulo ActiveCampaign.
- Activa Enable ActiveCampaign.
- Pega el Account ID numérico, por ejemplo
123456789. - Visita una página del storefront y confirma que el código fuente contiene el script diffuser de ActiveCampaign.
Cuando está activo, el hook displayBeforeBodyClosingTag carga el script diffuser de ActiveCampaign, ejecuta vgo('setAccount', ...), activa el tracking predeterminado y llama a vgo('process'). Para clientes con sesión iniciada también puede pasar el email del cliente con vgo('setEmail', ...).
El script se inserta justo antes de la etiqueta de cierre body, no en el head de la página. Eso es útil al comprobar la instalación: busca en el código fuente renderizado cerca del final diffuser-cdn.app-us1.com/diffuser/diffuser.js, vgo('setAccount' y tu account ID. Si faltan, el módulo está desactivado, el Account ID está vacío o el tema no ejecuta el hook displayBeforeBodyClosingTag.
La configuración también tiene un campo opcional EVENT_KEY, pero el hook actual de storefront es solo site tracking. No envía llamadas personalizadas de event tracking de ActiveCampaign desde esta ruta de código del módulo. Úsalo para añadir el snippet oficial de site tracking e identificar clientes con sesión iniciada por email; construye automatización de eventos personalizada por separado si necesitas tracking de eventos más profundo en ActiveCampaign.
Por privacidad, recuerda que esto es un script de tracking. Combínalo con tu configuración de consentimiento si tu tienda requiere consentimiento de marketing o analítica antes de cargar tracking de terceros, porque este módulo no implementa por sí mismo una puerta de consentimiento de cookies.
Sí, los clientes de PrestaShop con sesión iniciada se identifican por email en el script de tracking de ActiveCampaign. El módulo lee el cliente actual desde el contexto de PrestaShop y envía el email solo cuando el cliente ha iniciado sesión; los visitantes anónimos se rastrean sin valor de email.
La comprobación ocurre en el hook de cierre de body del storefront. El tracking se renderiza solo cuando el módulo está activado y existe un ActiveCampaign Account ID. El hook asigna entonces tres valores de plantilla: el account ID, el email del cliente y un booleano que indica si se encontró email.
En la plantilla, vgo('setEmail', ...) está envuelto en una comprobación de sesión iniciada, así que los invitados no reciben una llamada de email vacía. Cada página rastreada sigue definiendo la cuenta, activa el tracking de página predeterminado y llama a vgo('process'). Eso significa que ActiveCampaign puede conectar visitas de página conocidas al email del cliente con sesión iniciada, mientras las visitas de invitados permanecen anónimas hasta que ActiveCampaign pueda identificarlas por otra ruta.
Logged in customer -> setAccount + setTrackByDefault + setEmail + process
Guest visitor -> setAccount + setTrackByDefault + processEl ajuste obligatorio es el ActiveCampaign Account ID, además de que el módulo debe estar activado. El código comprueba ambos antes de renderizar el script del storefront de PrestaShop; el campo Event Key se guarda en configuración, pero la plantilla de tracking actual no lo usa.
Al instalar, ENABLED queda por defecto en 0, ACCOUNT_ID queda por defecto como cadena vacía y EVENT_KEY también como cadena vacía. El aviso de configuración obligatoria solo declara ACCOUNT_ID como requerido, y la comprobación de activación es simplemente activado más account ID no vacío.
La opción admin etiqueta el Account ID como el ID numérico del site tracking de ActiveCampaign, pero este código fuente no aplica un validador numérico antes de renderizar. Para una configuración limpia, copia el account ID exactamente desde los ajustes de site tracking de ActiveCampaign, activa el módulo y luego comprueba el código fuente de la página buscando el script diffuser.js y vgo('setAccount', ...).
ENABLED = 1
ACCOUNT_ID = 123456789
EVENT_KEY = optional, stored but not rendered by tracking.tplNo, este módulo no envía eventos de producto, carrito, pedido ni eventos ecommerce personalizados de ActiveCampaign. Su código PrestaShop solo carga site tracking, define la cuenta, opcionalmente identifica por email a un cliente con sesión iniciada y llama a la función de procesamiento de página de ActiveCampaign.
El ajuste guardado EVENT_KEY se describe como opcional para eventos personalizados, pero la plantilla de storefront nunca lo referencia. No hay llamadas de eventos de compra, carrito, producto o checkout en la plantilla de tracking; las únicas llamadas ActiveCampaign son setAccount, setTrackByDefault, setEmail opcional y process.
Para comerciantes, el resultado práctico es tracking de visitas de página en lugar de tracking ecommerce. Puedes usarlo para que ActiveCampaign vea páginas visitadas rastreadas e identifique clientes con sesión iniciada por email, pero este módulo no envía valor de pedido, IDs de producto, contenido de carrito ni líneas de artículo. Si eso es necesario, requeriría otra integración o nuevo código que realmente se enganche a eventos de producto, carrito y pedido.
Los módulos de PrestaShop necesitan cada uno tareas programadas (feeds, limpiezas, sincronizaciones), pero conectar una línea de cron de servidor separada para cada uno es frágil. Un gestor de cron te da un único endpoint protegido por token que las ejecuta todas. Con Cron Manager, PrestaShop expone una URL como /module/mprcron/cron?token=… (más un punto de entrada cron.php para llamadas CLI o HTTP con opciones de máximo de tareas y contexto) que ejecuta cada tarea registrada por turno. Apunta un solo cron de servidor, o un servicio externo como cron-job.org, a esa URL en el intervalo que elijas, y gestiona programaciones individuales, estado activado/desactivado e historial de ejecuciones desde el back office en lugar de editar crontab. Mantén el token en secreto para que terceros no puedan dispararlo, y empieza con un intervalo de 5-15 minutos según lo sensibles al tiempo que sean tus tareas. El logging centralizado también facilita detectar una tarea fallida.
El comando CLI generado es una línea crontab de una sola línea usando el token compartido, por ejemplo * * * * * php /path/to/modules/mprcron/cron.php --token=TOKEN --max-seconds=300. El punto de entrada requiere token, limita max_tasks entre 1 y 100, limita max_seconds entre 10 y 300, y usa por defecto 20 tareas y 300 segundos. El token compartido se genera como un valor hexadecimal de 64 caracteres y se valida con hash_equals.
Internamente, el paquete compartido posee dos tablas: mpr_cron_task para tareas registradas y mpr_cron_log para historial de ejecución. Cada tarea guarda módulo, clave de tarea, etiqueta, callable o payload, tipo de executor, programación, estado activado, próxima ejecución, contexto, prioridad y timeout. El runner reclama una tarea antes de ejecutarla, registra estados completed, failed, skipped, timeout o crashed, y escribe una fila de log. En modo CLI, cuando el cron.php local soporta tareas aisladas y proc_open está disponible, cada tarea puede ejecutarse en un subproceso para que una tarea fatal no detenga el resto del lote.
Una buena sección FAQ responde preguntas de compradores antes de que escriban y captura tráfico de búsqueda long-tail. Para añadir una a PrestaShop, usa FAQ Manager: crea un hub FAQ público con rutas de categoría, etiqueta, búsqueda y pregunta, muestra una pestaña FAQ de producto mediante displayProductExtraContent y puede mostrar contenido FAQ contextual de categoría como bloque de columna izquierda/sidebar mediante displayLeftColumn. Guardas preguntas, categorías, etiquetas y asignaciones de producto o categoría, así que la misma respuesta puede aparecer en el hub y en cada producto relacionado. Los clientes pueden enviar sus propias preguntas para moderación, y las respuestas comunitarias aprobadas con votos útiles añaden contenido fresco. Para SEO, da a cada pregunta indexable un título y meta description únicos, mantén respuestas realmente útiles en lugar de una línea, y usa FAQ schema solo donde sea preciso y siga siendo útil para tu objetivo de búsqueda/visualización.
En la configuración práctica, empieza en el menú de administración FAQ: crea categorías FAQ y luego añade preguntas con texto de pregunta multilingüe, HTML de respuesta, URL amigable, meta title y meta description. Si la URL amigable se deja vacía, las categorías generan un slug desde el nombre de categoría y las preguntas generan un slug desde el texto de la pregunta. Una pregunta pública es visible solo cuando está activa, su fecha de publicación está vacía o ya ha pasado, y el grupo de clientes actual está permitido. También puedes definir una Answer Reveal Date, que permite que la pregunta exista antes de mostrar la respuesta.
- Usa Categories para hubs FAQ públicos y para mapear categorías FAQ a categorías de PrestaShop donde sean útiles los bloques de contexto en página de categoría.
- Usa Questions para las entradas FAQ reales; asigna productos directamente cuando una pregunta deba aparecer en una pestaña FAQ de producto.
- Usa Tags para mejorar la búsqueda FAQ, páginas de etiqueta y descubrimiento interno.
- Usa Pending Questions y Additional Replies para moderar envíos de visitantes antes de que se vuelvan públicos.
Para páginas de producto, no dependas de mapeos amplios de categoría cuando necesitas una FAQ exacta de producto. La pestaña de producto carga preguntas desde la tabla de asignación directa producto-pregunta y no devuelve nada si no hay pregunta asignada a ese producto. Las preguntas asignadas exactamente a un producto pueden renderizar una respuesta en el HTML inicial de página de producto; las preguntas compartidas entre varios productos se tratan como relacionadas/compartidas y sus respuestas se cargan de forma diferida al abrirse. Esto evita inyectar grandes artículos de troubleshooting en cada página de producto y ayuda a evitar contenido duplicado ruidoso.
Las páginas de categoría no se renderizan como pestaña por este módulo. La integración de categoría es un bloque de columna izquierda/sidebar que carga un conjunto limitado de preguntas para la categoría actual y las enlaza con la experiencia FAQ.
Los controles SEO son deliberadamente granulares. La indexación del hub FAQ está activada por defecto, pero las páginas de categoría, páginas de etiqueta y páginas individuales de pregunta no se indexan salvo que el interruptor global correspondiente esté activado y, para categorías o preguntas, la entidad esté marcada como indexable. Las páginas de búsqueda siempre son noindex. Los campos meta title y meta description recurren al título visible, descripción de categoría o extracto de respuesta cuando se dejan vacíos, y las URLs canonical se construyen desde el slug FAQ localizado, slug de categoría y slug de pregunta.
Schema es un interruptor, no magia automática. El ajuste es SCHEMA_ENABLED y usa por defecto 0; la pista de administración dice que Google deprecó los rich results FAQ en mayo de 2026, así que trátalo como datos estructurados opcionales en lugar de un disparador garantizado de rich results. El manejo de respuestas programadas no es consistente en todas las rutas de schema del código actual: los builders JSON-LD de pregunta y categoría del front comprueban answer_visible, pero la salida QAPage de cabecera a nivel de módulo lee questionData['answer'] directamente, y la ruta de consulta/construcción de schema del hub FAQ no comprueba date_response ni answer_visible. Si usas respuestas retrasadas, mantén schema desactivado o corrige esas rutas antes de confiar en schema para ocultar contenido de respuestas futuras.
El flujo de envíos de visitantes está moderado. Ask a Question está activado por defecto, valida nombre, email y texto de pregunta, limita el texto de pregunta a 5000 caracteres, usa un campo honeypot y guarda el elemento en mprfaq_pending con estado pending. El límite de frecuencia predeterminado es ASK_MAX_PENDING=2 preguntas pendientes por email y categoría de producto de nivel superior; establécelo en 0 solo si quieres deliberadamente no tener límite de preguntas pendientes. Si el visitante pregunta desde una página de producto y no se proporciona categoría FAQ, el controlador resuelve una categoría desde el contexto del producto.
Las respuestas públicas son independientes de la respuesta oficial. CA_ENABLED usa por defecto 0; cuando está activado, el módulo puede requerir login, valida detalles del autor, limita el texto de respuesta a 5000 caracteres y guarda la respuesta como pending. Las respuestas adicionales aprobadas pueden aparecer como respuestas comunitarias y pueden votarse. Los votos útiles se limitan a un voto por IP por pregunta o respuesta, con una cookie de PrestaShop usada solo para recordar el estado de interfaz del visitante.
FAQ_SLUG=faq
FAQ_HUB_INDEXABLE=1
FAQ_CATEGORY_INDEXABLE=0
FAQ_TAG_INDEXABLE=0
QUESTION_INDEXABLE=0
SCHEMA_ENABLED=0
ASK_ENABLED=1
ASK_MAX_PENDING=2
CA_ENABLED=0Para una FAQ SEO, la regla práctica es mantener el hub amplio, hacer indexables solo páginas sólidas independientes de categoría o pregunta, asignar preguntas de producto directamente y dejar respuestas pequeñas específicas de producto en la pestaña de producto. Así das respuestas a los clientes donde las necesitan mientras mantienes el índice centrado en páginas que pueden sostenerse por sí solas.
Sí, puedes bloquear por IP, rango CIDR, código de país o patrón user-agent, incluido ámbito solo checkout. El gestor de bloqueos de PrestaShop comprueba primero las entradas de whitelist, luego las reglas de bloqueo activas, y aplica ámbito completo, checkout o autenticación según el contexto de la solicitud actual.
El formulario de bloqueo soporta una IP única, IP con comodín como 192.168.1.*, rango IP como 1.1.1.1-1.1.1.255, CIDR como 192.168.1.0/24, un código ISO de país y un patrón user-agent. Las reglas user-agent pueden ser texto plano con coincidencia case-insensitive, o una regex encerrada entre barras.
El ámbito se basa en el controlador actual. El ámbito checkout se aplica a order, orderopc, cart, supercheckout, onepagecheckout y checkout. El ámbito login/auth se aplica a authentication, my-account, identity, registration y password. Los bloqueos completos se comprueban antes que los bloqueos por ámbito, así que un bloqueo completo bloquea al visitante en todas partes.
- Activación:
BAN_ENABLEDse instala activado por defecto. - Bloqueos temporales: un bloqueo puede tener
date_expiry; los bloqueos activos caducados se desactivan durante la carga de bloqueos activos. - Mensaje: cada bloqueo puede tener su propio mensaje; si no, el módulo recurre al mensaje predeterminado multilingüe configurado.
- Multitienda: los registros de bloqueo con
id_shop=0se aplican globalmente, mientras que los bloqueos específicos de tienda solo se aplican en el contexto de la tienda actual.
Checkout-only CIDR example:
ip_cidr = 203.0.113.0/24
ban_type = checkout
reason = Repeated fraudulent checkout attemptsCon el tiempo, una base de datos PrestaShop se llena de datos que ya no necesitas: carritos abandonados, filas huérfanas de carrito, precios específicos y reglas de carrito caducadas, registros antiguos de conexiones e invitados, estadísticas de búsqueda, logs de correo y 404, vistas de página e hilos de cliente cerrados. Si no se controlan, esas tablas ralentizan las consultas y agrandan las copias de seguridad. Para limpiarlas de forma segura, usa Cleanup Revolution: agrupa cada limpieza en tareas con nombre, cuenta las filas afectadas antes de eliminar, soporta vistas previas dry-run por defecto y registra ejecuciones reales de eliminación en el historial de limpieza. Empieza con carritos abandonados de más de 30 días y estadísticas antiguas de búsqueda/conexión, revisa los recuentos de la vista previa y luego elimina por lotes. Haz siempre una copia de seguridad de la base de datos primero. Para mantenimiento continuo, programa las tareas en lugar de ejecutarlas a mano; consulta nuestra guía de rendimiento de PrestaShop.

Before any real cleanup, make a fresh database backup and run the module preview first. Do not delete rows manually with SQL; use Cleanup Revolution's dry-run counts, review the affected tasks, then run the cleanup from the module in controlled batches.
mysqldump -u db_user -p db_name > prestashop-before-cleanup.sqlLa configuración predeterminada es deliberadamente conservadora: dry run está activado por defecto, modo papelera está activado, los carritos abandonados usan 30 días por defecto, muchos logs/estadísticas usan 90 días, los hilos de cliente cerrados usan 180 días, las cuentas vacías usan 365 días, y el motor usa tamaños de lote por tarea más un límite total de 50000. Una tarea sin filas que eliminar se omite en el runner masivo, y la eliminación real ocurre por lotes en lugar de como una sola sentencia enorme.
Hay un detalle de log de auditoría importante: las ejecuciones dry-run devuelven el recuento afectado antes de llamar a MPRCleanupLog::record(), así que las vistas previas dry-run no se escriben en el historial de limpieza. Las limpiezas reales de base de datos se registran con dry_run = 0. Las acciones manuales del Back Office llaman a DatabaseCleanupEngine::executeTask(..., $employeeID) o a DatabaseCleanupEngine::executeAll($dryRun, $employeeID), por lo que usan el valor predeterminado trigger_type = manual y registran el ID del empleado cuando está disponible. La limpieza programada de la base de datos llama a MPRCleanupRevolution::cronDBCleanup(), que pasa DatabaseCleanupEngine::executeAll(false, null, 'cron'); por tanto, esas filas del registro guardan trigger_type = cron sin ID de empleado.
El motor de limpieza de base de datos incluye tareas con nombre para carritos abandonados, productos huérfanos de carrito, estadísticas de búsqueda, precios específicos caducados, reglas de carrito caducadas con cantidad cero, logs antiguos, conexiones antiguas, filas huérfanas de conexión, invitados antiguos, logs de correo, logs 404, vistas de página, hilos de cliente cerrados y caché de referentes. También tiene limpiezas comerciales de mayor riesgo como cuentas de invitado sin pedidos, direcciones huérfanas y cuentas registradas antiguas sin pedidos ni carritos recientes. Los valores predeterminados de cron dividen el trabajo en ventanas de limpieza de base de datos, limpieza de archivos y optimización de tablas, para que puedas automatizar el mantenimiento sin ejecutar todas las operaciones pesadas a la vez.
Si solo necesitas un aviso de cookies claro de aceptar o rechazar, un banner ligero es la implementación más sencilla. Lightweight Cookie Banner renderiza el banner desde hooks de nivel footer, guarda la elección del visitante en una cookie de consentimiento y te permite configurar texto del banner, botones, colores, posición, enlace a la política de privacidad y cuánto dura el consentimiento antes de volver a preguntar (365 días por defecto). Es intencionadamente mínimo, sin scripts pesados, así que no ralentizará tu tienda. Úsalo cuando tu huella de tracking sea pequeña y necesites principalmente informar a visitantes y registrar su elección. Si también necesitas bloquear scripts hasta el consentimiento, registrar logs de consentimiento u ofrecer preferencias granulares por categoría, una plataforma completa de consentimiento encaja mejor. Acompaña siempre el banner con una política de cookies y privacidad precisa y actualizada.
El módulo usa por defecto activado, posición bottom-left, botones lado a lado, tema oscuro, COOKIE_EXPIRY de 365 días, Google Consent Mode activado y DEFAULT_CONSENT establecido en denied. Puede renderizarse como barra superior o inferior de ancho completo, banner de esquina, banner flotante inferior o modal centrado con overlay. La elección del visitante se guarda en la cookie first-party mprcookie_consent con granted o denied; JavaScript la escribe con path=/, SameSite=Lax y Secure cuando la tienda está en HTTPS.
Cuando Google Consent Mode está activado, el hook de cabecera inyecta la señal de consentimiento predeterminada y carga assets/config seguros para head; no renderiza el marcado visible del banner. El marcado del banner se renderiza desde displayFooterAfter o displayFooter, protegido para que se genere solo una vez, y el script del front envía una actualización de consentimiento después de que el visitante acepta o rechaza. El módulo no categoriza cookies, no reescribe scripts de terceros ni mantiene una tabla de logs de consentimiento. También advierte cuando Cookies Revolution está disponible porque solo un módulo de consentimiento de cookies debería controlar el escaparate a la vez.
Para cumplimiento completo de GDPR y ePrivacy necesitas más que un banner: los compradores deben poder aceptar o rechazar cookies por finalidad. Cookies Revolution añade consentimiento granular a PrestaShop con las categorías estándar — necessary, functional, analytics y marketing — y un panel de preferencias donde los visitantes pueden aceptar todo, rechazar categorías opcionales o guardar una selección personalizada; su elección se guarda en una cookie de consentimiento. También puede bloquear scripts de seguimiento coincidentes hasta que se conceda el consentimiento, reescribiendo etiquetas para que solo se ejecuten para categorías permitidas, y registrar consentimientos con identificadores hasheados para tu pista de auditoría. El consentimiento previo (sin casillas opcionales premarcadas) y retirar el consentimiento con la misma facilidad que concederlo son requisitos legales; esto cubre ambos. Combínalo con Google Consent Mode v2 para que tus etiquetas de Google se ajusten automáticamente a la elección de cada comprador.
Al instalar, el módulo crea tablas de categorías, cookies, reglas de script, log de consentimiento, resultados de escaneo y diseño. Las categorías iniciales son necessary, functional, analytics y marketing; necessary es obligatoria y está activada por defecto, mientras que las categorías opcionales están desactivadas por defecto salvo que cambies el modo de consentimiento predeterminado. El estado del navegador guardado es compacto, por ejemplo necessary:1|functional:0|analytics:0|marketing:0 en mprcr_consent, con una cookie separada mprcr_version usada cuando RECONSENT_ON_CHANGE está activado.
El bloqueo de scripts funciona en dos capas. En la salida del servidor, el módulo reescribe scripts externos coincidentes a type="text/plain" con data-cookiecategory y guarda la fuente original en data-original-src; también puede reescribir scripts inline coincidentes basados en reglas de contenido de script. En el navegador, un MutationObserver comprueba scripts inyectados dinámicamente contra la misma lista de reglas y los bloquea si la categoría coincidente no está concedida. Cuando se guarda el consentimiento, el módulo actualiza Google Consent Mode, activa scripts permitidos, elimina cookies de categorías revocadas cuando está configurado, dispara mprcr:consent y registra la decisión por AJAX cuando el logging está activado, con una pequeña limitación para evitar spam de logs duplicados.
Sí, puede crear o sincronizar un trabajo de cron-job.org cuando está configurado. La configuración admin de PrestaShop puede probar la clave API de cron-job.org, comprobar alcance externo y apuntar el trabajo remoto a la URL cron tokenizada de estado o ejecución del módulo.
Usa el espacio de limpieza para eliminar los registros antiguos compatibles de PrestaShop. El módulo cuenta y borra carritos de más de 30 días sin pedidos, estadísticas de búsqueda, precios específicos caducados, logs, conexiones, invitados huérfanos y registros mail.
El módulo gestiona registros de catálogo digital para módulos, temas y addons. En PrestaShop cada producto digital puede guardar nombre técnico, rama, versión actual, campos de compatibilidad, URL de documentación, demo y repositorio, changelog, meses de soporte y límites de dominio.
Los compradores convierten mejor cuando pueden ver cuándo llegará un pedido. Para mostrar una fecha estimada de entrega en PrestaShop, usa Estimated Delivery Date: añade tus días de procesamiento configurados a la fecha actual y muestra el resultado en la página de producto mediante el bloque displayProductAdditionalInfo. Puedes definir una hora de corte diaria (los pedidos realizados después cuentan desde el día siguiente), excluir fines de semana para que sábados y domingos no cuenten y que un resultado final en fin de semana avance al lunes, y elegir el formato de fecha que ven los compradores. El mensaje aparece automáticamente en páginas de producto elegibles, dando una expectativa concreta de llegada en lugar de un vago envío pronto. Mantén honesto tu tiempo de procesamiento y alinea el corte con tu horario real de despacho, para que la fecha prometida coincida con lo que reciben los clientes; las estimaciones precisas reducen tickets de dónde está mi pedido.
Los valores predeterminados de instalación son ENABLED=1, PROCESSING_DAYS=1, CUTOFF_HOUR=14, EXCLUDE_WEEKENDS=1 y DATE_FORMAT=l, F j. El cálculo usa el DateTime actual del servidor, lee la hora actual como valor entero de 24 horas y añade un día extra de procesamiento cuando la hora actual es mayor o igual que la hora de corte. Luego avanza un día cada vez hasta contar el número configurado de días de procesamiento, saltando sábado y domingo cuando la exclusión de fin de semana está activada.
El mensaje del escaparate también recibe hours_left, que es simplemente la diferencia de horas enteras hasta el corte cuando el pedido sigue antes del corte. Este módulo no inspecciona rangos de entrega de transportistas, estado de stock, calendarios de almacén, festivos, código postal de destino ni plazos específicos por producto. Es una promesa simple de página de producto basada en reglas de procesamiento de toda la tienda, así que funciona mejor cuando tu catálogo comparte el mismo patrón de despacho.
El Meta (Facebook) Pixel rastrea acciones de compradores para que puedas medir el rendimiento de anuncios y crear audiencias de retargeting. PrestaShop no tiene Pixel nativo, así que lo añades con un módulo de seguimiento. Con Facebook Pixel, introduce tu Pixel ID y activa el seguimiento del navegador; el módulo dispara entonces los eventos ecommerce estándar — PageView, ViewContent, AddToCart, InitiateCheckout, Search, AddToWishlist, CompleteRegistration y Purchase — con interruptores individuales para activar o desactivar eventos concretos. Para conversiones precisas pese a pérdidas por navegador y bloqueadores de anuncios, activa también la Conversions API del lado del servidor, que envía eventos Purchase a Meta con un event ID coincidente para que los impactos de navegador y servidor se dedupliquen. Verifica todo en la herramienta de prueba de Events Manager de Meta antes de lanzar campañas, y asegúrate de que el disparo del Pixel respete tu banner de consentimiento de cookies para que el seguimiento solo se ejecute después de conceder consentimiento de marketing.
El módulo se instala con ENABLED desactivado y PIXEL_ID vacío, así que no empieza ningún seguimiento de navegador hasta que lo configures. Los Pixel IDs se validan como solo dígitos. La mayoría de interruptores de eventos estándar están activados por defecto una vez que el propio módulo se activa, mientras que CAPI_ENABLED está desactivado por defecto y requiere Pixel ID más CAPI_ACCESS_TOKEN. La versión predeterminada de Graph API en el módulo es v25.0, y puede enviarse un código opcional de evento de prueba mientras validas en Meta Events Manager.
El consentimiento se comprueba antes de renderizar la plantilla de seguimiento. Si Cookies Revolution está activo, el módulo lee el valor marketing desde mprcr_consent; si Lightweight Cookie Banner está activo, lee mprcookie_consent; si ninguno está activo y el respeto al consentimiento está activado, el módulo trata el consentimiento de marketing como disponible. La navegación de empleados también puede excluirse. AddToCart se rastrea mediante el evento updateCart de PrestaShop cuando está disponible, con fallbacks de clic para temas antiguos. Purchase se emite en la confirmación de pedido con un event id determinístico de pedido, y cuando CAPI está configurado la misma compra se encola y procesa mediante la cola de conversiones compartida, incluida una tarea cron programada cada 300 segundos para reintento/procesamiento.
Sí, MPR FAQ puede recoger preguntas de clientes para revisión. En PrestaShop los registros pendientes guardan nombre, email, pregunta, producto o categoría FAQ, estado, posible respuesta de administración y fechas antes de publicarse.
El renderizado en el storefront se gestiona mediante el hook displayMprSubtitle. El resolver puede detectar la página actual de producto, categoría, CMS, fabricante o proveedor, y las plantillas también pueden pasar un ID de producto explicito cuando haga falta.
Sí, las IPs en whitelist se comprueban antes que los bloqueos y nunca son bloqueadas por el matcher de bloqueos. El módulo de PrestaShop soporta entradas de whitelist por IP exacta o rango CIDR, con filtrado consciente de tienda para que los registros de whitelist específicos de tienda se apliquen solo en el contexto correspondiente.
La whitelist se basa en IP, no en país ni user-agent. En el formulario admin, introduces un campo de dirección IP o un rango CIDR, no ambos. El campo de dirección IP está documentado para una única IP o comodín como 192.168.1.*; el campo CIDR espera notación como 192.168.1.0/24.
Cuando se comprueba una solicitud, isBanned() llama primero a isWhitelisted(). Si la IP del visitante coincide con una fila de whitelist, la función devuelve false de inmediato y no se aplica ningún bloqueo por país, user-agent, IP exacta o CIDR. Esto es útil para IPs de oficina, desarrolladores, proveedores de pago o monitorización que no deben quedar bloqueadas por reglas amplias de país o rango.
- Almacenamiento: las filas de whitelist almacenan dirección IP, CIDR, etiqueta, ID de empleado, ID de tienda y fecha de creación.
- Gestión de tienda: cuando multishop está activo, la consulta de whitelist carga filas de la tienda actual y filas globales
id_shop=0. - Gotcha: una whitelist solo ayuda cuando el módulo detecta la misma IP real de visitante que guardaste. Si un proxy o CDN cambia la IP que ve PrestaShop, pon en whitelist la dirección que PrestaShop realmente recibe.
PrestaShop no tiene blog integrado, así que para publicar artículos, guías y contenido SEO añades un módulo de blog. Blog Revolution crea un blog completo dentro de tu tienda: registra rutas dedicadas para el índice del blog, posts individuales, categorías, etiquetas, autores, archivos mensuales, búsqueda y feed RSS, y añade bloques para la página de inicio, columnas laterales, footer, páginas de producto y listados tipo categoría para que tus últimos posts aparezcan en toda la tienda. Como el blog comparte tu tema, diseño y configuración de idiomas, los artículos heredan automáticamente tu branding y URLs multilingües. Un blog es una de las inversiones SEO más eficaces en PrestaShop: apunta a consultas informativas que tus páginas de producto y categoría no pueden cubrir, construye enlaces internos hacia esas páginas y consigue backlinks. Planifica primero una estructura de categorías, luego publica de forma constante y enlaza cada post con los productos relevantes.
En código, esto no es solo un wrapper de página CMS. El módulo crea sus propias tablas para posts, traducciones de posts, categorías, etiquetas, autores, comentarios, enlaces post-producto, seguimiento de vistas/likes, imágenes, restricciones de grupo y redirecciones de slugs. Los posts tienen campos SEO como meta title, meta description, meta keywords y canonical URL por idioma, y el módulo puede generar datos Open Graph, autodiscovery RSS, enlaces hreflang y enlaces de paginación anterior/siguiente desde el hook de cabecera.
El prefijo de URL predeterminado es blog, así que el conjunto de rutas generado incluye rutas como /blog, /blog/tag/{rewrite}, /blog/author/{slug}, /blog/archive/{year}/{month}, /blog/search y /blog/rss. Los valores predeterminados también asumen 12 posts por página, cuadrícula de tres columnas, comentarios, valoraciones, extractos, metadatos de autor/fecha/vistas/comentarios, compartir en redes, schema, hreflang, Open Graph y RSS activados. Eso te da una superficie de publicación completa, pero aun así deberías definir reglas editoriales: qué posts enlazan a productos, qué categorías se asignan a términos comerciales y qué URLs antiguas deberían redirigir en lugar de devolver 404.
Las etiquetas canonical indican a Google qué versión de una página es la original, evitando problemas de contenido duplicado por filtros, paginación y productos casi idénticos. PrestaShop define canonicals automáticamente, pero no te da forma de sobrescribirlas por página. Para definir una canonical personalizada para un producto, categoría, página CMS, fabricante o proveedor concreto, usa Product Canonical Manager: crea una regla para la entidad objetivo, introduce la URL a la que quieres que los buscadores atribuyan la página y guarda un valor distinto por idioma de tienda cuando haga falta. Úsalo cuando varios productos sean variantes de un maestro, cuando una página CMS replique un artículo del blog o cuando una URL de campaña deba consolidarse en la página limpia del producto. Para entender cómo encajan canonicals, URLs, schema y sitemaps, consulta nuestra guía SEO de PrestaShop.
El módulo guarda reglas en una tabla dedicada mprcanonical_rule y soporta los tipos de entidad product, category, cms, manufacturer y supplier. Cada regla tiene una acción: override sustituye una canonical existente por la URL de la entidad, add_missing solo inserta una cuando la página todavía no tiene canonical, y custom usa la URL personalizada multilingüe guardada en la regla. Las reglas también pueden establecer noindex y nofollow.
Para reglas de producto, el resolvedor puede coincidir con un producto concreto, todos los productos, productos por categoría, fabricante o proveedor, y soporta exclusiones de selector. Cuando varias reglas coinciden, la consulta ordena por priority DESC, así que la regla de mayor prioridad gana para la URL canonical, mientras que las banderas noindex/nofollow pueden acumularse. El hook de salida edita el head HTML terminado, por lo que puede sustituir etiquetas canonical existentes, añadir directivas robots, añadir enlaces hreflang cuando está activado y normalizar URLs generadas con eliminación de parámetros configurada, conversión a minúsculas y manejo opcional de slash final.
Sí, el modo dry-run muestra los resultados antes de borrar. El módulo lo activa por defecto, usa tamaños de lote por tarea y límites de seguridad configurables, y registra historial con tipo de disparador, filas afectadas, estado dry-run y empleado.
Sí, soporta Google Consent Mode v2 cuando está activado. El módulo escribe un comando de consentimiento predeterminado antes de las etiquetas y actualiza ad_storage, ad_user_data, ad_personalization y analytics_storage después de que el comprador acepte o rechace cookies en PrestaShop.
Sí, puede bloquear scripts coincidentes hasta que se conceda consentimiento. Con el bloqueo activado, el hook de salida reescribe las etiquetas script como type text/plain con metadatos de categoría, y el JavaScript front restaura solo los scripts cuya categoría está permitida.
Sí, el módulo ofrece un espacio back office de tareas programadas. Puede listar tareas de módulos que usan CronTrait compartido, ejecutar pruebas, activar o desactivar tareas, editar calendarios, eliminar tareas personalizadas, revisar logs y aplicar cambios masivos de frecuencia.
Sí, el espacio admin muestra conteos antes de ejecutar la limpieza. En PrestaShop cada tarea incluye una consulta de conteo y la plantilla muestra el total y los conteos individuales para ejecutar una tarea o todas.
Depende de a qué descarga se refiera:
- Un módulo con licencia — sí. Las descargas con licencia están vinculadas a su tienda, así que el controlador de descargas comprueba la propiedad de la licencia, su validez, los límites de descarga restantes y que la tienda seleccionada esté asignada a la licencia antes de emitir una URL de descarga tokenizada. Esa vinculación es lo que mantiene una licencia de pago unida a su tienda.
- La demo gratuita de 30 días — no. Indicar su email y el dominio de instalación al descargar es opcional. Lo único que le aporta es comodidad más adelante: si compra con ese mismo email, su tienda podrá ofrecerle la activación en un clic. Si lo omite, simplemente pegará una clave de licencia.
Para todo el recorrido desde la prueba hasta la activación y el soporte, vea Cómo funcionan las licencias, la activación y el soporte.
Las ventas flash, promociones estacionales y ofertas por tiempo limitado funcionan mejor cuando empiezan y terminan automáticamente. Para programar descuentos basados en tiempo en PrestaShop, usa Smart Dynamic & Scheduled Discounts: crea campañas con fechas de inicio y fin, y el hook de precio comprueba la ventana activa, alcance de producto, acceso por grupo de clientes y límites de uso, luego aplica el mejor descuento elegible al precio del producto sin trabajo manual. Como el descuento se calcula en tiempo de visualización y checkout, los precios vuelven automáticamente cuando se cierra la ventana, sin tener que recordar deshacer una promoción. Usa alcance por grupo de clientes para ofertas solo de miembros y apóyate en la lógica de mejor precio para que campañas solapadas sean predecibles. Muestra siempre el precio original junto a la oferta para que el ahorro sea visible y comprueba que los precios programados respeten cualquier regla de margen mínimo que tengas.
El modelo de campaña soporta tipos de campaña como scheduled, recurring, flash sale, countdown, early bird y last chance, con tipos de descuento percent, amount y fixed_price. El alcance de producto puede ser asignación directa de producto/combinación, categorías con subcategorías opcionales, fabricantes, grupos de clientes o ningún alcance, en cuyo caso una campaña activa puede aplicarse a todos los productos. Los descuentos personalizados por producto pueden sobrescribir el descuento de campaña cuando la fila de producto no hereda el valor predeterminado.
Las campañas recurrentes añaden filas de programación con ventanas diarias, semanales, mensuales o personalizadas, horas de inicio/fin y zona horaria. El uso se rastrea por pedido/producto/cliente en mprdsd_campaign_usage, y el módulo comprueba límites de uso total, límites por cliente y límites de cantidad por producto antes de aplicar un descuento. El hook de precio usa deliberadamente el precio actual pasado por PrestaShop en lugar de llamar a Product::getPrice(), porque eso recursaría de nuevo en el hook de precio. Luego resta el mayor importe de descuento elegible del precio calculado actual y nunca escribe filas nativas de precio específico, por eso el descuento desaparece automáticamente cuando no hay ninguna campaña activa.
Sí, puede omitir sábados y domingos cuando está activada la exclusión de fines de semana. El cálculo de PrestaShop no cuenta esos días al sumar el tiempo de preparación y también mueve al lunes un resultado final que caiga en fin de semana.
Sí, admite eventos Purchase del lado del servidor mediante Meta Conversions API. En PrestaShop el módulo encola conversiones de compra, las envía a la versión configurada de Graph API y usa event IDs coincidentes para navegador y servidor.
Sí, admite respuestas adicionales aprobadas y votos de utilidad. En PrestaShop los registros de respuesta guardan tipo de autor, referencias de cliente o empleado, estado, conteos de votos y contenido, mientras los votos de preguntas y respuestas se registran por entidad e IP.
Sí. Las reglas de subtítulos de producto pueden dirigirse a todos los productos, productos concretos, productos en categorías, productos por fabricante y productos por proveedor. Las reglas de exclusión también pueden quitar productos específicos o coincidencias de categoría de una regla más amplia.
Sí, el módulo contiene una ruta automática de bloqueo de autenticación para logins fallidos de PrestaShop, pero solo se ejecuta cuando el registrador de logins fallidos del módulo es invocado por la integración de autenticación. Cada fallo registrado almacena IP del visitante, email intentado, user agent, ID de tienda y timestamp en mprceiipban_failed_logins.
Los dos ajustes que controlan el bloqueo son MPRCEIIPBAN_AUTOBAN_THRESHOLD y MPRCEIIPBAN_AUTOBAN_WINDOW. Los valores predeterminados de instalación son umbral 0 y ventana 60 minutos, así que el autoban está desactivado hasta configurar un umbral positivo. Cuando el número de fallos desde la misma IP dentro de la ventana configurada alcanza el umbral, el módulo añade un bloqueo auth con el motivo Auto-banned: X failed login attempts in Y min y una caducidad de una hora en el futuro.
Un bloqueo auth es más estrecho que un bloqueo completo del sitio: apunta a páginas relacionadas con autenticación, mientras que los bloqueos completos existentes siguen teniendo precedencia. Como este checkout de código fuente contiene el registrador y la lógica de bloqueo pero no un archivo concreto de override de autenticación, verifica que tu build instalada incluya la integración de autenticación antes de confiar en ello como única protección de login.
El contador de umbral se basa en IP. El email fallido se almacena para revisión, pero countRecentFailedLogins() cuenta solo filas con la misma ip_address más recientes que la ventana configurada; no cuenta por separado por email intentado. La comprobación de autoban también omite crear un nuevo bloqueo auth temporal si la IP ya está bajo un bloqueo completo.
- Para activarlo: define
AUTOBAN_THRESHOLDen un número positivo como5y deja o ajustaAUTOBAN_WINDOWen minutos. - Qué se crea: una fila activa en
mprceiipban_bannedconban_type=auth, la IP del visitante y undate_expiryde una hora. - Limpieza: las filas de login fallido están cubiertas por la ruta de purga del módulo, que usa los días de retención de log configurados.
AUTOBAN_THRESHOLD = 5
AUTOBAN_WINDOW = 60
Result after 5 failures from one IP in 60 minutes: temporary auth ban for 1 hourLas reseñas con foto permiten a los compradores adjuntar imágenes reales de producto a sus valoraciones, lo que genera confianza y añade contenido único, rico en palabras clave, a tus páginas de producto. PrestaShop no tiene una función integrada de reseñas con imagen, así que la añades con un módulo de reseñas. Con Reviews & Ratings, activa la subida de imágenes en los ajustes de reseñas: el formulario acepta entonces archivos JPEG, PNG y WebP, aplica tu tamaño máximo de archivo y número de imágenes, redimensiona automáticamente subidas grandes, genera miniaturas y adjunta las imágenes al registro de reseña guardado. Las reseñas con foto aprobadas se muestran junto al producto y alimentan los rich results de valoración por estrellas. Define un límite sensato, por ejemplo 3-5 imágenes por reseña, y mantén la moderación activada para que solo se publiquen fotos genuinas y relevantes. Las fotos de clientes también reducen devoluciones al fijar expectativas precisas antes de comprar.

En la fuente local, esta función vive en el módulo mprcomments. Las subidas de imagen se activan con ALLOW_IMAGES, con valores predeterminados de 3 imágenes por reseña y 2 MB por imagen. La plantilla de reseña de producto usa un input de archivo múltiple llamado review_images[] y acepta image/jpeg, image/png y image/webp. El uploader valida tipo MIME, tamaño de archivo y dimensiones de imagen, luego redimensiona imágenes grandes a un máximo de 1200 por 1200 píxeles y crea miniaturas de 150 por 150.
La reseña se guarda primero con estado pending o approved según los ajustes de moderación, y luego las subidas de imagen se procesan inmediatamente contra ese ID de reseña guardado. La aprobación controla la visibilidad pública, no el adjunto de imagen. La validación normal de reseñas sigue aplicándose primero: el contenido de la reseña debe cumplir la longitud mínima, la valoración debe estar entre 1 y 5, los invitados se bloquean salvo que estén permitidos, se comprueban reseñas duplicadas de cliente y la moderación puede dejar la reseña pendiente en lugar de hacerla pública inmediatamente. Los datos estructurados se basan intencionadamente en reseñas nativas de producto; las reseñas de empresa importadas se excluyen del schema de producto, y el renderizador de schema limita los elementos de reseña incrustados mientras sigue generando aggregate rating cuando existen reseñas nativas.
PrestaShop trae una página de contacto fija, lo que no basta cuando necesitas solicitudes de presupuesto, consultas B2B, entrada de soporte o inscripciones a eventos. Para crear tus propios formularios, usa Better Contact Form: guarda formularios y sus campos en tablas dedicadas y los renderiza mediante un controlador de módulo o hook, con manejo funcional de valores enviados para campos text, email, phone, textarea, select, checkbox, URL y number. Puedes crear varios formularios para distintos propósitos, colocarlos en cualquier página y recoger envíos estructurados en lugar de emails de texto libre. Mantén cada formulario corto, marca claramente los campos obligatorios y añade protección anti-spam. Para GDPR, incluye una casilla de consentimiento y un enlace a tu política de privacidad para que los datos de consulta se recojan legalmente.
La plantilla también tiene una rama de input file, pero el procesador de envío actual lee valores de campo mediante Tools::getValue() y no maneja $_FILES. Eso significa que los campos de archivo pueden renderizarse, pero los archivos subidos no se persisten como valores de campo enviados en la implementación actual. No dependas de la recogida de archivos salvo que se añada manejo de archivos.
Formularios, campos, envíos y valores individuales de envío se guardan en tablas separadas, así que una consulta mantiene tanto una fila de resumen como datos de campo estructurados. El renderizador puede elegir un formulario concreto o el formulario activo predeterminado, no devuelve nada cuando un formulario está inactivo o no tiene campos, y prerrellena nombre/email de clientes conectados cuando están disponibles.
El procesamiento de envío comprueba que se haya publicado el botón submit, realiza comprobaciones de campos obligatorios, validación de tipo, validación de opciones select, métodos opcionales de validación de PrestaShop, aplicación de casilla GDPR, detección de spam y persistencia en base de datos. El valor oculto _mpr_ft no es un token CSRF; es una marca temporal base64 usada por la comprobación anti-spam de tiempo. Honeypot y comprobación de tiempo anti-spam están activados por defecto, con un tiempo mínimo de envío predeterminado de 3 segundos. Los envíos de spam siguen guardándose con is_spam y spam_reason, pero los emails de administración/cliente solo se envían para envíos no spam. Eso te da una pista de auditoría sin dejar que tráfico de bots evidente dispare notificaciones.
Sí, las elecciones de consentimiento pueden registrarse cuando el logging está activado. El controlador AJAX de PrestaShop guarda mapa de consentimiento, fuente y versión, mientras el modelo de log aplica hash a visitante, IP y user agent en vez de guardarlos en texto claro.
Puedes añadir Criteo OneTag a PrestaShop configurando un Criteo Partner ID numérico y activando el seguimiento de navegador. El módulo crea eventos OneTag en el header para páginas ecommerce compatibles y mantiene el tracking inactivo si falta el Partner ID o no es válido.
Sí, las tareas cron personalizadas pueden añadirse desde el controlador de tareas. El formulario admin de PrestaShop valida módulo propietario, calendario, contexto y tipo de ejecutor, y admite tareas URL, callable y command, con command limitado a cron o pruebas admin explícitas.
En PrestaShop, el H1 de página de categoría es el nombre de la categoría, así que cambiar el encabezado para SEO normalmente también cambia tus etiquetas de menú y breadcrumbs, algo que normalmente no quieres. La solución es sobrescribir el H1 de forma independiente. Con Custom Category H1, guardas un valor H1 separado por categoría y el módulo lo sustituye en la página de categoría mediante hooks de PrestaShop, dejando intacto el nombre del objeto Category (y por tanto la navegación y breadcrumbs). Esto te permite apuntar a un encabezado rico en palabras clave como "Waterproof Shower Trays for Wet Rooms" mientras el menú sigue mostrando un breve "Shower Trays". Ten en cuenta que las categorías raíz se excluyen intencionadamente, porque no renderizan una página de categoría normal del escaparate donde aplique un H1 visible para compradores. Usa un H1 claro y único por categoría y mantenlo alineado con el title tag de esa página; consulta nuestra guía SEO de PrestaShop.
El módulo guarda overrides en tablas dedicadas para filas de override, valores de idioma y asignaciones de categoría. Los valores predeterminados son activado, mostrar el campo de edición de categoría, sustituir el nombre de página de categoría en el contenido de categoría filtrado, aplicar el mismo valor a etiquetas de listado de productos, recurrir al idioma predeterminado, recurrir de un valor específico de tienda a un valor de todas las tiendas, eliminar etiquetas HTML y normalizar espacios. Existe fallback de categoría padre, pero está desactivado por defecto para evitar encabezados duplicados entre categorías hijas.
Para trabajo SEO masivo, un override puede asignarse a varias categorías. Si un comerciante edita después directamente una categoría y esa categoría pertenece a un override compartido, el código separa esa categoría concreta y crea un override local de categoría, dejando el override compartido para las demás. El valor H1 puede usar placeholders como {category_name}, {nb_products}, {page}, {page_label}, {shop_name} y {lang}. La paginación también puede añadir automáticamente una etiqueta de página cuando está activada. El módulo cambia los datos de categoría renderizados; no renombra el registro de categoría guardado en PrestaShop.
Puedes recopilar IP de visitante e información de dispositivo con este módulo PrestaShop cuando la recopilación está activada. Guarda ID de cliente o invitado, ID de tienda, dirección IP, datos de país, detalles de dispositivo y campos opcionales de user agent, sistema, navegador y resolución.
Los clientes pueden enviar galerías de proyectos desde el flujo front-office del módulo. En PrestaShop el showcase guarda proyectos, títulos y descripciones multiidioma, imágenes, categoría y estado de moderación, con límites por defecto de 20 imágenes y 5 MB por imagen.
El módulo permanece instalado, pero hookDisplayHeader() no devuelve nada porque isActive() requiere el Brand ID. El aviso de configuración obligatoria también informa al personal de que el seguimiento permanece inactivo hasta que se añada el Brand ID.
No. El módulo comprueba si mprcheckoutrevolution está instalado y habilitado. Cuando está activo, este módulo le cede la interfaz de edición de pedidos en lugar de gestionar por sí mismo los hooks de edición de pedidos.
El generador comprueba el registro de referencias del módulo, la tabla nativa orders y las referencias de order_payment. Prueba hasta 10 candidatos antes de registrar un error y desistir.
El formulario ofrece coma, punto y coma, tabulación y pipe. El controlador convierte la opción tab en un carácter de tabulación real antes de transmitir el CSV.
El esquema incluye tablas para equipos, empleados de equipo, asignaciones equipo-estado, estados de workflow y traducciones, historial de pedido, comentarios de pedido, recordatorios, notificaciones y preferencias de notificación de empleados.
Registra displayHeader, displayOrderConfirmation, actionValidateOrder y actionCustomerAccountAdd. Estos hooks renderizan tracking del navegador y ponen en cola datos de conversión relacionados con pedidos o registros.
No. El código de detección comprueba si la referencia del producto empieza por mpr-pack-. El contenido del pack se lee después desde la tabla propia del módulo mpr_pack_content.
El hook comprueba actionDispatcherBefore y solo gestiona Dispatcher::FC_FRONT y Dispatcher::FC_MODULE. Los dispatches de Back Office se ignoran.
hookPaymentOptions() requiere módulo activo, configuración habilitada, cliente conectado, al menos un término de pago activo asignado a los grupos del cliente y crédito suficiente para el total del carrito actual.
El resolver ordena las coincidencias activas por prioridad. En modo único devuelve el subtitulo de mayor prioridad; en modo todos devuelve la lista ordenada para que la plantilla pueda mostrar más de un subtitulo.
Detecta el país del visitante en un orden fijo de fallback. Primero lee la cabecera de Cloudflare HTTP_CF_IPCOUNTRY cuando existe y no es XX. Si no está disponible, intenta GeoIP de PrestaShop mediante GeoIp::getCountryByAddr($ip) y convierte el nombre de país devuelto de vuelta a un código ISO. Si GeoIP no está disponible, finalmente comprueba la cookie de contexto de PrestaShop iso_code_country.
1. Cloudflare reverse proxy sends HTTP_CF_IPCOUNTRY=US -> module stores country code US and resolves the country name.
2. No Cloudflare header -> PrestaShop GeoIP returns United States -> module looks up ISO code US.
3. GeoIP unavailable -> PrestaShop cookie iso_code_country=US is used.
4. No signal -> empty country code and empty country name.Eso significa que los bloqueos de país dependen de la señal disponible para esa solicitud. Si dependes de la detección de país de Cloudflare, asegúrate de que el tráfico de la tienda llegue realmente a PrestaShop a través de Cloudflare para que la cabecera esté presente.
La IP del visitante usada para GeoIP viene de Tools::getRemoteAddr() cuando PrestaShop la proporciona. El módulo tiene una cadena de fallback para HTTP_CF_CONNECTING_IP, HTTP_X_REAL_IP, el primer valor de HTTP_X_FORWARDED_FOR y luego REMOTE_ADDR. Eso importa porque la calidad de GeoIP depende de la IP real del cliente, no de la IP de un proxy intermedio.
Un bloqueo de país solo coincide cuando la solicitud actual tiene un código de país no vacío. Si Cloudflare envía XX, falta GeoIP, la búsqueda de nombre de país no puede mapear el resultado GeoIP a un código ISO y la cookie está ausente, las reglas solo de país no se dispararán para esa solicitud. VPNs, proxies y configuración CDN también pueden hacer que el país detectado difiera de la ubicación física del comprador.
No. S2S_ENABLED es false por defecto. El panel de readiness trata S2S explícitamente como opcional, y el tracking Pixel del navegador puede funcionar con un Marketer ID válido y tracking de navegador activado.
Sí, el módulo incluye herramientas de importación y exportación para contenido de blog. El controlador admin de PrestaShop puede importar XML WordPress WXR, incluidos comentarios opcionales, y exportar datos del blog como XML o JSON mediante el servicio BlogExporter.
El controlador checkout personalizado redirige a los compradores a la página de pedido nativa de PrestaShop cuando el one page checkout está desactivado. Así el módulo no fuerza su flujo si el ajuste one_page_checkout_enabled está apagado.
El banner vuelve a aparecer cuando falta la cookie de consentimiento o ha caducado. En el front de PrestaShop, JavaScript lee mprcookie_consent y oculta el banner a compradores recurrentes; la caducidad configurada controla la duración de la elección, con 365 días por defecto.
Sí, el módulo tiene un interruptor de visualización móvil. Antes de renderizar el widget Crisp, el guard de PrestaShop comprueba SHOW_MOBILE y el contexto del dispositivo; si la visualización móvil está desactivada y el contexto es móvil, no se imprime el script de Crisp.
El Front Controller acepta un nombre de evento y parámetros JSON, rechaza payloads de más de 8192 caracteres, conserva como máximo 50 claves normalizadas por nivel, limita la profundidad de anidación y trunca valores de texto a 512 caracteres.
No, las subidas de archivos no se procesan en el código actual de envío. La lista de campos admin incluye un input de archivo, pero el procesador lee valores con Tools::getValue y no gestiona el array PHP files, rutas de almacenamiento ni adjuntos de email.
Sí, el módulo incluye un escáner de cookies del storefront. Puede rastrear una URL de PrestaShop, inspeccionar cabeceras Set-Cookie y asignaciones inline document.cookie, guardar cookies nuevas sin categorizar y sugerir categorías para patrones conocidos de analítica, marketing y funcionales.
Sí, los comerciantes pueden definir reglas de disparador para eventos Criteo compatibles. La configuración PrestaShop acepta reglas JSON validadas con disparadores de clic, URL, controlador o evento DOM, y normaliza los nombres al vocabulario OneTag admitido por Criteo.
No, desinstalar el módulo no elimina las tablas cron compartidas. La ruta de desinstalación de PrestaShop quita el menú admin del módulo y desregistra sus propias tareas, pero conserva deliberadamente las tablas cron porque otros módulos MPR pueden depender de la misma infraestructura.
No, las categorías raíz son rechazadas por la lógica de guardado de overrides. El controlador admin de PrestaShop comprueba que las categorías seleccionadas sean categorías storefront, porque las raíz no renderizan páginas normales de categoría donde se aplicaría un H1 visible.
Sí, puede hacer coincidir patrones de user agent como objetivos de ban. En el admin de PrestaShop, una regla puede usar texto simple para contiene sin distinguir mayúsculas o una regex entre barras, y combinarse con filtros de IP, CIDR o país.
Sí. El validador acepta dígitos separados por comas o espacios en blanco, hasta las reglas de longitud configuradas, por lo que pueden guardarse varios IDs numéricos en el campo Marketer ID.
El panel de diagnóstico incluye una acción Retry failed events. Llama al reset de queue compartido para este módulo y el provider outbrain, devolviendo los eventos fallidos al estado pending.
El módulo guarda IDs de producto en la cookie del navegador del visitante mprrecent_ids. La cookie se escribe con ruta /, vida de 30 días y SameSite=Lax.
No. El controlador AJAX crea un objeto Product para cada ID solicitado y omite entradas no cargadas o no activas antes de devolver datos de tarjeta de producto.
La respuesta AJAX incluye el nombre de cada producto, URL de producto, URL de imagen de portada usando home_default y precio formateado. El script front renderiza esos valores como tarjetas de producto compactas.
No se requiere cuenta, y la descripción fuente dice que funciona para invitados, clientes con sesión iniciada y visitantes recurrentes. Recuerda páginas de producto recientes en una cookie del navegador en lugar de rellenar una tabla de historial de usuario de PrestaShop. Aun así debes describir el uso de cookies en tu información de privacidad o cookies cuando los requisitos legales de tu tienda lo pidan.
El script del storefront usa una cookie llamada mprrecent_ids. En páginas de producto, pone el ID del producto actual al principio de la lista, elimina duplicados, limita la lista al máximo configurado y escribe la cookie durante 30 días con SameSite=Lax. El valor predeterminado de instalación es MAX_PRODUCTS=8, y el hook de display predeterminado es displayFooterProduct.
Cuando se renderiza el widget, el navegador lee la cookie y envía por POST la lista de IDs de producto al controlador AJAX del módulo. El controlador sanea los IDs con intval, elimina valores vacíos, limita la solicitud a 20 IDs y solo devuelve productos activos. La respuesta contiene ID de producto, nombre, URL, imagen de portada y precio formateado para que el widget pueda dibujar la lista de productos recientes.
Así que el módulo no construye un perfil de navegación server-side ligado a una cuenta de cliente. El servidor sigue recibiendo los IDs de producto recientes durante la búsqueda AJAX, y los IDs se almacenan en la cookie del navegador del visitante, por lo que la función sigue siendo tracking basado en cookies desde el punto de vista de aviso de privacidad.
Introduce el AdRoll Advertiser ID de adroll_adv_id, introduce el Pixel ID de adroll_pix_id, activa el tracking de navegador y elige los eventos que quieres enviar. Ambos IDs deben contener solo letras, números, guiones bajos o guiones, y el tracking permanece inactivo hasta que los IDs son válidos y el módulo está activado.
- Configuración obligatoria: Advertiser ID, Pixel ID y tracking de navegador activado.
- Eventos del recorrido de página: page view, product view, checkout start y search.
- Eventos de interacción: add to cart, add to wishlist, signup y eventos personalizados de navegador configurados.
- Evento purchase: enviado en la confirmación de pedido cuando el tracking de purchase está activado.
El módulo es una integración Pixel de navegador. Sus propios metadatos demo marcan la compra server-side de AdRoll como no disponible porque el acceso público S2S de AdRoll no se expone como flujo estable de token/endpoint en este módulo.
En la instalación, el tracking de navegador en sí queda desactivado por defecto, mientras que los interruptores de eventos estándar quedan activados por defecto. Eso permite al comerciante configurar IDs primero y luego activar tracking cuando esté listo. La exclusión de empleados y el respeto al consentimiento de marketing están ambos activados por defecto, así que empleados de back office navegando el storefront y visitantes sin consentimiento de marketing soportado pueden suprimirse antes de enviar eventos.
El hook de cabecera prepara la cola de AdRoll, define window.adroll_adv_id, window.adroll_pix_id y window.adroll_version='2.0', y luego carga https://s.adroll.com/j/roundtrip.js. Los eventos de cabecera se construyen server-side para page view, product view, checkout start, search y signup, mientras que add-to-cart y wishlist se enlazan en JavaScript a eventos de PrestaShop o selectores comunes de botones.
Los eventos personalizados de navegador son opcionales y están desactivados por defecto. Si se activan, el JSON debe ser un array o un objeto con un array events. Los nombres de evento se limitan a letras, números, guiones bajos y guiones, con un límite de 64 caracteres, y este módulo limita los eventos personalizados a 15 nombres de evento distintos. Los triggers soportados son click, url, controller y event.
[{"event":"GalleryBrowse","trigger":"click","selector":".product-images img","params":{"segment_name":"gallery_browse"}}]Sí, el tracking de purchase envía valor de pedido y moneda desde la página de confirmación de pedido de PrestaShop. El módulo también construye recuento de artículos, referencia de pedido, IDs de producto, nombres, categorías, precios y cantidades, y luego envía el evento purchase mediante el pixel del navegador cuando el tracking de purchase está activado.
El hook de confirmación de pedido comprueba primero la puerta normal de tracking: el módulo debe estar activo, los IDs deben ser válidos, la exclusión de empleados no debe bloquear la solicitud, el consentimiento de marketing debe pasar cuando está activado, y TRACK_PURCHASE debe estar activo. Luego acepta order u objOrder desde los parámetros del hook de PrestaShop y construye el payload de compra desde ese pedido cargado.
El mapeo de valor es explícito. Los datos comunes de conversión se convierten a parámetros estilo AdRoll: value se convierte en conversion_value, currency en adroll_currency, num_items se mantiene como recuento de artículos, order_id se define como la referencia de pedido de PrestaShop, y los datos de producto se convierten en product_id, content_ids y un array products con ID de artículo, nombre, precio y cantidad cuando están disponibles.
El evento sigue siendo del lado del navegador. La plantilla llama a window.mpradrollTrack('purchase', params, 'Order confirmation') cuando el script de cabecera está presente, o recurre a window.__adroll.track/window.adroll.track. Si existe la función legacy record_user de AdRoll, la plantilla también la llama, pero el módulo no envía una solicitud purchase server-to-server.
Sí. Cuando MPRADROLLPIXEL_RESPECT_CONSENT está activado, el módulo comprueba módulos de consentimiento de cookies soportados antes de renderizar o disparar tracking de AdRoll. Con mprcookiesrevolution, el consentimiento de marketing se concede solo cuando la cookie mprcr_consent contiene marketing:1. Con mprcookiebanner, el consentimiento se concede cuando mprcookie_consent=granted. Si falta la cookie correspondiente, el módulo recurre al valor DEFAULT_CONSENT de ese módulo de consentimiento.
mprcookiesrevolution allowed: mprcr_consent=essential:1|marketing:1|statistics:1
mprcookiesrevolution blocked: mprcr_consent=essential:1|marketing:0|statistics:1
mprcookiebanner allowed: mprcookie_consent=grantedSi no hay activo ningún módulo de consentimiento soportado, la comprobación de consentimiento no bloquea el tracking. La exclusión de empleados todavía puede suprimir tracking por separado cuando MPRADROLLPIXEL_EXCLUDE_EMPLOYEES está activado.
Los valores predeterminados de instalación están orientados a privacidad: RESPECT_CONSENT=1 y EXCLUDE_EMPLOYEES=1. El método server-side canTrack() devuelve false si el módulo está inactivo, si un contexto de empleado válido navega el front office o si no se concede consentimiento de marketing según las comprobaciones de módulos de consentimiento soportados.
La plantilla de navegador también realiza una comprobación de consentimiento antes de cargar AdRoll. Cuando está activo un módulo de consentimiento soportado, comprueba window.MPRCR.isGranted('marketing') si está disponible y luego las mismas dos cookies. Si esa comprobación client-side falla, el script retorna antes de cargar roundtrip.js o disparar eventos en cola. Un detalle práctico es que la comprobación client-side no conoce el valor server-side DEFAULT_CONSENT, así que una configuración que depende de consentimiento granted predeterminado sin cookie de consentimiento debe probarse en el navegador.
No, este módulo envía eventos de AdRoll mediante el pixel del navegador, no mediante una API server-side pública. El código de PrestaShop incluye una nota demo indicando que AdRoll S2S es beta bajo soporte; en producción carga roundtrip.js y solo envía eventos del navegador.
Usa este módulo para definir nombres visibles separados para páginas CMS de PrestaShop. Almacena un nombre visible por id_cms, idioma y tienda en su propia tabla mprcmsnames, así que el registro CMS nativo y su meta_title SEO no se reescriben en la tabla CMS.
- Ejemplo: mantén el meta title de la página CMS como
Terms and Conditions | My Shoppara SEO. - Abre la pantalla CMS Display Names del módulo y encuentra esa fila de página CMS por ID y meta title existente.
- Introduce un nombre visible más corto como
Termsen el campo Display Name y guarda. - En el front office, el encabezado de la página CMS recibe el nombre visible mediante
filterCmsContent, y los enlaces CMS que coinciden con el patróncms-page-linkde PrestaShop se sustituyen en el HTML final. - Si limpias el campo de nombre visible, el módulo elimina su fila personalizada para esa página CMS y la tienda vuelve al
meta_titleCMS original.
Así que la división práctica es: usa el título CMS nativo para snippets de búsqueda y comportamiento del título del navegador, y usa este módulo para encabezados de página, enlaces de footer y etiquetas de menú más cortos que los compradores escanean realmente.
El módulo tiene dos rutas de front office. Primero, filterCmsContent cambia el objeto CMS pasado a la plantilla de página sustituyendo meta_title por el nombre visible almacenado para el idioma y tienda actuales. Segundo, actionOutputHTMLBefore edita el HTML final de enlaces CMS coincidentes antes de enviar la respuesta.
El comentario fuente es explícito: la etiqueta HTML real <title> no se ve afectada porque PrestaShop la construye mediante Meta::getMetaTags() usando su propia ruta SQL. Por eso este módulo puede acortar nombres visibles sin sobrescribir el título SEO CMS almacenado por PrestaShop.
El marcado del tema sigue importando. El reetiquetado de enlaces solo se ejecuta en anchors que coinciden con el patrón esperado por el módulo para enlaces CMS, con el ID de página CMS en link-cms-page-{id}-... y el atributo de clase exacto cms-page-link en el orden esperado por la regex. Si un tema construye menús CMS con marcado distinto o HTML anidado dentro del texto del anchor, el encabezado aún puede cambiarse pero el texto del enlace quizá no se sustituya.
No, no reescribe la etiqueta HTML title. El módulo se limita intencionadamente al contenido CMS visible y al texto renderizado de enlaces CMS, para que PrestaShop pueda seguir usando el meta title CMS original para el head de la página y los snippets de búsqueda.
El comentario fuente indica que la etiqueta <title> la construye la ruta Meta::getMetaTags() de PrestaShop y no se ve afectada. El módulo no actualiza la tabla CMS nativa, no se engancha a la generación de meta tags y no escribe un nuevo título SEO de vuelta en PrestaShop.
Lo que sí puede cambiar es el objeto CMS pasado por filterCmsContent. Si la plantilla de página usa el meta_title de ese objeto CMS filtrado como encabezado visible, los compradores ven el nombre visible más corto en la página. Por separado, actionOutputHTMLBefore puede sustituir texto de enlaces CMS coincidentes en el HTML final. Esos son cambios de contenido visible, no cambios de head tag.
Para trabajo SEO, sigue editando el meta title CMS real en la página CMS nativa de PrestaShop. Usa este módulo cuando el título SEO sea demasiado largo para menús, footers, breadcrumbs o encabezados en la página.
Reetiqueta enlaces CMS que coinciden con el marcado de enlace CMS esperado por PrestaShop. El hook de salida busca un anchor cuyo id empiece por link-cms-page-{id}- y cuya clase sea cms-page-link, y luego sustituye el texto plano del enlace por el nombre visible almacenado para el idioma y tienda actuales.
<a id="link-cms-page-3-1" class="cms-page-link" href="/content/3-terms-and-conditions">Terms and conditions</a>Ese patrón importa para temas personalizados: si el enlace CMS tiene una clase distinta, no tiene id link-cms-page-..., la clase aparece antes del id en el marcado al que apunta el módulo, o la etiqueta se construye con HTML anidado en lugar de texto plano, la sustitución de salida puede no coincidir.
La regex es deliberadamente estrecha. Espera el atributo id antes de class="cms-page-link", y captura texto plano entre las etiquetas de apertura y cierre del anchor. Un enlace con múltiples clases como class="footer-link cms-page-link", un span dentro del anchor o un componente de menú completamente personalizado puede quedar fuera de ese patrón.
La sustitución tampoco hace nada en el back office y retorna pronto si no hay nombres visibles para el idioma y tienda actuales. Si el footer o menú CMS de tu tema no se reetiqueta, inspecciona primero el marcado anchor generado; a menudo la solución es hacer que la plantilla emita el patrón nativo de ID y clase de enlace CMS de PrestaShop.
Sí, los nombres visibles se almacenan por página CMS, idioma y tienda. La tabla del módulo usa id_cms, id_lang e id_shop como clave, y guardar un valor vacío elimina esa etiqueta almacenada para que PrestaShop vuelva al título CMS nativo.
La búsqueda de front office también es específica por idioma y tienda. Carga filas de mprcmsnames donde id_lang equivale al idioma de contexto actual y id_shop equivale a la tienda de contexto actual. No hay fallback amplio id_shop=0 en esta búsqueda, así que un nombre visible guardado para una tienda no se reutiliza automáticamente en otra.
Al guardar, el módulo recorre páginas CMS e idiomas, reemplazando filas cuando se envía un valor y eliminando filas cuando el valor enviado está vacío. Por eso limpiar un campo es un reset real, no solo una etiqueta personalizada en blanco.
Un detalle de implementación que comprobar en esta versión de código fuente: la tabla de configuración renderizada muestra el input del idioma predeterminado para cada página CMS. La base de datos y la lógica de guardado soportan id_lang, pero el formulario visible en este checkout no renderiza columnas de input separadas para cada idioma. Si necesitas nombres visibles en idiomas no predeterminados, confirma que la build instalada exponga esos inputs o añádelos antes de confiar en edición multilingüe mediante el formulario estándar.
Sí, el módulo genera automáticamente una contraseña para formularios de registro y checkout soportados. En PrestaShop apunta a campos comunes de contraseña de cliente, autenticación y checkout, y luego rellena inputs password, passwd, confirmation y password_confirmation cuando coincide el ámbito de página configurado.
Los valores predeterminados de instalación activan el módulo, lo aplican tanto a registro como a checkout, ocultan campos de contraseña, generan una contraseña de 12 caracteres e incluyen mayúsculas, números y caracteres especiales. Los controladores aplicables son authentication, registration e identity para registro, más order, orderopc y order-opc para checkout.
En PrestaShop 1.7+, el módulo registra su CSS y JavaScript front mediante actionFrontControllerSetMedia. En PrestaShop 1.6, carga los assets desde displayHeader. El mismo hook de cabecera inyecta los ajustes de contraseña en window.mprcustomerpassword_config para que JavaScript los use.
El script frontal encuentra campos nombrados como password, passwd, confirmation y password_confirmation, y también escanea formularios comunes de registro/autenticación buscando cualquier input type=password. Genera una contraseña por página, rellena todos los campos coincidentes con el mismo valor, define autocomplete=new-password y añade al formulario un marcador oculto mprcustpass_auto=1.
- Modo oculto: el wrapper del campo de contraseña se oculta y se marca
aria-hidden. - Modo opcional en código: el campo se muestra con el valor generado y un mensaje informativo, pero el script define el campo como
readonly. - Formularios dinámicos de checkout: un
MutationObserverreprocesa campos de contraseña insertados recientemente, y el script protege los valores generados al enviar y con una comprobación periódica.
Sí, puede enviar por email la contraseña generada cuando el modo de email está configurado para enviar contraseña. El hook de alta de cuenta de PrestaShop solo envía ese email cuando el formulario enviado incluye el marcador de autogeneración del módulo, así que las cuentas de cliente normales no se procesan accidentalmente.
El EMAIL_MODE predeterminado es send_password. Cuando se ejecuta actionCustomerAccountAdd, el módulo primero comprueba que esté activado y luego busca mprcustpass_auto en el formulario enviado. Ese marcador lo añade JavaScript solo después de rellenar campos de contraseña, así que la ruta de email queda ligada a contraseñas generadas por el módulo.
Para el email de contraseña, el módulo lee primero la contraseña enviada desde password y recurre a passwd para formularios antiguos de PrestaShop. Si ninguno está presente cuando llega el hook, retorna sin enviar. Cuando envía, usa la plantilla de correo mprcustomerpassword_account y pasa nombre, apellidos, email, contraseña generada, nombre de tienda y URL de tienda del cliente.
Hay dos alternativas importantes. Con EMAIL_MODE=silent, el hook sale sin enviar email de contraseña. Con EMAIL_MODE=setup_link, envía un enlace de restablecimiento/configuración en lugar de la contraseña generada. Los comerciantes que no quieran enviar contraseñas por email deben usar setup-link o modo silent en lugar del modo predeterminado send-password.
Sí, el módulo puede enviar un enlace de configuración en lugar de la contraseña generada. En modo setup-link de PrestaShop crea un token de restablecimiento, almacena un valor de validez de 24 horas en el registro del cliente o campos legacy, y envía al cliente un enlace a la página de contraseña.
Esta ruta se selecciona con EMAIL_MODE=setup_link. El mismo hook de alta de cuenta y marcador mprcustpass_auto siguen aplicándose, así que el email de configuración solo se envía para cuentas donde el script frontal del módulo generó y envió los campos de contraseña.
En objetos de cliente de PrestaShop nuevos que exponen reset_password_token, el módulo crea un token desde random_bytes(32), lo hace apto para URL sustituyendo caracteres base64 inseguros, lo almacena en reset_password_token, define reset_password_validity a 24 horas en el futuro, actualiza el cliente y construye una URL de página de contraseña con token, id_customer y reset_token.
Para la ruta legacy, el módulo crea un token MD5, actualiza directamente los campos reset_password_token y reset_password_validity de la tabla customer con una ventana de validez de 24 horas, y construye la URL de página de contraseña con token e id_customer. El email usa la plantilla mprcustomerpassword_setup con {setup_link}, valores de identidad del cliente, nombre de tienda y URL de tienda.
La contraseña generada sigue usándose para permitir que PrestaShop cree la cuenta durante checkout o registro. La diferencia es lo que el cliente recibe después: el modo setup-link envía un enlace para elegir contraseña, mientras que el modo send-password envía la propia contraseña generada.
No, el modo opcional muestra la contraseña generada, pero el script actual deja el campo como solo lectura. En PrestaShop el modo oculto esconde el bloque de contraseña, mientras el modo opcional muestra el valor con una nota informativa.
Añade un Facebook Page Access Token y Page ID, y luego activa el feed. En PrestaShop el módulo obtiene publicaciones desde Facebook Graph API y puede renderizarlas en hooks de home, footer, columna izquierda o columna derecha.
El formulario de conexión espera un Page Access Token y Page ID. La ayuda admin dirige a los comerciantes hacia una app Facebook Developer con acceso Pages API y permisos pages_read_engagement y pages_read_user_content. Page Name es opcional y se usa para la cabecera del feed cuando se proporciona.
- El hook de display predeterminado es
displayHome, pero el módulo también soportadisplayFooterBefore,displayFooter,displayLeftColumnydisplayRightColumn. - El recuento predeterminado de publicaciones es
6, el layout predeterminado es una cuadrícula de 3 columnas, y la caché compartida del feed tiene por defecto3600segundos. - Si falta el access token o Page ID, la obtención desde Facebook API no devuelve publicaciones, así que el bloque de front office no tiene nada que renderizar.
MPRFB_ACCESS_TOKEN=your-page-token
MPRFB_PAGE_ID=your-page-id
MPRFB_DISPLAY_HOOK=displayHome
MPRFB_POST_COUNT=6Cuando está configurado, el módulo llama a Facebook Graph API v21.0 para las publicaciones de la página, almacena el feed normalizado en caché y solo renderiza en el hook seleccionado en los ajustes del módulo.
Sí, puede mostrar texto de publicación, medios, fecha, reacciones, compartidos, comentarios e información de autor. En PrestaShop estas opciones de visualización se configuran por separado, y las publicaciones compartidas pueden excluirse cuando el ajuste EXCLUDE_SHARED está activado.
Los interruptores relevantes son ajustes separados como SHOW_TEXT, SHOW_MEDIA, SHOW_DATE, SHOW_REACTIONS, SHOW_SHARES, SHOW_COMMENTS y SHOW_AUTHOR. El texto está activado por defecto y se trunca con puntos suspensivos cuando supera TEXT_LENGTH, que por defecto es 200 caracteres.
- Los medios se extraen primero de attachments y subattachments de Facebook, con
full_pictureusado como fallback. - Los recuentos de reacciones, comentarios y compartidos vienen de los campos summary devueltos por Facebook, así que los recuentos mostrados dependen de lo que incluya la respuesta API.
- Cuando
EXCLUDE_SHAREDestá activado, se omiten publicaciones constatus_typeigual ashared_story. - Las publicaciones sin texto de mensaje ni imagen se omiten antes de renderizar.
Esto importa porque un comerciante puede construir un bloque compacto de prueba social solo con imágenes y recuentos de engagement, o un feed editorial más completo con captions, fechas y atribución de página.
Los proyectos aprobados admiten votación de la comunidad y comentarios anidados. El número de votos y de visitas se guarda por proyecto, lo que ofrece una señal sencilla de qué trabajos de clientes despiertan más interés.
Sí. El módulo cachea el feed de Facebook en un archivo JSON llamado mprfb_feed_cache.json. La caché almacena un timestamp cached_at y los posts obtenidos, y luego reutiliza esas publicaciones hasta que caduca la duración configurada.
Cache file: mprfb_feed_cache.json
Duration setting: MPRFB_CACHE_DURATION=3600
Admin refresh: submitMprfbSync clears the file; the next front-office feed load fetches fresh posts and writes cached_at + postsLa duración predeterminada de caché en el trait compartido del feed es 3600 segundos. El formulario de configuración del módulo expone duraciones comunes como 30 minutos, 1 hora, 2 horas, 6 horas, 12 horas y 24 horas. Las acciones admin refresh y clear-cache eliminan ambas el archivo de caché, así que la siguiente solicitud de feed se fuerza de vuelta a la fuente de Facebook en lugar de servir publicaciones cacheadas obsoletas.
La caché es independiente de la solicitud, así que los compradores normales no disparan una llamada a Facebook API en cada página vista. Si el archivo de caché falta, está vacío, tiene JSON inválido o es más antiguo que la duración configurada, el trait compartido de feed lo trata como caducado y vuelve a obtener datos. Guardar configuración relacionada con el feed también limpia la caché del feed, lo que evita mezclar cambios de layout o recuento con datos antiguos de publicaciones.
Para tiendas con tráfico, esta es la protección principal contra cargas de página lentas y presión API evitable. Para lanzamientos de campaña, usa la acción admin refresh después de publicar en Facebook si quieres que el bloque del storefront recoja contenido nuevo inmediatamente en lugar de esperar a la siguiente caducidad de caché.
Sí, puede publicar entradas de blog en Facebook, pero el flujo de autopublicación está construido alrededor de entradas de MPR Blog Revolution, no de cualquier módulo de blog de terceros posible. El módulo de Facebook usa el trait compartido de publicador social, escucha hooks de add y update de objetos PrestaShop, comprueba que auto-publish esté activado, comprueba si es un objeto Blog Revolution o estilo Post, y solo continúa cuando el objeto tiene status = 1.
La prevención de duplicados se almacena en la tabla mpr_social_publish. Antes de enviar, el módulo comprueba si mprfacebookpostsintegration ya ha publicado el tipo de objeto blog_post con ese ID de entrada en la plataforma facebook. Los envíos correctos se registran con el ID de publicación de plataforma, URL de plataforma, caption, URLs de medios y estado published, así que hooks add o update posteriores omiten la misma entrada en lugar de enviarla otra vez.
Los captions vienen de la plantilla de autopublicación del módulo Facebook. Los placeholders soportados son {title}, {excerpt}, {url} y {shop_name}. Si la entrada de blog tiene una imagen destacada, el publicador construye su URL de medio desde img/mprblogrevolution/posts/. Si faltan credenciales de Facebook, el publicador no está configurado o no se cumple una condición obligatoria de plataforma, la ruta de autopublicación retorna sin publicar.
El publicador específico de Facebook solo se configura cuando existen tanto PAGE_ID como ACCESS_TOKEN. Usa Facebook Graph API v21.0, soporta publicaciones de texto, enlaces y fotos/imágenes en la ruta implementada publish(), permite un elemento multimedia por envío y tiene un límite de caracteres de 63206. Una publicación solo de imagen se envía mediante el endpoint de fotos de página, mientras que las publicaciones de enlace o texto usan el endpoint feed de página.
Aunque getSupportedMediaTypes() actualmente lista video, el publicador implementado no sube vídeo ni llama a un endpoint de vídeos. Trata la publicación de vídeo como no soportada salvo que se añada una ruta real de publicación de vídeo.
MPRFB_AUTOPUBLISH=1
MPRFB_AUTOPUBLISH_CAPTION={title}
{excerpt}
Read more: {url}El módulo también omite su propia ruta de publicador cuando la toma de control más amplia de mprsocialrevolution está activa para Facebook, para que dos módulos sociales no intenten publicar la misma entrada de blog al mismo tiempo.
El módulo añade páginas dedicadas de galería, categoría, proyecto, envío y un área de cliente „mis proyectos“, cada una con su propia URL optimizada para SEO. Los proyectos aprobados destacados también pueden mostrarse en zonas seleccionadas de la tienda.
Todos los textos de la galería — categorías, proyectos y comentarios — se almacenan por idioma, por lo que la galería es totalmente multilingüe. El módulo funciona en PrestaShop de la 1.6.1 a la 9.x.
Sí, cada perfil de feed puede llevar su propio idioma, moneda, países objetivo y etiquetas. Es útil cuando una tienda vende en varios mercados con distinta redacción de catálogo o estructura publicitaria. Una separación clara de feeds también ayuda a los responsables a entender qué mercado genera ingresos y cuál necesita atención.
En el modelo de feed, cada perfil almacena id_lang, id_currency, id_shop, target_country, feed_label, content_language y sync_mode. Un feed nuevo usa por defecto ajustes franceses en el código fuente actual: target_country=FR, feed_label=FR y content_language=fr.
target_country=AE,AU,GB,US
feed_label=GB
content_language=en
sync_mode=file_only or apitarget_countryse normaliza a mayúsculas y puede ser un código de país de dos letras o una lista separada por comas.feed_labelse normaliza a mayúsculas y debe encajar con la forma de etiqueta de Google Merchant API: letras mayúsculas, números y guiones, hasta 20 caracteres.content_languagese normaliza a minúsculas y debe ser un código de idioma de dos letras para input de producto API.- Para sincronización API, perfiles de feed separados suelen ser más limpios cuando cada mercado necesita una etiqueta, moneda o idioma distinto.
El controlador frontal de feed sirve un feed específico por ID o nombre de archivo con un token, usa un TTL de caché predeterminado de 3600 segundos y puede regenerar con generate=1. Eso permite que una tienda PrestaShop mantenga feeds Merchant separados sin mezclar países, idiomas o etiquetas de campaña.
No, la descripción fuente dice que los valores numéricos internos de PrestaShop permanecen intactos por debajo. El módulo personaliza los números mostrados en facturas, albaranes de entrega y abonos. Si necesitas personalizar las propias referencias de pedido, la fuente recomienda usar el producto separado Custom Order Numbering.
El módulo de facturas confirma esa división en código: hookActionSetInvoice genera y registra la referencia de factura formateada, pero deja intencionadamente el número de factura almacenado por PrestaShop como numérico/nativo. La cadena formateada mostrada se suministra después mediante actionInvoiceNumberFormatted, y la generación de albarán almacena el valor de contador numérico en order_invoice.delivery_number.
Default invoice format: {DOC_TYPE}/{YYYY}/{NNNNNN}
Default delivery format: {DOC_TYPE}/{YYYY}/{NNNN}
Default credit slip format: {DOC_TYPE}/{YYYY}/{NNNN}Los valores generados se registran en mprinvoicenumber_number con tipo de documento, IDs de pedido, factura o abono, valor de contador, patrón y número formateado. Eso te da documentos personalizados visibles para el cliente sin cambiar IDs de pedido ni referencias aleatorias de pedido; eso lo gestiona mprordernumber.
El módulo genera un indicador mediante displayProductListReviews. Su JavaScript encuentra la miniatura de producto contenedora e inyecta un badge Bundle en el área de imagen.
La pestaña lista los productos incluidos configurados en una cuadrícula. Cada tarjeta puede mostrar imagen del producto, nombre del producto, precio formateado o FREE para precio cero, y un enlace al producto incluido.
Incluye un helper dispatcher para rutas rewrite-only. Cuando una ruta no tiene ID, puede resolver slugs coincidentes de categoría, producto, CMS o fabricante y actualizar los parámetros de request en consecuencia.
Sí. El formulario admin almacena el flag enabled, y cada hook front termina antes cuando isFeatureEnabled() es false.
La ruta server-side requiere que CAPI esté activado y que haya un Reddit access token configurado. El Events Testing ID es opcional y se usa solo cuando está presente.
No, la fuente describe eventos del navegador y eventos del lado del servidor funcionando en paralelo con IDs de conversión compartidos. La ruta del lado del servidor puede ayudar a reducir huecos cuando el seguimiento del navegador está bloqueado, mientras que el píxel del navegador sigue capturando el comportamiento del cliente. Usar ambos con cuidado da a Reddit señales más completas que usar solo un píxel pegado.
El seguimiento del navegador se prepara en los hooks de cabecera y de confirmación de pedido. El módulo puede emitir eventos como PageVisit, ViewContent, Search, SignUp, InitiateCheckout, eventos puente de tipo add-to-cart y Purchase. Cuando Conversions API está activada, los eventos correspondientes se encolan del lado del servidor con la misma identidad: los parámetros del navegador usan conversionId, mientras que la carga de la API guarda conversion_id en los metadatos del evento.
- Se requiere un Reddit Pixel ID para el seguimiento del navegador.
- Conversions API también requiere un token de acceso, y el módulo envía al endpoint de conversiones de Reddit para el píxel configurado.
- Las comprobaciones de exclusión de empleados y consentimiento de marketing pasan por
canTrack()antes de preparar el seguimiento del front office. - El límite predeterminado de lote de la cola CAPI es
20, mientras que las rutas puente del front y de compra procesan lotes pequeños de inmediato.
La configuración práctica es mantener activo el píxel del navegador para los eventos normales del cliente y usar Conversions API como señal complementaria del lado del servidor, no como sustituto.
El módulo mapea directamente la mayoría de acciones estándar, mientras que InitiateCheckout se envía como evento personalizado de Reddit llamado InitiateCheckout en el mapeo server-side.
Sí. La configuración incluye exclusión de empleados, y la barrera de seguimiento la comprueba antes de construir la salida del pixel front o permitir eventos por la ruta de seguimiento del módulo.
La lista de hooks disponible cubre displayHome, displayFooterCategory, displayLeftColumn, displayRightColumn, displayFooterBefore, displayFooterProduct, displayProductAdditionalInfo, displayOrderConfirmation2 y displayCrossSellingShoppingCart.
Sí, la descripción de la fuente incluye colecciones de productos curadas y widgets dinámicos. Las colecciones seleccionadas a mano son útiles para campañas, merchandising editorial y promociones centradas en el margen. Las fuentes dinámicas son útiles cuando quieres que los más vendidos, las novedades o los productos que vuelven a estar disponibles se mantengan actualizados con menos trabajo manual.
Las colecciones curadas se almacenan por separado de los widgets. La tabla colección-producto guarda id_collection, id_product y position, y setProducts() reescribe esa lista en el orden guardado por el administrador. Después, un widget puede usar el tipo de widget collection y apuntar a la colección elegida.
- Los tipos de colección incluyen
curated,staff_picks,seasonalyspotlight. - Las consultas públicas de colecciones devuelven productos activos de la tienda y conservan el orden colección-producto guardado.
- Si el widget requiere imágenes, el proveedor filtra los productos sin una imagen utilizable.
- Los tipos de widget automáticos con proveedores de productos implementados incluyen
bestsellers,new,sale,featured,trending,back_in_stockycart_recommendations. recently_viewedaparece como tipo/etiqueta de widget en el modelo, perogetProducts()todavía no tiene un caso de proveedor para él, así que no debería presentarse como una lista automática funcional hasta que se añada esa implementación.
Esto significa que puedes seleccionar a mano una colección de campaña para la página de inicio o un bloque de página de producto, y seguir usando bloques dinámicos implementados en otras zonas de la misma tienda PrestaShop.
Sí. El modelo del widget guarda hide_products_without_images, y las consultas de producto/el ensamblaje del provider usan esa bandera para exigir una imagen de portada de tienda en muchas fuentes de widget.
El módulo escucha actionUpdateQuantity. Cuando la cantidad de un producto pasa de cero o menos a un valor positivo, inserta una fila en mprshowcaserevolution_stock_change, que puede usar la fuente de productos de nuevo en stock.
Instala y activa el módulo para añadir un botón Ask a question en las páginas de producto de PrestaShop. Se renderiza mediante el hook displayProductAdditionalInfo, abre un formulario modal junto a la información del producto y pasa el nombre del producto, la referencia y el ID de producto a la consulta.
Durante la instalación, el módulo guarda ENABLED=1, define RECIPIENT_EMAIL a partir de PS_SHOP_EMAIL y usa [Product Question] como prefijo de asunto predeterminado. El hook asigna el nombre del producto, la referencia del producto, el ID del producto, la URL AJAX y un valor de token oculto a la plantilla Smarty.
- Hook del front:
displayProductAdditionalInfo. - Endpoint AJAX:
module/mpraskaboutproduct/ask. - Ajustes de administración: interruptor de activación, email del destinatario y prefijo del asunto.
El resultado es un formulario de consulta específico del producto en la página de producto, de modo que el comerciante recibe el mensaje con contexto del producto en lugar de una solicitud de contacto genérica.
Sí, los clientes envían la consulta de producto directamente desde el modal del escaparate. El front controller de PrestaShop recibe el nombre del remitente, email del remitente, mensaje, nombre del producto e ID del producto por AJAX, y luego devuelve un mensaje JSON de éxito o error sin obligar al cliente a abrir un cliente de correo.
La plantilla envía una petición FormData al front controller del módulo y actualiza el modal con la respuesta JSON. Si todo va bien, el formulario se reinicia y el cliente ve el mensaje de éxito; si hay un fallo de validación o de correo, el mismo modal muestra el error devuelto.
- La petición se considera inválida si falta el marcador de envío esperado
sender_email. - El controlador envía al destinatario configurado del módulo o recurre al email de la tienda.
- Si existe la plantilla de correo
questiondel módulo, se usa; de lo contrario, el código recurre a la plantilla principalcontactde PrestaShop.
Esto mantiene la consulta dentro del flujo del escaparate de PrestaShop y conserva el nombre del producto y el ID del producto en el cuerpo del email.
Valida la consulta en el front controller AJAX antes de enviar el email. Una petición debe enviar sender_email, y los campos obligatorios son sender_name, sender_email y message. El email se comprueba con Validate::isEmail() de PrestaShop, y el mensaje se comprueba con Validate::isCleanHtml().
POST /module/mpraskaboutproduct/ask sender_name=Alice&sender_email=alice@example.com&message=Can you confirm availability?&id_product=42&product_name=Demo product- Si falta el marcador de envío
sender_email, devuelve{"success":false,"message":"Invalid request."}. - Si el nombre, email o mensaje están vacíos, devuelve
{"success":false,"message":"All fields are required."}. - Un email inválido devuelve
{"success":false,"message":"Invalid email address."}. - HTML inseguro en el mensaje devuelve
{"success":false,"message":"Invalid message content."}.
Si la validación pasa, el módulo envía la consulta al email de destinatario configurado, recurriendo al email de la tienda cuando no hay destinatario del módulo definido.
Después de la validación, el controlador construye el asunto del email a partir del prefijo de asunto configurado más el nombre del producto enviado. El mensaje se escapa y se convierte con nl2br() para la plantilla de email. El nombre del producto y el ID del producto se incluyen en las variables del correo, para que el equipo pueda identificar el artículo sin pedir al cliente que vuelva a enviar detalles.
El modal incluye un campo de token oculto, pero la ruta actual del controlador valida los campos de la petición y el contenido del mensaje en lugar de comprobar ese token. Si se necesita una protección anti-spam más fuerte, añádela alrededor del formulario del front en lugar de asumir que este controlador realiza una comprobación de token CSRF.
Sí, el módulo te permite definir el email de destinatario y el prefijo de asunto para las preguntas de producto. Si no se configura ningún destinatario, el front controller de PrestaShop recurre a la dirección de email de la tienda y luego envía el mensaje con el contexto del producto incluido.
La clase de configuración expone RECIPIENT_EMAIL y SUBJECT_PREFIX. Durante la instalación, RECIPIENT_EMAIL se inicializa desde PS_SHOP_EMAIL, y SUBJECT_PREFIX usa por defecto [Product Question]. En el front controller, un destinatario vacío se sustituye por Configuration::get('PS_SHOP_EMAIL').
Recipient: mpraskaboutproduct.RECIPIENT_EMAIL or PS_SHOP_EMAIL
Subject: SUBJECT_PREFIX + product nameEsto es útil cuando las preguntas de producto deben ir a una bandeja de ventas, al equipo técnico o a un proveedor en lugar de a la dirección principal de contacto de PrestaShop.
Sí. Las reseñas se comprueban antes de guardarse, y las comprobaciones fallidas devuelven un error de validación en lugar de aceptar la reseña en silencio. La fuente incluye estas protecciones:
- Límite por misma IP: cuando
MIN_TIME_BETWEENes mayor que cero, el módulo comprueba si la misma IP ha publicado otra reseña en esa tienda dentro del número de segundos configurado. - reCAPTCHA: cuando está activado, el módulo verifica con Google el token enviado. Soporta v2 y v3; v3 usa un umbral de puntuación de
0.5. Un token ausente falla la comprobación, mientras que una clave secreta ausente o un problema de verificación de red se trata como no bloqueante. - Comprobaciones de enlaces y etiquetas: se rechaza el contenido con más de dos URLs, y se bloquea HTML incrustado evidente como
<script>,<iframe>,<object>,<embed>y<form>.
La protección de tiempo mínimo es una comprobación de tiempo entre reseñas para la misma IP, no un temporizador de carga del formulario. Para usar reCAPTCHA como protección activa, actívalo y configura la clave del sitio y la clave secreta en los ajustes del módulo.
El flujo de envío más amplio añade más salvaguardas prácticas. Las reseñas requieren un tipo de entidad válido, ID de entidad, contenido de al menos 10 caracteres y una valoración de 1 a 5. Las reseñas de invitados están desactivadas por defecto, y los clientes conectados no pueden reseñar dos veces la misma entidad salvo que la reseña anterior se haya marcado como spam.
MODERATIONusa por defecto1, así que las nuevas reseñas se guardan comopendingsalvo que la moderación esté desactivada.MIN_TIME_BETWEENusa por defecto30segundos.- Para reseñas de producto de clientes conectados, el módulo puede marcar una reseña como compra verificada cuando encuentra un pedido válido que contiene ese producto.
- Las subidas de fotos, cuando están activadas, se restringen a JPEG, PNG y WebP, con límites predeterminados de 3 imágenes y 2 MB por imagen.
Aun así, no es un sistema de detección de fraude. El código proporciona limitación de frecuencia, reCAPTCHA, comprobaciones de contenido, prevención de duplicados, marcado de compra verificada y moderación, por lo que los comerciantes deberían mantener la moderación activada cuando la calidad de las reseñas sea importante.
Sí, las reseñas no se limitan a las páginas de producto. El módulo incluye manejo de entidades para reseñas de producto, categoría, CMS y tienda, además de una ruta pública de reseñas, con cada área de visualización controlada por configuración y renderizada mediante hooks o controladores del front office de PrestaShop.
El modelo de datos guarda reseñas con entity_type y entity_id, y el servicio de envío acepta product, category, cms y store como tipos de entidad válidos. La página de ajustes tiene interruptores separados para PRODUCT_REVIEWS, CATEGORY_REVIEWS, CMS_REVIEWS y STORE_REVIEWS; en los valores actuales, solo las reseñas de producto están activadas por defecto.
La integración automática en página de producto es la ruta más completa en el código inspeccionado: las reseñas de producto se renderizan mediante displayProductExtraContent, las estrellas en listados mediante displayProductListReviews, y la insignia de valoración del producto mediante hooks de página de producto. La página pública de reseñas se expone como /reviews y puede filtrar reseñas aprobadas por type=product, category, cms o store.
Allowed entity types: product, category, cms, store
Public route: /reviews
Filtered examples: /reviews?type=category or /reviews?type=storePara la colocación en categorías, CMS y tienda, planifica cuidadosamente la ubicación en el front office. La fuente soporta esos registros de reseña y el centro de reseñas, pero las páginas de producto tienen la cobertura de hooks integrada más fuerte en los archivos inspeccionados.
Sí, los recordatorios pueden crearse después de que un pedido alcance el estado entregado configurado. El hook de estado de pedido de PrestaShop programa recordatorios solo cuando la función de recordatorios está activada, y el módulo guarda filas de recordatorio con datos de pedido, cliente, retraso y estado de reseña.
Más concretamente, el hook inspeccionado escucha actionOrderStatusPostUpdate y comprueba si el nuevo estado de pedido de PrestaShop tiene activada su bandera delivery. Cuando REMINDERS_ENABLED está activo, carga los productos del pedido y crea una fila de recordatorio por producto mediante ReviewReminder::createForOrder().
REMINDERS_ENABLEDusa por defecto0.REMINDER_DELAY_DAYSusa por defecto7.- Se omiten filas duplicadas para el mismo pedido y producto.
- Se omiten los productos ya reseñados por ese cliente.
- Cada fila de recordatorio guarda un token de 64 caracteres y un estado como
pending,sentoreviewed.
El modelo también incluye helpers para encontrar recordatorios pendientes después del retraso configurado, marcar recordatorios como enviados, marcarlos como reseñados y cargar un recordatorio por token. En los archivos inspeccionados encontré la programación y el modelo de datos, pero no un flujo cron completo de envío de emails que llame a esos métodos helper.
Sí, el módulo incluye gestores de reseñas externas para Google Business Profile y Trustpilot. Cuando se configuran las credenciales de API requeridas, las reseñas externas pueden sincronizarse en tablas locales de reseñas externas y luego mostrarse o agregarse según los ajustes del módulo de PrestaShop.
La tabla de reseñas externas guarda fuente, ID de reseña de la fuente, autor, título, contenido, valoración, URL de la fuente, fecha de publicación, idioma, ID de producto opcional, ID de tienda, datos API sin procesar y marcas temporales de sincronización. Una clave única sobre source más source_review_id evita importaciones duplicadas cuando se vuelve a obtener la misma reseña.
- La sincronización de Trustpilot requiere
EXT_TRUSTPILOT_ENABLED, una clave API y Business Unit ID. El proveedor también tiene una alternativa de importación CSV para exportaciones de Trustpilot. - La sincronización de Google Business Profile requiere
EXT_GOOGLE_ENABLED, JSON de cuenta de servicio que contengaclient_emailyprivate_key, además de Account ID y Location ID. - El controlador cron se ejecuta en
/module/mprcomments/cron?token=EXT_CRON_TOKEN&action=syncy devuelve resultados de sincronización por fuente como JSON. - Las reseñas externas de empresa pueden mostrarse en páginas de producto, cargarse de forma diferida por defecto y contarse opcionalmente en insignias de valoración de producto cuando la agregación externa está activada.
Por seguridad SEO, el renderizador de schema usa reseñas nativas de producto para los datos estructurados Product. Las reseñas de empresa importadas pueden mostrarse a los compradores, pero los comentarios de la fuente las mantienen explícitamente fuera del marcado de reseñas de producto salvo que el comerciante tenga reseñas nativas de producto.
No, los proyectos enviados no se publican automáticamente por defecto. En PrestaShop, el ajuste auto_approve usa por defecto 0, así que los nuevos proyectos se guardan como pendientes y las consultas de la galería pública usan el estado de proyecto aprobado antes de mostrarlos.
El controlador de envío requiere autenticación de cliente y un token de seguridad válido antes de crear un proyecto. Valida el título del proyecto, exige al menos una imagen subida y aplica el límite configurado de número de imágenes antes de guardar el proyecto. Los ajustes de imagen predeterminados son max_images=20 y max_image_size_mb=5.
Default: auto_approve=0
Submitted project status: pending
Public gallery status filter: approved- Si
auto_approvesigue desactivado, el cliente es redirigido a My Projects después del envío y el proyecto espera moderación. - Si
auto_approveestá activado, el mismo flujo de envío guarda el nuevo proyecto con estadoapproved. - La lista de administración de proyectos soporta acciones masivas de aprobar, rechazar, destacar y eliminar.
- El controlador público de proyecto devuelve un 404 para proyectos no aprobados salvo que una sesión de vista previa de administrador sea válida.
Para la mayoría de tiendas, dejar la aprobación automática desactivada es el valor predeterminado más seguro, porque los títulos, descripciones y fotos enviados por clientes se revisan antes de aparecer en el escaparate público.
Sí, los administradores pueden añadir pines de producto a imágenes del escaparate. En PrestaShop cada pin guarda coordenadas x e y de la imagen, una etiqueta y IDs de producto de respaldo ordenados, y luego resuelve un producto activo y con stock para la visualización pública del proyecto.
El controlador de pines de administración añade, actualiza, elimina y carga pines mediante AJAX JSON. Las coordenadas deben estar entre 0 y 100 y se redondean a dos decimales. Los IDs de productos de respaldo se normalizan, se deduplican y se guardan como JSON, con el primer ID escrito también en el campo heredado id_product.
Pin fields: id_showcase_image, id_product, product_fallback_ids, x_percent, y_percent, label, position
Resolution order: first active in-stock product, then first active product- La búsqueda de productos en administración devuelve productos activos por nombre, referencia o ID de producto, limitada a 20 resultados.
- En la página pública del proyecto, los pines se enriquecen con URL del producto, imagen de portada y precio formateado.
- El endpoint AJAX de pines del front también puede renderizar la plantilla de miniatura de producto del tema cuando está disponible.
- Si todos los productos de respaldo están inactivos, el pin mantiene su posición pero no resuelve ningún producto.
Esto permite al comerciante convertir una imagen de galería de cliente en un lookbook comprable, manteniendo una lista de respaldo para productos sin stock o desactivados.
Sí, se evitan votos duplicados del mismo cliente en un proyecto. En PrestaShop la tabla de votos tiene una clave única por proyecto y cliente, y el modelo actualiza el voto existente en lugar de insertar otra fila.
Sí. Una página de proyecto de Customer Showcase que no sea vista previa puede generar JSON-LD cuando el controlador de proyecto tiene suficientes datos para construirlo. El controlador recopila el título del proyecto, una meta descripción de página resuelta, la URL canónica del proyecto, URLs de imágenes grandes del escaparate y el nombre de la categoría, y luego la plantilla del front imprime el JSON en un script application/ld+json cuando project_schema_json no está vacío.
{"@context":"https://schema.org","@type":"ImageGallery","name":"Bathroom renovation","description":"Short project summary","url":"https://shop.example/showcase/bathroom-renovation","mainEntityOfPage":"https://shop.example/showcase/bathroom-renovation","image":["https://shop.example/img/showcase/large/photo.jpg"],"about":"Bathrooms"}El tipo de schema usado por el módulo es ImageGallery, por lo que describe la galería de proyecto del cliente en lugar de afirmar un schema separado de producto, servicio o reseña.
El controlador omite deliberadamente el schema en modo vista previa: las páginas de vista previa reciben un valor project_schema_json vacío y el helper de vista previa aplica manejo noindex. En páginas normales de proyecto, las URLs de imágenes grandes se construyen desde img/showcase/large/ usando el dominio SSL de la tienda y el URI base, así que los datos estructurados apuntan a URLs absolutas de imagen en lugar de a los archivos thumbnail o medium usados en otras partes de la página.
- Fuente de la descripción: el JSON-LD usa la meta descripción de página resuelta. Es la meta descripción guardada del proyecto cuando existe; de lo contrario, el controlador genera una descripción de customer-showcase basada en el título. La descripción del proyecto limpiada y truncada es solo un último recurso dentro de
buildProjectSchema()si la meta descripción resuelta sigue vacía. - Campos opcionales:
imagese incluye solo cuando existen imágenes de proyecto, yaboutse incluye solo cuando el proyecto tiene nombre de categoría. - Seguridad de salida: el JSON se genera con
json_encode(..., JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE)y recurre aTools::jsonEncode()si hace falta, luego Smarty imprime ese JSON preparado sin filtrar dentro del script JSON-LD.
No. El módulo solo implementa el código de Google Customer Reviews en el lado de PrestaShop; no contiene ningún código que pueda inscribir, aprobar o hacer elegible una tienda en Google Merchant Center. Necesitas que el programa Google Customer Reviews esté disponible para la tienda en Merchant Center, un Merchant ID numérico y datos de pedido que Google acepte para la invitación a la encuesta.
Lo que el módulo puede controlar es la implementación en el escaparate una vez que existen esos requisitos: guarda el Merchant ID, carga la invitación de encuesta de Google en la página de confirmación de pedido, envía el ID de pedido, email del cliente, país de entrega, fecha estimada de entrega y valores GTIN de producto del pedido, y renderiza la insignia de valoración en la posición configurada.
El envío de encuestas, la aprobación del programa, el cálculo de seller rating y cómo aparecen las valoraciones en las propiedades de Google siguen bajo control de Google. El módulo puede hacer que aparezcan el código de invitación y la insignia, pero no puede aprobar la tienda ni obligar a Google a mostrar valoraciones.
Al instalarse, el módulo empieza desactivado con MERCHANT_ID vacío, una posición predeterminada de insignia BOTTOM_RIGHT e idioma de insignia en. La guarda del escaparate requiere tanto ENABLED como un Merchant ID no vacío, así que un módulo instalado pero sin configurar no generará el código de invitación ni de insignia.
- Invitación en confirmación de pedido: el hook se ejecuta solo para un pedido cargado, usa el email del cliente del pedido, lee el país de entrega desde la dirección de entrega, usa una fecha estimada de entrega simple de hoy más siete días y pasa el
ean13de cada producto pedido como valor GTIN. - Insignia: el hook de cierre del body renderiza la insignia de valoración de Google con el ID de comerciante configurado y una de las posiciones soportadas, como
BOTTOM_RIGHT,BOTTOM_LEFToINLINE. - Límite: si los productos no tienen valor EAN13, el módulo sigue enviando la entrada de producto con un GTIN vacío; si Google acepta o usa esos datos de producto se gestiona fuera de PrestaShop.
No automáticamente. El módulo ofrece vista previa e historial, pero la fuente no contiene un rollback de un clic que restaure todos los productos a su precio anterior. Antes de aplicar una actualización masiva, usa la vista previa para revisar los IDs de producto afectados, el precio actual, el nuevo precio calculado y la diferencia.
- Antes de aplicar: exporta o haz una copia de seguridad de los IDs de producto afectados y del campo de precio que vas a cambiar, especialmente si estás actualizando un alcance amplio como todos los productos, una categoría o un fabricante.
- Después de aplicar: el módulo escribe una entrada de registro con la fórmula, alcance, campo de precio, número de afectados, empleado y fecha.
- Si necesitas deshacer: usa el registro para identificar la ejecución y luego restaura desde tu copia/exportación. Aplicar la fórmula inversa puede ser arriesgado porque el redondeo, las ediciones posteriores de precio y los cambios de alcance de producto pueden hacer que el cálculo inverso difiera de los valores originales.
Para cambios de alto riesgo, ejecuta la vista previa, exporta el mismo conjunto de productos y aplica la actualización en un periodo tranquilo para que cualquier corrección pueda hacerse desde valores de origen conocidos.
La vista previa y la actualización real usan el mismo helper de cálculo, así que los números que previsualizas se basan en las mismas acciones de fórmula que luego se aplican: increase_percent, decrease_percent, increase_fixed y decrease_fixed. Las reducciones porcentuales y fijas se limitan a cero, y los precios calculados se redondean a seis decimales antes de escribirse.
increase_percent:10 => current price * 1.10; decrease_fixed:5 => max(0, current price - 5)Al aplicarse, el módulo actualiza tanto product como product_shop para el campo seleccionado, y solo soporta price o wholesale_price. El selector de alcance puede apuntar a todos los productos activos o a productos activos de una categoría, fabricante o proveedor seleccionado; los productos inactivos no se seleccionan en las consultas de alcance.
El hook permite URLs que contienen module/mprpasswordprotect o module-mprpasswordprotect, y también retorna cuando el parámetro module del request coincide con el nombre del módulo.
La clase de configuración expone activar protección por contraseña, contraseña, mensaje, bypass de empleado/mantenimiento y switches noindex mediante el formulario OptionsManager.
Sí. La instalación crea una página meta no configurable para module-mprpasswordprotect-gate con título Password Required y URL rewrite password.
El controlador gate establece un flag de error y vuelve a renderizar el mismo template de contraseña, que muestra el mensaje traducido Incorrect password. Please try again..
No. El controlador de reenvío envía el email de confirmación de pedido reconstruido y registra un mensaje privado, pero no llama a ninguna lógica de cambio de estado de pedido.
Antes de enviar, el controlador AJAX exige un ID de pedido y un token del módulo, valida ambos, carga el pedido y el cliente, y luego llama a Mail::Send() estándar de PrestaShop con la plantilla order_conf desde _PS_MAIL_DIR_ y el ID de tienda original del pedido.
- Productos: reconstruye filas de producto en HTML y texto plano desde
$order->getProducts(), incluyendo nombre del producto, referencia opcional, cantidad, precio unitario con impuestos y precio total con impuestos. - Direcciones: los bloques de entrega y factura se generan con
AddressFormat::generateAddress(), con una alternativa construida desde empresa, nombre, calle, código postal y ciudad si falla el formato de dirección. - Pista de auditoría: después de un reenvío correcto añade un mensaje privado al pedido y escribe una entrada de log de PrestaShop; si falla el envío del correo, devuelve un error JSON en lugar de cambiar el estado del pedido.
El módulo envía la plantilla estándar de PrestaShop order_conf mediante Mail::Send, después de reconstruir filas de productos, direcciones, totales, transportista y valores de pago desde el pedido.
Tras un envío correcto, el módulo crea un mensaje privado de pedido indicando que la confirmación se reenvió, incluyendo el email del destinatario y la marca de tiempo.
El módulo debe estar activado y PHONE_NUMBER debe estar definido. Su validador de configuración obligatoria espera solo dígitos y un signo más inicial opcional, por ejemplo +1234567890.
Sí. El trait de chat compartido admite filtros de página all, product, category y checkout mediante el ajuste PAGES.
No. La plantilla renderizada crea un enlace normal a Signal y usa CSS local del módulo más SVG inline para el botón. No hay ningún cargador JavaScript externo de Signal en la plantilla del hook.
Si DELAY es mayor que cero, la plantilla oculta inicialmente el widget y usa un timeout para mostrarlo después del número de segundos configurado.
El módulo guarda la elección de visualización del visitante en la cookie ligera mpr_tax_display y, al inicio del front controller, prepara la caché de visualización de precios por grupo de PrestaShop para que los cálculos de precios de producto se rendericen con impuestos incluidos o excluidos para esa petición. No actualiza carritos, pedidos, reglas fiscales, facturas ni grupos de clientes en la base de datos.
En páginas de producto/listado también inyecta datos ocultos .mpr-tax-prices con precios formateados con y sin impuestos, para que JavaScript pueda intercambiar los precios visibles inmediatamente. Si una página no tiene datos de precio de producto inyectados, como algunas páginas de carrito o checkout, el script guarda la preferencia y recarga para que PrestaShop renderice la página con el modo de visualización elegido.
El total del checkout y el importe de impuestos siguen siendo calculados por PrestaShop a partir del carrito, dirección, reglas fiscales y flujo normal de checkout. Este módulo afecta a la preferencia de visualización y etiquetas de precio, no al cálculo fiscal.
Activa el módulo para renderizar un botón fijo de volver arriba en el escaparate de PrestaShop. El código genera el botón desde hooks de footer/cierre de body, evita el renderizado duplicado cuando ambos hooks están disponibles e incluye el CSS y JavaScript necesarios para el botón.
Después de la instalación, los valores predeterminados son activado, mostrar después de 300 píxeles, estilo circle y posición right. El módulo registra displayFooter, displayFooterAfter y displayBeforeBodyClosingTag; el primer hook compatible que renderice tu tema generará el botón, y las llamadas posteriores a hooks devuelven una cadena vacía porque buttonRendered ya está definido.
La plantilla crea un único botón fijo con ID mprb2t-btn, una etiqueta/título accesible, un SVG inline de flecha hacia arriba y CSS/JavaScript inline. No hay regla de producto, categoría o página en este módulo, así que activarlo hace que el botón esté disponible allí donde el tema ejecute uno de esos hooks de footer/cierre de body.
Sí, puedes definir la distancia de scroll antes de que aparezca el botón. La configuración de PrestaShop guarda un valor Show After en píxeles, y el JavaScript del escaparate compara ese umbral con window.pageYOffset antes de añadir o quitar la clase visible del botón.
El umbral predeterminado es 300 píxeles, y el campo de administración se guarda como SHOW_AFTER. El valor se asigna a Smarty como mprb2t_show_after y se convierte en la variable JavaScript threshold en la plantilla.
if (window.pageYOffset > threshold) { btn.classList.add('mprb2t-visible'); } else { btn.classList.remove('mprb2t-visible'); }El listener de scroll se registra como pasivo y toggleBtn() también se ejecuta una vez inmediatamente después de cargar el script, por lo que el estado del botón es correcto incluso cuando un comprador aterriza en una página con ancla o vuelve a una posición ya desplazada.
Sí, el módulo soporta las opciones de estilo presentes en su configuración: forma circular o cuadrada y posición izquierda o derecha en pantalla. La plantilla de PrestaShop aplica esos valores a CSS inline; el código no incluye selector de color ni reglas de segmentación por página.
Los valores instalados por defecto son STYLE=circle y POSITION=right. En la plantilla, POSITION=left escribe left: 30px; cualquier otro valor configurado sigue la rama derecha y escribe right: 30px. Para la forma, STYLE=circle escribe border-radius: 50%, mientras que la opción cuadrada usa un radio pequeño de 6px.
- Dimensiones fijas: el botón mide 48 por 48 píxeles, está fijado en la parte inferior del viewport y usa
z-index: 9999. - Colores integrados: la plantilla usa fondo oscuro, color de icono blanco y un estado hover más oscuro. Esos valores están hardcodeados en la plantilla actual.
- Límite práctico: no hay ajuste para elección de icono, posición por dispositivo, duración de animación o colores personalizados en la clase de configuración.
Sí, al hacer clic en el botón la página se desplaza suavemente hasta arriba. El script del escaparate de PrestaShop escucha el clic del botón, evita la acción predeterminada y llama a window.scrollTo con top establecido en 0 y behavior establecido en smooth.
El manejador de clic es pequeño y directo: se vincula al botón generado mprb2t-btn, llama a e.preventDefault() y luego pide al navegador que se desplace hasta arriba usando el desplazamiento suave nativo.
window.scrollTo({ top: 0, behavior: 'smooth' });Como el módulo usa el comportamiento nativo scrollTo del navegador en lugar de un bucle de animación personalizado, se mantiene ligero y no guarda ningún estado de scroll. El botón solo se vuelve visible después de superar el umbral configurado; hacer clic en él no recarga la página ni cambia la URL.
Usa MPR Compare para añadir una lista de comparación del lado del cliente a PrestaShop. Los IDs de productos seleccionados se guardan en localStorage del navegador bajo la clave mprcompare, mientras que el módulo solo consulta detalles de producto por AJAX cuando la página de comparación o las miniaturas flotantes necesitan datos.
El comentario de cabecera del propio módulo describe el diseño como cero almacenamiento en base de datos y cero cookies para la interacción en páginas de listado. Los hooks de lista de productos y página de producto generan botones estáticos con un atributo data-id-product; el script del navegador añade o elimina esos IDs de localStorage y actualiza localmente el estado de los botones, contadores y barra flotante.
El servidor solo interviene cuando se necesitan datos reales del producto. La página de comparación lee los IDs desde localStorage y los envía al front controller actions con action=getProducts, mientras que las miniaturas flotantes llaman a action=getProductImage. Vaciar la lista de comparación simplemente guarda un array vacío de nuevo en localStorage.
La tabla de comparación puede mostrar el nombre del producto, URL, imagen de portada, precio actual, precio anterior, descripción corta, referencia, fabricante, peso, estado de stock, características, condición y EAN13 cuando esos valores existen. El controlador AJAX omite productos inactivos de PrestaShop.
Los datos vienen de objetos Product cargados en el idioma y la tienda actuales. Los precios se formatean desde Product::getPriceStatic() con impuestos activados; el precio anterior solo se devuelve cuando el precio sin reducción es mayor que el precio actual. Las imágenes de portada usan medium_default para la tabla de comparación y cart_default para el endpoint de miniatura flotante.
- Características: el controlador llama a
getFrontFeatures()y devuelve cada par nombre/valor de característica, mientras que el script del front agrupa nombres de característica únicos en filas de comparación. - Disponibilidad: el estado de stock se devuelve desde
Product::getQuantity($idProduct) > 0, así que es un indicador simple de con stock/sin stock. - Datos ausentes: campos opcionales como fabricante, referencia, peso, EAN13 y precio anterior quedan vacíos o se omiten en la tabla cuando PrestaShop no tiene valor para ellos.
Sí, el tamaño máximo de comparación es configurable. El ajuste MAX_ITEMS usa por defecto cuatro en la instalación, el script del front rechaza añadir más artículos cuando se alcanza el límite, y el endpoint AJAX de productos recorta los IDs entrantes al mismo máximo configurado.
Al instalar, MAX_ITEMS se crea con el valor 4; el controlador de administración lo guarda con un mínimo de 1. Ese valor se envía al navegador en mprCompareConfig.maxItems y también se asigna a la plantilla de la página de comparación como maxItems.
var max = config.maxItems || 4;La prevención de duplicados también es del lado del cliente: si el producto ya está en localStorage, la función de añadir vuelve sin agregarlo de nuevo. El endpoint AJAX aun así recorta la lista de IDs solicitada al máximo configurado, por lo que una petición editada manualmente no puede hacer que la página de comparación cargue más productos que el límite configurado.
Sí, añade controles de comparación mediante hooks de PrestaShop. El módulo renderiza botones en listas de productos y páginas de producto, un contador de navegación y una barra flotante opcional de comparación con miniaturas de producto, controles de eliminación y enlace a la página de comparación.
Para PrestaShop 1.7 y versiones más nuevas, el módulo registra hooks de medios, página de producto, navegación y cierre de body; para temas antiguos 1.6 usa los hooks heredados de header, botón de producto, nav y footer. Los botones de listado de productos son enlaces estáticos con js-mprcompare-toggle, los controles de página de producto son botones, y ambos usan el mismo valor data-id-product para el gestor de lista de JavaScript.
La barra flotante se controla con el ajuste SHOW_FLOATING, activado por defecto. Cuando hay productos seleccionados, el script muestra la barra, carga datos de miniatura por AJAX si no están ya en caché, renderiza botones de eliminación para productos individuales y mantiene sincronizados el contador de cabecera y el contador flotante con el número de IDs en localStorage.
Los clientes pueden enviar solicitudes de funciones desde la pestaña de la página de producto cuando el módulo y la visualización en producto están activados. En PrestaShop, el controlador AJAX valida token, producto, título, descripción y campos de identidad de invitado, y luego limita los envíos por producto e IP.
La pestaña de producto solo se añade cuando ENABLED y SHOW_ON_PRODUCT están activos y el módulo puede resolver el ID del producto. La pestaña empieza como un resumen/lista diferida, y el script del front solicita la primera página de elementos cuando la pestaña se vuelve visible, usando el valor configurado REQUESTS_PER_PAGE, que por defecto es 10.
- Seguridad: las acciones de escritura requieren un token CSRF desde
Tools::getToken(false). JavaScript obtiene un token conaction=getTokensi el marcado inicial de la pestaña todavía no contiene uno. - Validación: el título debe tener al menos 5 caracteres, la descripción al menos 10 caracteres, los invitados deben proporcionar un nombre y email válido, y los clientes conectados usan automáticamente el nombre y email de su cuenta.
- Límite de frecuencia: el controlador permite como máximo 3 envíos para el mismo producto y dirección IP durante el día anterior.
- Datos guardados: la solicitud registra producto, identidad de cliente o invitado, texto de descripción limpiado, tienda, idioma, dirección IP, estado, marcas temporales y un recuento inicial de votos de 1.
Sí, las solicitudes pueden requerir login de cliente y aprobación de administrador. En PrestaShop, REQUIRE_LOGIN bloquea el envío de invitados, REQUIRE_APPROVAL guarda nuevas solicitudes como submitted, y las listas públicas ocultan elementos submitted a quienes no son sus autores hasta que pasen a un estado público.
Los valores predeterminados son cómodos para el comerciante: REQUIRE_LOGIN está desactivado, pero REQUIRE_APPROVAL está activado. Con aprobación activada, el controlador guarda nuevos elementos como submitted; sin ella, los nuevos elementos empiezan como under_review.
La visibilidad se gestiona en el modelo, no solo en la plantilla. Las listas normales de producto excluyen tanto declined como submitted, y luego vuelven a añadir elementos submitted solo cuando el visor actual coincide con el autor por ID de cliente o dirección IP. La consulta de roadmap público indexable también excluye submitted y declined, así que las ideas pendientes no se convierten en contenido SEO público.
Para quien envía la solicitud, JavaScript puede mostrar un aviso pendiente: Your request is pending review and only visible to you. Eso deja claro el flujo de aprobación sin exponer solicitudes sin revisar a otros compradores.
Sí, la votación puede activarse y la votación de invitados puede permitirse o bloquearse. En PrestaShop, el endpoint de voto alterna un voto por solicitud, usa ID de cliente o seguimiento basado en IP y devuelve un requisito de login cuando la votación de invitados está desactivada.
La votación está activada por defecto, mientras que la votación de invitados está desactivada por defecto. Cuando la votación de invitados está desactivada y el visitante no ha iniciado sesión, la respuesta AJAX incluye require_login, y el script del front redirige al enlace de inicio de sesión cuando existe.
El almacenamiento de votos es una tabla separada mprfeaturerequest_vote. Los votantes conectados se emparejan por id_customer; los invitados, cuando se permiten, se emparejan por dirección IP. Llamar de nuevo al endpoint alterna el voto a desactivado eliminando la fila existente, mientras que un voto nuevo inserta una fila y marca el estado devuelto voted como true.
Después de cada cambio, el módulo recalcula el contador de la solicitud incrementando o reduciendo vote_count con una actualización de base de datos que usa GREATEST(0, ...), así que el recuento mostrado no puede bajar de cero. Las solicitudes recién enviadas también reciben un voto automático del propio autor, por eso el recuento inicial empieza en 1.
Sí, el hub principal de roadmap puede ser indexable cuando el módulo Feature Requests está activado, la página de roadmap está activada y el ajuste INDEX_ROADMAP_PAGE permite la indexación. Las páginas de detalle, las páginas de roadmap específicas de producto y los endpoints AJAX se mantienen deliberadamente fuera del índice.
- URL limpia del hub de roadmap, por ejemplo
/feature-requests: el tipo de páginaroadmapusa la política SEO del módulo. Cuando la indexación está activada, robots se resuelve comoindex, follow. - Hub de roadmap con parámetros de filtro/ordenación compatibles, por ejemplo
/feature-requests?status=planned: el controlador redirige con 301 estos (status,sort,view,search,page) de vuelta al hub canónico/feature-requests, para que los duplicados nunca se indexen. Cualquier otra cadena de consulta no redirigida se renderiza comonoindex, follow. - Página específica de producto, por ejemplo
/feature-requests/module/my-product: el tipo de páginamoduleestá configurado como no indexable, por lo que robots se resuelve comonoindex, follow. - Página de detalle de solicitud, por ejemplo
/feature-requests/some-request: el tipo de páginadetailestá configurado como no indexable, por lo que robots se resuelve comonoindex, follow. Las respuestas 404 de detalle también envíanX-Robots-Tag: noindex, nofollow, noarchive. - Endpoint AJAX, por ejemplo
module/mprfeaturerequest/ajax: el controlador envíaX-Robots-Tag: noindex, nofollow, noarchive.
El hook del sitemap sigue la misma lógica: solo añade la URL del hub de roadmap cuando el módulo, la visualización de roadmap, la inclusión en el sitemap y la política SEO lo permiten.
La ruta de código se limita a renderizar el widget de JivoChat desde displayBeforeBodyClosingTag. Comprueba que el módulo esté activado, que exista un WIDGET_ID, que la página actual coincida con el filtro de páginas configurado y que la visualización móvil esté permitida cuando el visitante está en móvil.
Cuando renderiza, la plantilla inyecta el script externo de JivoChat desde //code.jivosite.com/widget/{widget_id}, opcionalmente después del retraso configurado. Si PASS_USER_DATA está activado y el cliente ha iniciado sesión, define jivo_onLoadCallback() y llama a jivo_api.setContactInfo() con el nombre y email del cliente.
No hay tabla, modelo ni controlador del módulo para mensajes o transcripciones de chat en esta fuente. Eliminar o desactivar el módulo de PrestaShop deja de incrustar el widget, pero no exporta, elimina ni gestiona el historial de conversaciones guardado por JivoChat.
hookPaymentOptions() muestra Pay by Invoice solo cuando todas las comprobaciones de elegibilidad se cumplen. El módulo debe estar activo, el ajuste del módulo debe estar activado, el carrito debe pertenecer a un cliente conectado y el objeto cliente debe cargarse correctamente.
- Comprobación de cliente: los carritos de invitados y los registros de cliente inválidos no devuelven opción de pago.
- Comprobación de grupo: el cliente debe pertenecer al menos a un grupo asignado a una condición de pago activa.
- Comprobación de plazo: solo se devuelven condiciones activas enlazadas mediante
mpr_payment_term_group, ordenadas por posición y días. - Comprobación de crédito: el módulo toma el límite de crédito más alto de los grupos del cliente;
0significa ilimitado. De lo contrario, los pedidos diferidos impagados más el total del carrito actual deben mantenerse dentro del límite. - Comprobación de validación: el controlador de validación del front repite la comprobación de plazo y crédito antes de crear el pedido, así que una opción de checkout obsoleta no puede saltarse las reglas.
Si alguna comprobación falla, el módulo devuelve una lista vacía de opciones de pago y PrestaShop simplemente no ofrece Pay by Invoice para ese carrito.
Las condiciones disponibles se calculan a partir de los grupos del cliente en el carrito actual. El servicio consulta condiciones activas unidas mediante mpr_payment_term_group, usa el idioma actual para el nombre y la descripción de la condición, y ordena el resultado por position y luego por days. Las condiciones predeterminadas creadas al instalar incluyen Due on Receipt, Net 15, Net 30, Net 60 y Net 90.
La plantilla de checkout renderiza entonces cada condición disponible como una opción de radio, con la primera condición seleccionada, su insignia de color, texto de días hasta vencimiento y descripción opcional. Si el límite de crédito no es ilimitado, también muestra el crédito disponible y el importe diferido pendiente antes de la lista de condiciones.
Cuando el cliente envía la opción de pago, el controlador de validación lee el mpr_pt_term_id seleccionado, recalcula el total del carrito, vuelve a llamar a canPlaceDeferredOrder(), crea el pedido de PrestaShop en el estado configurado OS_AWAITING, recurriendo a bankwire si falta, y luego crea un registro mpr_deferred_order con el importe, cliente, tienda y fecha de vencimiento basada en los días de la condición seleccionada.
La fecha de vencimiento se calcula sumando el número de días de la condición seleccionada a la fecha en que se crea el pedido diferido. Las condiciones instaladas por defecto incluyen Due on Receipt / Net 0, Net 15, Net 30, Net 60 y Net 90.
- Si el pedido se crea el
2026-06-17con Net 0, la fecha de vencimiento es2026-06-17. - Si el pedido se crea el
2026-06-17con Net 15, la fecha de vencimiento es2026-07-02. - Si el pedido se crea el
2026-06-17con Net 30, la fecha de vencimiento es2026-07-17.
El módulo guarda el resultado como fecha en formato Y-m-d, no como una marca temporal con hora del día. El cálculo usa la fecha actual de ejecución del servidor/tienda en PHP cuando se crea el pedido diferido, así que los pedidos realizados cerca de medianoche siguen el límite de fecha del servidor en lugar del reloj local del cliente. Los cambios de horario de verano no añaden una hora a la fecha de vencimiento guardada, pero pueden importar indirectamente si el pedido se crea alrededor de un cambio de fecha.
En el checkout, el cliente selecciona una condición de pago mediante mpr_pt_term_id. El módulo valida que la condición esté activa, pertenezca a uno de los grupos del cliente y encaje en el límite de crédito efectivo del cliente antes de crear el pedido de PrestaShop. Solo después de validar el pedido crea el registro de pago diferido con la condición seleccionada, el total del pedido con impuestos y la fecha de vencimiento calculada.
$dueDate = date('Y-m-d', strtotime('+' . (int) $term->days . ' days'));El valor guardado se copia en mpr_deferred_order.due_date en el momento del pedido. Cambiar después el número de días de una condición de pago no recalcula las fechas de vencimiento de pedidos ya existentes. Las comprobaciones de vencido comparan la fecha de vencimiento guardada con la fecha actual del servidor, así que una factura impagada que vence hoy sigue venciendo hoy; solo pasa a estar vencida después de que esa fecha haya pasado.
El valor de límite de crédito es por grupo de clientes, no por cliente individual. El módulo guarda límites en mpr_pt_credit_limit, donde id_group es la clave primaria, y las propias condiciones de pago también se asignan a grupos mediante mpr_payment_term_group.
Para un cliente en varios grupos, el servicio obtiene todos los grupos del cliente y usa MAX(credit_limit) entre ellos. Ejemplo: si Ana pertenece a Retail sin límite configurado, B2B Silver con 1000.00 y B2B Gold con 2500.00, su límite de crédito efectivo es 2500.00.
Un límite configurado de 0 se trata como ilimitado por el servicio de checkout. Cuando existe un límite real, el módulo resta los pedidos diferidos pendientes de ese cliente en la tienda actual y solo muestra condiciones Pay by Invoice cuando outstanding + cart total se mantiene dentro del límite efectivo del grupo.
Los límites de crédito y la disponibilidad de condiciones están relacionados, pero son independientes. Asignar un límite de grupo no hace por sí mismo que todas las condiciones de pago estén disponibles; la condición también debe estar activa y asignada al menos a uno de los grupos del cliente. Del mismo modo, asignar una condición a un grupo sin un límite de crédito real significa que el grupo puede usar la condición siempre que el límite efectivo se resuelva como ilimitado o que otro grupo aporte suficiente límite.
El importe pendiente se calcula a partir de filas impagadas en mpr_deferred_order para el mismo cliente y tienda actual. Se excluyen las filas ya marcadas como pagadas, y el total del carrito usado para el nuevo pedido es el total del pedido con impuestos. Si el cliente supera el límite efectivo, el servicio de checkout elimina todas las condiciones diferidas de las opciones de pago disponibles y el controlador de validación rechaza un pago diferido enviado aunque alguien publique la condición manualmente.
La instalación crea un estado de pedido llamado Awaiting Deferred Payment, guarda su ID en OS_AWAITING, y el controlador de validación usa ese estado cuando llama a validateOrder() para pedidos Pay by Invoice. Si el estado guardado falta, el controlador recurre al estado de transferencia bancaria de PrestaShop.
logable = truesignifica que PrestaShop trata el pedido como un pedido válido realizado para flujos de historial y estadísticas, aunque el pago siga pendiente.invoice = trueypdf_invoice = truesignifican que la generación de factura está activada para el estado de pedido diferido.paid = falsesignifica que el estado del pedido no marca el pedido como pagado; el módulo rastrea la liquidación por separado enmpr_deferred_order.is_paid.
Cuando se crea el registro diferido, is_paid empieza en 0. El método markAsPaid() del modelo de pedido diferido establece después is_paid en 1 y registra paid_date, sin cambiar el significado del estado inicial del pedido.
El estado instalado pertenece al módulo, usa la etiqueta Awaiting Deferred Payment en todos los idiomas y se crea con send_email = false, unremovable = false y un valor de color azul. La página de retorno de pago puede mostrar entonces la condición de pago seleccionada, el importe debido y la fecha de vencimiento mientras el pedido permanece impagado desde el punto de vista del estado de pago de PrestaShop.
Hay un seguimiento importante en back office: cuando un administrador marca un pedido diferido como pagado mediante el controlador de pedidos diferidos del módulo, el módulo actualiza primero mpr_deferred_order. Si el pedido de PrestaShop relacionado sigue en el estado de espera del módulo y existe el estado estándar pagado PS_OS_PAYMENT, también mueve el pedido de PrestaShop a ese estado pagado. Si el pedido ya se ha movido a otro estado, el módulo no sobrescribe ese estado a ciegas.
Una notificación real se construye desde pedidos válidos de PrestaShop en la tienda actual, limitada por la antigüedad máxima de pedido configurada y las reglas de inclusión o exclusión de producto. Usa el producto pedido, la ciudad de entrega y el nombre enmascarado.
No. Las notificaciones de ventas generadas no son pedidos reales de PrestaShop y no se escriben en la tabla de pedidos. El módulo tiene tres modos de notificación:
- Solo pedidos reales: muestra pedidos válidos recientes de PrestaShop, usando nombres de cliente enmascarados, ciudad, datos de producto, imagen de producto, precio y tiempo relativo.
- Solo generadas: construye notificaciones de aspecto realista a partir de productos activos del catálogo más grupos configurados o integrados de nombres y ciudades. Son mensajes de visualización, no pedidos.
- Mixto: usa primero notificaciones de pedidos reales y rellena los huecos restantes con notificaciones generadas cuando no hay suficientes pedidos reales recientes.
El modo de instalación predeterminado es mixed. En modo mixto, si las notificaciones reales son menos que el número solicitado, el código genera rellenos automáticamente; no hay un interruptor separado de relleno generado dentro del modo mixto. Si cada notificación debe corresponder a una compra real, cambia el módulo al modo Real orders only y asegúrate de que la antigüedad máxima del pedido y los filtros de producto sean lo bastante amplios para devolver pedidos recientes.
Las notificaciones reales se cargan desde pedidos válidos de PrestaShop en la tienda actual, limitados por la antigüedad máxima de pedido configurada. La antigüedad máxima predeterminada es 72 horas. Las listas de inclusión y exclusión de productos se aplican antes de devolver la notificación, y el nombre de cliente mostrado se enmascara en lugar de mostrar el nombre completo.
Las notificaciones generadas se construyen a partir de productos activos del catálogo. El módulo selecciona datos de producto, calcula un precio mostrado, intenta usar la imagen de portada del producto, elige un nombre y ciudad de sus grupos y crea un tiempo relativo, como un número reciente de minutos atrás. Esto ocurre en tiempo de visualización mediante el endpoint de notificaciones del front office; no crea carritos, pedidos, clientes, detalles de pedido, pagos ni filas de historial de pedido.
La plantilla del toast del front etiqueta las notificaciones como Verified Purchase, incluidas las generadas. Esa etiqueta forma parte de la presentación del pop-up, no es prueba de que una notificación generada proceda de un pedido real. Para tiendas con cumplimiento estricto o sensibles a auditoría, usa el modo Real orders only.
Sí. La configuración acepta listas de IDs de producto a incluir y excluir separadas por comas. Esos filtros se aplican tanto al seleccionar ítems de pedidos reales como al seleccionar productos para notificaciones generadas.
El front controller notifications devuelve JSON con una cabecera de respuesta noindex cuando el módulo está activado. El script del navegador obtiene ese feed y renderiza las notificaciones toast según los ajustes de tiempo.
No, el módulo crea el punto de entrada del escaparate a Telegram. Después de que el comprador hace clic, Telegram gestiona la conversación en la app o experiencia web de Telegram. Eso mantiene el módulo simple y evita crear una segunda bandeja de mensajes dentro de PrestaShop.
El widget renderiza un enlace fijo de Telegram usando el nombre de usuario configurado. Si se configura un mensaje opcional prerrellenado, el módulo lo añade a la URL https://t.me/... y sustituye {url} por la URL de la página actual antes de enviar al comprador a Telegram. El navegador abre Telegram en una pestaña nueva o en contexto de app; el chat en sí no se incrusta en la página de PrestaShop.
El módulo no guarda mensajes entrantes de Telegram, no crea hilos de atención al cliente de PrestaShop y no ejecuta un webhook de Telegram ni una bandeja de bot dentro del back office. El historial de conversación, respuestas, adjuntos y notificaciones permanecen en Telegram.
La visualización se controla desde los ajustes del módulo. El widget solo se renderiza cuando el módulo está activado y hay un nombre de usuario de Telegram válido. También puedes controlar la posición en el escaparate, estilo de icono o barra, texto de llamada a la acción, color, tamaño, margen, tooltip, animación, retraso de visualización, visibilidad móvil y alcance de páginas como todas las páginas, páginas de producto, páginas de categoría o páginas de checkout.
Sí, Weekly Flash Sale puede publicar automáticamente, pero solo mediante módulos publicadores compatibles. La tarea busca mprinstagramintegration con publishToInstagram(), mprfacebookpostsintegration con publishToFacebook() y mprxintegration con publishToX(). Construye cada texto desde las plantillas de Instagram, Facebook y X usando placeholders como {product_name}, {original_price}, {sale_price}, {discount}, {code} y {product_url}.
ok:...significa que el publicador devolvió un resultado de plataforma, así que el envío se trató como correcto.skippedsignifica que el módulo de esa plataforma falta o está inactivo, que falta el método de publicación requerido o que el texto de esa plataforma está vacío.FAILsignifica que el método de publicación devolvió false.FAIL:messagesignifica que el publicador lanzó una excepción, y el mensaje después del prefijo se guarda para diagnóstico.dry-runes un estado general de ejecución de prueba. La tarea vuelve antes de crear la regla de carrito, publicar o escribir el historial de venta.disabledse devuelve cuando la venta semanal está desactivada y la ejecución no es dry run.
Para ejecuciones reales, los resultados por plataforma se guardan en mprweeklysale_history como ig_result, fb_result y x_result, junto al producto, descuento, código generado y fechas de venta.
La publicación automática forma parte de la tarea de flash sale. Una ejecución real primero elige un producto activo que no se haya usado recientemente según la ventana de historial configurada, crea una regla de carrito para el descuento y luego llama a los módulos publicadores sociales disponibles. La configuración predeterminada usa un descuento del 50%, una duración de 24 horas, prefijo de código FLASH, una ventana de historial de 12 semanas y una programación semanal de miércoles a las 08:00.
La regla de carrito generada es específica de producto, activa, destacada, limitada a cantidad 1000 y cantidad por usuario 1. Los textos se construyen después de preparar el precio de venta, código de descuento, URL del producto e imagen del producto. El texto de X se acorta para ajustarse al límite de la plataforma, y el texto de Instagram también se limita antes de publicar.
Por tanto, la publicación automática requiere algo más que activar Weekly Flash Sale. El módulo de integración correspondiente debe estar instalado, activo y exponer el método de publicación esperado, y la tarea cron programada debe ejecutarse con el token correcto. Si falta un módulo de plataforma, la venta puede crearse igualmente y la plataforma ausente se registra como skipped.
Usa el slider de página de inicio del módulo para renderizar un carrusel hero en el hook displayHome de PrestaShop. El código resuelve el slider predeterminado por el identificador de homepage, carga sus banners activos, une los campos de texto del idioma/tienda actuales cuando están disponibles y solo genera el carrusel cuando existen imágenes utilizables.
En la instalación, el módulo crea un slider activo con el identificador homepage. Para mostrar un hero en la página de inicio, crea o edita banners para ese slider, sube al menos una imagen válida, mantén el banner activo y asegúrate de que el módulo siga enganchado a displayHome. El hook llama al mismo renderizador de widget con slider = homepage, por lo que la salida de la página de inicio sigue las mismas reglas que los widgets incrustados.
La consulta del carrusel carga banners activos asignados al slider seleccionado y los ordena por posición y luego por ID de banner. La fila de idioma/tienda se une con un LEFT JOIN, así que el título, subtítulo y texto CTA se toman del idioma y tienda actuales cuando esa fila existe, pero un banner no se rechaza solo porque falte la fila de texto de idioma/tienda. Eso significa que un banner solo de imagen sin traducir todavía puede renderizarse.
Si ningún banner activo tiene un archivo de imagen desktop o móvil existente, el módulo devuelve una cadena vacía en lugar de renderizar un área hero rota.
El comportamiento de visualización viene de la configuración del módulo. La velocidad predeterminada es 5000 milisegundos, autoplay está activado, controles e indicadores están activados, la transición es slide, el estilo Ken Burns está activado y la altura predeterminada es 500. La plantilla también da a la primera diapositiva carga eager y prioridad de fetch, mientras que las siguientes se cargan en lazy para reducir el peso inicial de la página.
Sí, cada banner puede guardar una imagen desktop y una imagen móvil opcional para PrestaShop. La plantilla del carrusel genera fuentes picture responsive, usa la imagen móvil en pantallas pequeñas y añade fuentes AVIF o WebP cuando existen archivos correspondientes junto a las imágenes configuradas.
La imagen móvil está pensada para pantallas estrechas y se emite con una condición media max-width: 767px. La imagen desktop sigue siendo la imagen normal de respaldo para la diapositiva, así que lo mejor es subir una imagen desktop para cada banner y añadir una imagen móvil cuando el recorte deba cambiar para teléfonos.
El módulo no convierte imágenes durante el renderizado. Comprueba si existen archivos hermanos con el mismo nombre base y extensiones .avif o .webp, y luego añade esas fuentes cuando están presentes. Si esos archivos optimizados no están en disco, el carrusel recurre a las rutas de imagen originales subidas.
Un banner sin archivo de imagen desktop ni móvil se omite antes de renderizar. Esto evita diapositivas vacías en el carrusel. Si solo existe una imagen móvil, el banner puede pasar la comprobación de archivo, pero los visitantes desktop quizá no tengan una imagen de respaldo desktop adecuada, así que la configuración del comerciante debería tratar la imagen desktop como base y la imagen móvil como un override responsive opcional.
Sí, el módulo implementa renderizado de widgets de PrestaShop para sliders fuera de la página de inicio. Una plantilla puede llamar al widget con un slider_id numérico o con un identificador de slider guardado en la tabla de sliders del módulo.
{widget name='mprbannerrevolution' slider_id=2} {widget name='mprbannerrevolution' slider='homepage'} {widget name='mprbannerrevolution' slider='landing-sale'}Si no se pasa ningún parámetro, el módulo resuelve el slider predeterminado homepage. El código no asigna automáticamente sliders a páginas CMS; resuelve el slider desde los parámetros del widget y luego renderiza solo banners activos para ese slider que tienen una imagen desktop o móvil disponible.
La versión con identificador solo funciona para sliders activos, porque la búsqueda usa la comprobación activa de la tabla de sliders. La ruta numérica slider_id carga ese ID exacto de slider. Después de resolver un slider, se usa la misma canalización de renderizado que en la página de inicio: idioma actual, tienda actual, banners activos, comprobaciones de existencia de archivo, fuentes responsive, ajustes de carrusel y plantilla de carrusel compartida.
Hay un comentario de código que menciona slider_cms, pero el resolvedor implementado maneja slider_id, slider y el slider predeterminado homepage. Para páginas CMS o landing pages, usa una llamada explícita al widget en el contenido de la página o en la plantilla del tema en lugar de esperar que el módulo asigne automáticamente páginas CMS a sliders.
Puedes configurar el contenido real del banner usado por el carrusel de PrestaShop: título traducido, subtítulo, texto CTA y URL CTA. Cada banner también guarda color de overlay, opacidad de overlay, alineación de texto, estado activo, posición, imagen desktop e imagen móvil opcional.
Los campos de contenido son multilingües, así que el título del banner, subtítulo, texto del botón y URL del botón pueden variar por idioma. El título se usa como encabezado principal de la diapositiva, el subtítulo aparece debajo y el botón CTA aparece solo cuando tanto el texto CTA como la URL CTA están presentes para ese idioma.
Los controles visuales se guardan con el propio banner. El color de overlay usa negro por defecto, la opacidad de overlay es un valor porcentual, y la alineación de texto soporta left, center y right. La bandera activa controla si el banner puede aparecer, y el valor de posición controla el orden dentro del slider seleccionado.
Los campos de imagen son los medios reales usados por el carrusel. La imagen desktop es la imagen principal de la diapositiva, y la imagen móvil opcional da a los teléfonos un recorte diferente. El flujo de subida de administración acepta formatos web comunes como JPG, PNG, WebP y GIF, mientras que el renderizador del front office también puede añadir fuentes AVIF o WebP si existen archivos optimizados correspondientes en disco.
Se permiten campos de texto vacíos. Por tanto, un banner puede usarse como diapositiva puramente visual, hero de texto sobre imagen o diapositiva promocional con botón, según qué campos traducidos se rellenen.
Sí, los mensajes enviados se guardan en PrestaShop. El procesador crea un registro de envío con estado, bandera de spam, dirección IP, user agent, contexto de cliente o invitado, y luego guarda cada valor de campo enviado en la tabla de datos de envío del módulo.
La fila principal de envío se guarda en mprcontactform_submission. Incluye el ID del formulario, ID de tienda, ID de cliente cuando el visitante ha iniciado sesión, nombre del cliente, email del cliente, dirección IP, user agent, estado, bandera de spam, razón de spam y fecha de creación. Los envíos de invitados se guardan con ID de cliente 0.
Las respuestas individuales se guardan por separado en mprcontactform_submission_data. Cada fila guarda el ID de envío, ID de campo, nombre de campo y valor de campo enviado. Esto permite al módulo mantener separados el encabezado del envío y los campos dinámicos del formulario, algo importante porque cada formulario puede tener un conjunto distinto de campos.
El procesador valida el formulario activo y sus campos activos antes de guardar. Los campos obligatorios, formato de email, formato de teléfono, formato de URL, campos numéricos, opciones de select, validadores personalizados y la casilla GDPR pueden rechazar el envío antes de registrarlo. Después se ejecutan las comprobaciones anti-spam; los envíos de spam siguen guardándose con is_spam = 1 y una razón, pero los emails normales de administración y cliente solo se envían para envíos que no son spam.
La dirección IP se toma de cabeceras forwarded cuando existen, y luego de la dirección remota como respaldo, y el user agent se guarda con límite de longitud. Esto crea una pista de auditoría para consultas sin convertir el módulo en un CRM completo; el seguimiento sigue ocurriendo mediante los destinatarios de email configurados o cualquier flujo de back office que use el comerciante para revisar envíos.
Sí, las consultas pueden enrutarse a destinatarios de administración configurados. Cada formulario puede definir direcciones de email de administración y una línea de asunto; el mailer acepta destinatarios separados por comas y recurre al email global del módulo o al email de la tienda cuando el destinatario de un formulario está vacío.
Este enrutamiento es por formulario, así que un formulario de contacto puede enviar consultas de ventas a una bandeja mientras otro formulario envía solicitudes de soporte a otra. El formulario también tiene un ajuste send_admin_email; si los emails de administración están desactivados para ese formulario, el envío puede seguir guardándose sin enviar una notificación de administración.
La alternativa de destinatario se aplica en orden. El mailer usa primero la lista de emails de administración del formulario, luego el ajuste de email de administración a nivel de módulo y después PS_SHOP_EMAIL. Se pueden introducir varios destinatarios como lista separada por comas. Las direcciones de email inválidas se omiten en lugar de usarse para el envío.
El asunto de administración viene del asunto de email traducido del formulario cuando está definido; de lo contrario, recurre a un asunto genérico de nuevo envío. Se añade el nombre de la tienda, y el email del cliente enviado se usa como reply-to cuando está disponible, de modo que responder desde el buzón puede volver al cliente.
La confirmación al cliente es independiente. Si send_customer_email está activado y el envío incluye una dirección de email de cliente, el módulo también puede enviar al visitante un mensaje de confirmación. Los envíos de spam se guardan para revisión, pero no se llama al mailer para ellos, así que el spam normalmente no se reenvía a destinatarios de administración ni a clientes.
Sí. El módulo comprueba los envíos antes de enviar emails, marca el spam detectado en el registro de envío y guarda una razón de spam. La fuente incluye estos disparadores anti-spam:
- Honeypot: el campo oculto
website_url_confirmdebe permanecer vacío. - Tiempo de envío: la marca temporal oculta
_mpr_ftdebe estar presente, ser válida y ser más antigua que elmin_submit_timeconfigurado del formulario. - Límite de frecuencia: la IP del remitente se bloquea cuando ya ha alcanzado el máximo de envíos por hora del formulario.
- IPs bloqueadas: la IP del remitente se compara con la lista de IPs bloqueadas del formulario, separada por saltos de línea.
- Palabras bloqueadas: cada campo enviado se comprueba frente a palabras bloqueadas configuradas usando una coincidencia de subcadena sin distinguir mayúsculas.
Por defecto, los formularios recién instalados activan el honeypot y la comprobación de tiempo con un tiempo mínimo de envío de 3 segundos. Los envíos de spam se guardan para revisión, pero el flujo normal de emails de administración/cliente solo se ejecuta para envíos no spam.
El límite de frecuencia predeterminado a nivel de módulo es 10 envíos por IP por hora. Establecer el máximo de envíos por IP y hora en 0 desactiva esa comprobación de límite. La consulta de límite cuenta envíos guardados desde la misma dirección IP durante la hora anterior, por lo que los intentos repetidos pueden bloquearse aunque el visitante siga reenviando el mismo formulario.
La comprobación de tiempo está diseñada para detectar publicaciones automatizadas que envían inmediatamente u omiten la marca temporal oculta. Un visitante real recibe el campo oculto _mpr_ft con el formulario, mientras que un bot que publica directamente sin cargar la página normalmente fallará el requisito de marca temporal.
Las razones de spam se guardan como etiquetas legibles por máquina, como honeypot, timing, rate_limit, blocked_ip y blocked_words. Puede registrarse más de una razón en el mismo envío, lo que ayuda a distinguir un envío simplemente demasiado rápido de un mensaje que además contiene palabras bloqueadas.
Sí, puede sustituir la página de contacto predeterminada de PrestaShop cuando ese ajuste está activado. El módulo añade rutas de contacto y usa el hook del dispatcher para redirigir el controlador de contacto principal a su propio renderizado de página de contacto, manteniendo disponibles los enlaces normales de visualización del módulo.
El ajuste está desactivado por defecto. Cuando replace_core_contact está activado, el módulo expone rutas de contacto mediante hookModuleRoutes, usando la reescritura de la página de contacto de la tienda cuando es posible, y también gestiona el controlador principal contact mediante el hook del dispatcher.
En términos de implementación, el hook del dispatcher no envía una redirección de navegador 301 o 302. Reescribe los parámetros de la petición actual in situ cambiando el controlador al controlador de visualización del módulo y estableciendo el nombre del módulo en mprcontactform. El comprador permanece en el flujo de contacto, pero PrestaShop renderiza la página de contacto del módulo en lugar del controlador principal de contacto.
El módulo también puede renderizar formularios mediante su propia ruta de visualización de módulo y mediante hooks como displayMprContactForm y displayContactContent. Eso significa que los comerciantes pueden sustituir la página principal de contacto, incrustar un formulario específico en otro sitio o dejar sin cambios la página de contacto principal y usar solo enlaces del módulo.
Si la sustitución no está activada, el hook de rutas no devuelve rutas de sustitución de contacto y la página de contacto principal queda bajo el control normal de PrestaShop. Esto hace que la función sea reversible desde la configuración sin desinstalar el módulo.
El módulo añade una acción de eliminación a la página de detalle de pedido en administración de PrestaShop. Se renderiza mediante los hooks displayAdminOrderMain y displayAdminOrder cuando el módulo está activado y hay un ID de pedido disponible, y luego envía el pedido al flujo de papelera del módulo.
En una instalación estándar, el módulo está activado y se requiere confirmación. La página de pedido muestra un bloque Delete Order con un botón que enlaza al controlador de administración del módulo usando un parámetro trash_order. Si la confirmación está activada, la plantilla añade un aviso de confirmación del navegador antes de enviar la acción.
Cuando el administrador confirma, el controlador pasa el ID de pedido y el ID del empleado actual al servicio de papelera. El servicio carga el Order de PrestaShop, crea la instantánea de papelera, guarda quién lo eliminó y luego llama al método nativo de eliminación de pedidos de PrestaShop. Si el pedido no puede cargarse como objeto válido, la acción de papelera devuelve false en lugar de eliminar nada.
La acción está pensada para pedidos de prueba, duplicados o no deseados que un comerciante decide eliminar deliberadamente del back office. No es una bandera de ocultación suave sobre la fila original del pedido; después de que se completa el flujo de papelera, se ha llamado al método nativo de eliminación de pedido de PrestaShop y el registro restante del módulo es solo la instantánea de papelera.
Antes de eliminar, el módulo carga el Order de PrestaShop, crea un resumen JSON compacto, inserta una fila en mprdeleteorders_trash y luego llama al método nativo de eliminación de pedidos. La tabla de papelera se conserva intencionadamente al desinstalar por seguridad.
{"id_order":1234,"reference":"ABCDEF123","id_customer":42,"total_paid":149.90,"date_add":"2026-06-17 10:15:00","current_state":2}id_order: el ID original del pedido de PrestaShop, también guardado como columna de nivel superior de la tabla de papelera para filtrar.reference: la referencia del pedido, también guardada comoorder_reference.id_customer: el ID de cliente vinculado al pedido eliminado.total_paid: el total del pedido desdetotal_paid_tax_incl.date_add: la fecha original de creación del pedido.current_state: el ID de estado del pedido en el momento de la eliminación.deleted_by: el ID del empleado de back office que hizo clic en la acción de papelera.date_deleted: cuándo se creó el registro de papelera.
Esto es una instantánea de auditoría, no una copia reversible completa de todas las tablas relacionadas con el pedido, factura, mensaje y líneas de producto. Úsala para identificar qué se eliminó y por quién antes de purgar definitivamente.
La propia tabla de papelera guarda id_trash, id_order, order_reference, order_data, deleted_by y date_deleted. El controlador de lista puede mostrar estas filas de papelera para que un administrador revise el ID original del pedido, referencia, empleado que lo eliminó y fecha de eliminación.
El JSON contiene deliberadamente solo un pequeño conjunto de valores de cabecera del pedido. No guarda productos, detalles de pedido, direcciones, pagos, facturas, mensajes, filas de transportista, contenido del carrito, cupones ni historial de movimientos de stock. Por esa razón debe tratarse como trazabilidad de eliminaciones, no como un paquete de restauración.
No, el módulo no reconstruye desde la papelera un pedido eliminado de PrestaShop. Cuando un pedido se mueve a la papelera, guarda una pequeña instantánea JSON con valores como ID de pedido, referencia, ID de cliente, total pagado, fecha de creación y estado actual, y luego llama al método de eliminación de pedidos de PrestaShop.
El método de restauración solo lee la fila de papelera, confirma que existe, elimina esa fila de papelera y devuelve éxito para esa acción de limpieza. No recrea la fila original del pedido, detalles de pedido, pagos, facturas, historial de pedido, datos de carrito ni registros relacionados.
Esa limitación es importante porque el módulo no guarda suficientes datos relacionales para realizar una reconstrucción completa segura de un pedido. Trata la papelera como un buffer de auditoría y limpieza, no como una copia de seguridad completa. Para una recuperación real, usa una copia de seguridad de base de datos o un proceso de restauración manual fuera de este módulo.
La acción de limpieza permanente de papelera también es independiente de la restauración de pedidos. Eliminar una fila de papelera solo elimina la instantánea de auditoría del módulo; no afecta a un pedido de PrestaShop ya eliminado porque los datos originales del pedido ya fueron eliminados por la llamada nativa de eliminación.
Para tiendas en producción, el flujo práctico es usar el módulo para limpiar pedidos conocidos de prueba o no deseados, mantener copias de seguridad de base de datos para recuperación y verificar el pedido antes de eliminarlo. Si un pedido puede necesitar recuperarse con productos, pagos, facturas e historial intactos, no dependas de la fila de papelera del módulo como fuente de recuperación.
No, la desinstalacion conserva la tabla de papelera por seguridad. En PrestaShop el modulo elimina pestañas y configuracion, pero el comentario del codigo indica que mprdeleteorders_trash se mantiene al desinstalar.
Sí. Cuando el seguimiento de compras está activado y el módulo tiene permiso para rastrear al visitante, dispara un evento Hotjar purchase desde el hook de confirmación de pedido de PrestaShop. La plantilla del front office llama a hj('event', 'purchase') en la página de confirmación de pedido.
Esto es útil para el análisis en Hotjar porque puedes filtrar grabaciones, mapas de calor, encuestas o funnels alrededor de sesiones que alcanzaron una compra, y luego inspeccionar el comportamiento antes de que se realizara el pedido. Ayuda a responder preguntas como dónde dudaron los compradores, qué pasos de checkout repitieron o qué patrones de página aparecen en sesiones exitosas.
No sustituye a la analítica de ingresos ni al reporting de pedidos del lado del servidor. Hotjar recibe el evento nombrado para segmentación de comportamiento; los detalles de pedido del módulo se usan principalmente para construir contexto local de evento y no son un feed completo de transacciones.
La función depende de las guardas normales del módulo Hotjar. El módulo debe estar activado, el Hotjar Site ID debe estar configurado como dígitos, el seguimiento de compras debe estar activado y el visitante debe pasar las comprobaciones de seguimiento del módulo, como el manejo de consentimiento cuando el respeto al consentimiento está activado. Si el seguimiento no está permitido, el hook de confirmación de pedido no devuelve nada.
Cuando el hook se ejecuta, el módulo construye contexto local de compra a partir del pedido de PrestaShop, incluyendo valores como ID de pedido, moneda, valor total, número de artículos e identificadores de producto. Ese contexto se asigna a la plantilla de confirmación de pedido y puede ser usado por las herramientas locales de registro/demo de eventos del módulo, pero la llamada Hotjar Events API hecha por la plantilla sigue siendo el evento nombrado simple purchase.
En Hotjar, usa el evento purchase como marcador de comportamiento. Para totales, impuestos, margen, atribución, gestión de reembolsos o reporting de conversiones autoritativo, sigue usando datos de pedidos de PrestaShop o una plataforma de analítica diseñada para reporting transaccional.
No. El módulo envía eventos de PrestaShop y contexto de cliente a Klaviyo, pero la lógica de campañas, segmentos, contenido de email y flows SMS se gestionan en Klaviyo. Esa separación es útil porque los datos de tienda vienen de PrestaShop mientras que la estrategia de marketing permanece en la plataforma de marketing.
En términos de fuente, el lado PrestaShop se limita a la entrega de datos onsite. Cuando ENABLED está establecido y PUBLIC_API_KEY está presente, el hook de cabecera carga el script onsite de Klaviyo con el company id. Los valores predeterminados de instalación dejan el módulo desactivado, mantienen la clave pública vacía y ofrecen interruptores de seguimiento como TRACK_VIEWED, TRACK_CART y TRACK_PURCHASE.
La plantilla del front puede identificar clientes conectados con email y nombre, rastrear una página de producto como Viewed Product y rastrear la página del carrito como Added to Cart. No contiene un constructor de flows de Klaviyo, editor de segmentos, editor de plantillas de email, pantalla de flujos SMS ni capa de API de campañas. La fuente expone un interruptor de compra, pero la plantilla de seguimiento del navegador inspeccionada no genera una llamada de seguimiento de compra, así que la automatización de compras debe verificarse igualmente en Klaviyo en lugar de asumirse solo por el ajuste de PrestaShop.
PUBLIC_API_KEY=YOUR_KLAVIYO_PUBLIC_KEY ENABLED=1 TRACK_VIEWED=1 TRACK_CART=1En parte. El módulo tiene plantillas de tarjetas de producto y carga de datos de producto, pero la ruta de escaparate implementada no es una columna desplegable independiente product_list. MenuBuilder puede cargar elementos de columna product_list desde un ID de categoría y límite, pero extractChildrenFromColumns() no expone elementos product_list como hijos de menú, así que los comerciantes no deberían confiar en que ese tipo de columna renderice tarjetas de producto hasta que se añada soporte de plantilla/hijos.
La ruta implementada hoy son previsualizaciones de producto bajo hijos de árbol de categorías. Añade una columna desplegable de tipo category_tree, activa PRODUCTS_NB con un valor superior a cero, y el builder puede adjuntar productos de cada hijo de categoría. La plantilla del escaparate renderiza entonces el primer producto adjunto como tarjeta destacada y los productos adjuntos restantes como tarjetas más pequeñas dentro del panel.
SHOW_PRICES y SHOW_DISCOUNTS controlan si aparecen precios e insignias de descuento; ambos están activados por defecto. PRODUCTS_NB controla cuántas previsualizaciones de producto de hijos de categoría se adjuntan. El TTL de caché del menú controla lo rápido que aparecen los cambios estructurales, y se registran hooks de actualización de producto, categoría y CMS para limpiar los datos de menú en caché cuando cambia el contenido de la tienda.
Implemented storefront path:
category_tree child + PRODUCTS_NB > 0 = product previews under that category child.
Not currently implemented as rendered storefront cards:
standalone product_list column.El módulo renderiza el menú móvil desde la misma configuración de menú de nivel superior, con un parser móvil dedicado. Eso reduce el mantenimiento duplicado y ayuda a mantener alineadas la navegación desktop y móvil. Aun así, conviene revisar el diseño móvil porque las etiquetas largas y los árboles de categoría profundos pueden afectar la usabilidad.
Las salidas desktop y móvil reciben los mismos datos $menu.children para el árbol off-canvas. En móvil, la plantilla renderiza ese árbol, mientras que HtmlMobileTreeParser y el constructor de menú pueden convertir varios diseños de columnas desktop en una estructura móvil más simple, incluyendo árboles de categorías, árboles de categorías CMS, categorías de blog, grupos de enlaces, enlaces CMS, listas de enlaces, árboles móviles derivados de HTML y pestañas visuales.
Eso significa que normalmente mantienes etiquetas, enlaces, árboles de categorías, enlaces CMS, pestañas visuales y contenido móvil personalizado compatible una sola vez en el módulo. La excepción práctica es el contenido que no se extrae en menu.children. En particular, las columnas desktop product_list no se extraen al árbol móvil actual, y la plantilla móvil renderiza solo $menu.children; el contenido de lista de productos necesitaría soporte de plantilla storefront/móvil antes de aparecer en el menú off-canvas.
El HTML personalizado es otra zona que conviene probar. Si una columna contiene marcado inusual y no hay un árbol móvil utilizable, el parser móvil puede recurrir a una estructura simple o vacía, así que prueba etiquetas largas, árboles anidados y HTML promocional en un ancho móvil real antes de depender de ello para la navegación.
No. La plantilla renderizada usa skype:username?chat, que es un enlace de chat. El código no renderiza un enlace ?call ni un botón separado de llamada de voz/vídeo.
El módulo debe estar activado y USERNAME debe estar configurado. El validador de configuración obligatoria permite letras, números, puntos, guiones y guiones bajos, con una longitud de 3 a 64 caracteres.
El hook displayHeader registra views/css/mprskypechatintegration.css solo cuando pasa el guard del chat, así que los widgets inactivos o sin configurar no cargan esa hoja de estilos.
Sí. El guard compartido comprueba SHOW_MOBILE y devuelve false en contextos móviles cuando ese ajuste está desactivado.
No. El módulo conecta PrestaShop con Tidio y controla el comportamiento de carga del escaparate. Los flows de chatbot, gestión de bandeja de entrada y flujos de operadores se gestionan dentro de Tidio, donde corresponden esas herramientas.
Los ajustes de PrestaShop son ajustes de conexión y renderizado: PUBLIC_KEY es obligatorio y se valida, ENABLED usa por defecto 1, y el widget puede retrasarse, ocultarse en móvil, limitarse por tipo de página y recibir opcionalmente email/nombre del cliente conectado mediante PASS_USER_DATA.
PUBLIC_KEY=your_tidio_public_key ENABLED=1 PAGES=all DELAY=0 PASS_USER_DATA=1En el front office, la plantilla solo define datos opcionales document.tidioIdentify y añade el script alojado de Tidio desde code.tidio.co. No hay constructor de bots del lado de PrestaShop, vista de bandeja de entrada, pantalla de asignación de operadores, tabla de historial de mensajes ni API de flows en este módulo, así que la automatización de ventas/soporte debe configurarse en el panel de Tidio.
La configuración guarda el estado de activación, título, mensaje HTML, visibilidad del campo de newsletter, retraso en segundos, duración de la cookie en días y si debe mostrarse en todas las páginas o solo en la página de inicio.
Después de que el visitante lo cierre, el script establece la cookie mprwpop_seen con el número de días configurado. El script del popup comprueba esa cookie antes de volver a mostrarse.
No. El campo de email es solo visual en este módulo. Cuando SHOW_NEWSLETTER está activado, la plantilla del front renderiza un formulario de newsletter con un input de email y botón Subscribe, pero el módulo en sí no contiene front controller, manejador AJAX, inserción en tabla de suscriptores ni integración con módulo de newsletter que guarde las direcciones enviadas.
El script del popup solo gestiona el tiempo de visualización, cierre del modal, cierre con tecla Escape y la cookie mprwpop_seen. No intercepta el envío del formulario ni envía la dirección a ningún sitio.
Si quieres capturar leads, conecta ese formulario a tu propio handler, un módulo de newsletter, endpoint de Brevo o Mailchimp, o una acción de formulario a nivel de tema que tu tienda procese. Hasta que exista esa integración, activar el campo solo muestra una caja de email; no crea suscriptores de newsletter.
Los ajustes relacionados del módulo solo deciden si el campo se muestra y con qué frecuencia aparece el popup. Los valores predeterminados de instalación establecen SHOW_NEWSLETTER en 0, DELAY en 3 segundos, COOKIE_DAYS en 7 y SHOW_ON en all; SHOW_ON=homepage lo limita al controlador index.
La cookie de visibilidad se define cuando el comprador cierra el popup, hace clic en el overlay o pulsa Escape. Enviar el formulario de newsletter no crea un registro de suscriptor en este módulo, y el formulario de la plantilla no tiene URL de acción, así que el comerciante debería tratarlo como un placeholder de front-end hasta conectarlo a un endpoint real de newsletter.
<form class='mprwpop-newsletter' id='mprwpop-nl-form' method='post'>Sí. Cuando el ajuste de visualización es solo página de inicio, el hook devuelve contenido únicamente si la página actual del front controller es la página index.
Añade tu Microsoft UET Tag ID numérico y activa el seguimiento del navegador en el módulo. El hook de cabecera de PrestaShop carga el script UET, envía el evento de carga de página y luego envía los eventos de navegador configurados cuando el seguimiento está activo y las reglas de consentimiento lo permiten.
En una instalación nueva, el seguimiento no está activo hasta completar esos ajustes: ENABLED usa por defecto 0, TAG_ID está vacío, y el módulo solo se considera activo cuando el tag ID es numérico. En el formulario de administración, guarda el Microsoft Ads UET tag ID sin letras ni espacios, mantén RESPECT_CONSENT activado si usas un módulo de cookies compatible, y decide qué interruptores de evento deben quedar activos.
TAG_ID=123456789 ENABLED=1 RESPECT_CONSENT=1 TRACK_PAGE_VIEW=1 TRACK_PRODUCT_VIEW=1 TRACK_PURCHASE=1Cuando se ejecuta el hook de cabecera, también puede capturar msclkid desde la URL de llegada para posterior coincidencia de conversiones. La exclusión de empleados está activada por defecto mediante EXCLUDE_EMPLOYEES, así que las pruebas con sesión de back office iniciada pueden no disparar eventos salvo que tengas en cuenta ese ajuste.
Sí, soporta Microsoft Conversions API para eventos de compra del lado del servidor, pero solo cuando los ajustes requeridos están completos. El módulo necesita seguimiento activado, un TAG_ID numérico, CAPI_ENABLED activado, un CAPI_ACCESS_TOKEN guardado y seguimiento de compras activado.
- Validación de administración: el UET Tag ID debe contener solo dígitos, CAPI no puede activarse sin un tag ID numérico, el bearer token es obligatorio cuando CAPI está activado, y el límite de lote de cola debe ser 1-100.
- Flujo de pedido: en
actionValidateOrder, el módulo compruebacanTrack(),TRACK_PURCHASEy la disponibilidad de CAPI antes de encolar nada. - Flujo de cola: se encola una conversión de compra para el proveedor
microsoft_uet, vinculada al ID de pedido, y luego el módulo procesa inmediatamente un lote pequeño de 3 eventos. La tarea cron procesa después el lote configurado normal.
La etiqueta UET del navegador puede seguir gestionando eventos de página, carrito, búsqueda y remarketing; la ruta CAPI en este módulo es específicamente la ruta de compra del lado del servidor.
Para la configuración, los campos CAPI importantes son:
CAPI_ENABLED=1 CAPI_ACCESS_TOKEN=your_microsoft_token CAPI_BATCH_LIMIT=20 TRACK_PURCHASE=1El cliente API envía eventos a Microsoft UET CAPI usando el tag ID numérico en el endpoint y un bearer token. La carga normaliza nombre/id/hora del evento, URL de origen, consentimiento de almacenamiento de anuncios, datos de usuario y datos personalizados de compra. La coincidencia de usuario puede incluir dirección IP, user agent, msclkid guardado, detalles de cliente hasheados e identificadores anónimos de carrito/invitado cuando están disponibles.
Esto no sustituye del lado del servidor a todos los eventos de navegador del módulo. Page view, product view, search, add-to-cart, wishlist y eventos personalizados de clic/URL/controlador permanecen del lado del navegador en la fuente inspeccionada; CAPI es el complemento de compra del servidor.
El módulo agrupa eventos Microsoft Ads UET alrededor de actividad de comercio en el escaparate, cuenta, búsqueda y disparadores personalizados. Los eventos principales son configurables individualmente en los ajustes del módulo.
- Comercio/escaparate:
pageView,productView,addToCart,addToWishlist,initiateCheckoutypurchase. Los eventos de producto, carrito y compra incluyen parámetros de comercio como IDs de producto, valores de pedido, moneda y cantidades cuando están disponibles. - Búsqueda:
searchse dispara en páginas de resultados de búsqueda con el contexto de la consulta. - Cuenta:
signUpse dispara después del registro de cliente mediante el flujo de hook de registro del módulo. - Personalizados: se pueden configurar eventos personalizados con disparadores de clic, URL, controlador o evento DOM, con nombres de evento limitados a las reglas de nomenclatura UET permitidas por el módulo.
El evento de compra se envía en la página de confirmación de pedido, mientras que los eventos add-to-cart y wishlist se capturan mediante listeners JavaScript del front office.
La mayoría de esos interruptores están activados por defecto al instalar, incluidos TRACK_PAGE_VIEW, TRACK_PRODUCT_VIEW, TRACK_ADD_CART, TRACK_ADD_WISHLIST, TRACK_INITIATE_CHECKOUT, TRACK_SEARCH, TRACK_PURCHASE y TRACK_SIGNUP. TRACK_CUSTOM_EVENTS usa por defecto desactivado hasta que definas reglas de eventos personalizados.
Las reglas personalizadas están acotadas intencionadamente: el normalizador de configuración acepta hasta 15 nombres de evento distintos, elimina parámetros reservados event_id y soporta selectores de clic, coincidencias de URL contiene, nombres de controlador o eventos DOM personalizados. El JavaScript del front office deduplica eventos de botones add-to-cart y wishlist durante aproximadamente un segundo para que sea menos probable contar dos veces la misma acción.
Sí. Con RESPECT_CONSENT activado, el módulo comprueba el consentimiento de marketing antes de considerar activo el seguimiento Microsoft UET. Primero comprueba mprcookiesrevolution leyendo la cookie mprcr_consent y buscando marketing:1. Si esa cookie no existe, recurre al valor DEFAULT_CONSENT de ese módulo. Si Cookies Revolution no está activo, comprueba mprcookiebanner mediante mprcookie_consent=granted, recurriendo de nuevo al ajuste de consentimiento predeterminado de ese módulo cuando la cookie no existe.
Si no hay ningún módulo de consentimiento MPR compatible activo, la función de consentimiento devuelve permitido, así que el seguimiento no se bloquea solo por consentimiento. Para una restricción GDPR estricta, mantén RESPECT_CONSENT activado e instala/configura uno de los módulos de consentimiento compatibles.
El flujo msclkid se ejecuta en el hook de cabecera. El módulo lee msclkid de la URL de llegada, acepta solo caracteres A-Za-z0-9._:- hasta 500 caracteres, lo refleja en $_COOKIE['mprbuet_msclkid'] y luego escribe una cookie HTTP-only llamada mprbuet_msclkid durante 7776000 segundos. Los datos de usuario de conversiones del lado del servidor posteriores pueden incluir ese Microsoft click ID guardado cuando está presente.
https://shop.example/?msclkid=abc123guardaabc123en la cookie del módulo.- Una compra posterior puede adjuntar ese valor a los datos de conversión de Microsoft UET si las conversiones del lado del servidor están configuradas.
La comprobación de consentimiento del lado del servidor y la puerta JavaScript del front office trabajan juntas pero no son idénticas. La guarda PHP canTrack() bloquea la construcción de eventos para empleados, módulos desactivados y consentimiento de marketing fallido; la plantilla de cabecera también comprueba cookies del navegador antes de cargar bat.js cuando hay un módulo de consentimiento de cliente compatible.
Si RESPECT_CONSENT se establece en 0, la comprobación de consentimiento se omite. Si no hay instalado ningún módulo de consentimiento MPR compatible, la función PHP permite el seguimiento solo por consentimiento, así que las tiendas estrictas no deberían confiar en el módulo UET por sí solo como su única capa de consentimiento.
La cookie msclkid se escribe antes de la compra posterior, lo que importa porque un comprador puede llegar desde Microsoft Ads, navegar y pedir en una solicitud posterior. El valor solo se acepta si coincide con la whitelist de caracteres del módulo; los valores inválidos o demasiado largos se ignoran en lugar de enviarse a Microsoft.
No. El tag de navegador solo lo inyecta el hook de cabecera de PrestaShop cuando el seguimiento esta activo, es decir, cuando hay un TAG_ID numerico guardado y ENABLED vale 1. La biblioteca de Microsoft se anade entonces con script.async = true desde https://bat.bing.com/bat.js, por lo que se carga sin bloquear el renderizado de la pagina.
Al cargarse, el modulo envia un unico pageLoad a window.uetq y despues solo los eventos que hayas activado, como vista de producto, anadir al carrito o compra, mediante uetq.push('event', ...). Cuando hay un modulo de consentimiento compatible, el pixel se carga solo tras confirmar el consentimiento de marketing en el navegador, de modo que los visitantes que rechazan no generan ninguna peticion a Microsoft.
El envio del lado del servidor mediante la Conversions API se ejecuta en una tarea cron programada, no en la peticion del cliente, y los empleados con sesion iniciada quedan excluidos por defecto mediante EXCLUDE_EMPLOYEES.
Cuando la Conversions API esta activada y hay un token bearer de Microsoft guardado, los eventos de compra se ponen en cola al validar el pedido y se envian del lado del servidor mediante una tarea cron programada, send_bing_uet_conversions, que se ejecuta cada 300 segundos. Cada ejecucion procesa la cola hasta el limite de lote configurado (CAPI_BATCH_LIMIT, por defecto 20, permitido 1–100 y limitado a 100 filas por ejecucion), de modo que los eventos fallidos o pendientes se reintentan en el siguiente ciclo en lugar de perderse.
Los datos de usuario del lado del servidor pueden incluir el id de clic de Microsoft almacenado (msclkid), el correo y telefono con hash, la IP del cliente y el user-agent. Las entradas procesadas y obsoletas se limpian automaticamente, conservando el historial reciente y eliminando las filas antiguas con el tiempo.
Si falta el token bearer o esta vacio, el bloque de disponibilidad del admin muestra una advertencia y no se envia ningun evento del lado del servidor hasta que lo anadas. El UET de navegador puede permanecer activado de forma independiente para vistas de pagina y remarketing mientras configuras la Conversions API.
No, no para el botón básico de contacto de Messenger. El ajuste requerido es el Facebook Page ID numérico; sin App ID configurado, la plantilla del escaparate renderiza un enlace directo https://m.me/{page_id} para que los compradores abran Messenger desde el botón flotante.
- Modo enlace m.me: necesita el módulo activado y un Page ID válido. Es rápido de configurar y funciona como un enlace externo simple de contacto por Messenger.
- Modo SDK: el módulo trata un campo App ID relleno como el interruptor para renderizar el marcado del plugin de chat de clientes de Facebook y cargar el SDK de customer chat de Facebook. El texto de saludo se usa en ese marcado de modo SDK.
Así que los comerciantes que solo quieren un botón fiable de Messenger pueden dejar vacío el App ID. Añade el App ID solo cuando quieras deliberadamente la ruta de chat incrustado basada en SDK y tengas lista la configuración del lado de Facebook.
El requisito de Page ID es estricto: el validador de configuración obligatoria del módulo acepta solo dígitos, de 5 a 32 caracteres, y el widget no se renderiza mientras el módulo está activado pero ese campo está vacío. Los valores predeterminados activan el widget, lo muestran en todas las páginas incluido móvil, usan el estilo de icono inferior derecho y un retraso de visualización de 0 segundos.
Los ajustes de apariencia como POSITION, STYLE, CTA_TEXT, COLOR, SIZE, MARGIN, tooltip y animación se usan en la ruta de botón flotante de enlace. El filtro de páginas y la visibilidad móvil vienen de la guarda de chat compartida, así que puedes mostrar el punto de entrada a Messenger solo en páginas de producto, categoría o checkout si encaja con tu flujo de soporte.
El método fetch comprueba primero RSS_URL. Si está vacía, construye una URL RSS desde BOARD_URL. Las URLs de pins solo se usan cuando la ruta RSS no produce posts.
No. mprpinterestintegration es un módulo de contenido/feed de Pinterest, no el módulo de seguimiento de anuncios de Pinterest. Muestra pins, tableros o contenido basado en RSS de Pinterest en la tienda e incluye gestión de caché para el feed mostrado. La fuente también contiene ajustes opcionales de publicación por API de Pinterest para publicar producto/contenido.
- Pinterest Feed Integration: úsalo para mostrar contenido de Pinterest en el escaparate, configurar nombres de usuario, URLs de pins, URLs de tableros o fuentes RSS, y opcionalmente publicar contenido de la tienda en Pinterest.
- Pinterest Tag: usa el módulo separado Pinterest Tag para medición publicitaria, eventos de etiqueta del navegador y seguimiento opcional Conversions API, como visitas de página, vistas de producto, add-to-cart, checkout, búsqueda y registro.
Si el objetivo es mejorar el merchandising visual o incrustar contenido de Pinterest, usa esta integración de feed. Si el objetivo es atribución de Pinterest Ads u optimización de conversiones, usa el módulo Pinterest Tag en su lugar.
Para la ruta de feed, la fuente requerida puede ser tan simple como una o más URLs de pin guardadas, o una URL de tablero/fuente RSS según cómo quieras curar el contenido. Los ajustes compartidos de feed controlan hook de visualización, número de publicaciones, columnas, diseño grid/slider, botón de seguimiento, visibilidad móvil y duración de caché; la caché usa por defecto 3600 segundos y puede refrescarse desde la administración del módulo.
La ruta opcional de publicación también está separada del seguimiento de anuncios. La publicación en Pinterest requiere credenciales de API de Pinterest como un token de acceso e ID de tablero, y el publicador envía datos de pin basados en imagen a Pinterest. Eso sigue sin instalar la etiqueta publicitaria de Pinterest ni reportar conversiones de anuncios; para eso, la tienda necesita el módulo separado mprpinteresttag.
El config map incluye ACCESS_TOKEN, BOARD_ID, AUTOPUBLISH y AUTOPUBLISH_CAPTION. La publicación se gestiona mediante el PinterestPublisher compartido.
Cada elemento del feed enlaza a la URL del pin, muestra imagen thumbnail, badge de vídeo opcional, texto overlay, nombre de autor opcional y caption opcional según los ajustes del módulo y los datos de origen.
El módulo requiere el Website Key de Smartsupp. Su panel de configuración indica al comerciante que lo copie desde los ajustes de Smartsupp, y el validador de configuración obligatoria trata una clave vacía como inválida.
Si PASS_USER_DATA está activado y el cliente ha iniciado sesión, el trait de chat compartido devuelve customer_email y customer_name. La plantilla los asigna a _smartsupp.email y _smartsupp.name.
No. La plantilla carga el script externo del widget de Smartsupp. La interfaz visible del chat la proporciona Smartsupp después de que se ejecute el cargador.
Sí. Si el ajuste DELAY es mayor que cero, la plantilla envuelve la inicialización de Smartsupp y la inyección del script en setTimeout.
No, no necesitas una cuenta de desarrollador de TikTok solo para mostrar vídeos. El feed de visualización se basa en URLs de vídeo de TikTok pegadas y en el endpoint público oEmbed de TikTok. En los ajustes del módulo, introduce el nombre de usuario de TikTok para el enlace de seguimiento, pega una URL de vídeo de TikTok por línea en el campo Video URLs y guarda.
Cuando se construye el feed, el módulo divide la lista de URLs guardada por líneas, omite entradas que no contienen tiktok.com, llama a https://www.tiktok.com/oembed?url=... y guarda el título, caption, autor, miniatura y HTML embed devueltos para mostrarlos. Esa ruta de visualización no usa token de API, revisión de app ni credenciales de desarrollador.
Las credenciales solo son relevantes para el flujo opcional de publicación. La fuente tiene ajustes de publicación como ACCESS_TOKEN, CLIENT_KEY, AUTOPUBLISH y AUTOPUBLISH_CAPTION, y usa una instancia de publicador de TikTok para esa ruta. Si tu objetivo es solo incrustar vídeos seleccionados de TikTok en la tienda, puedes dejar vacías esas credenciales de publicación.
El módulo de visualización está activado por defecto, con interruptores de caption, icono de vistas e icono de likes activos, mientras que los valores compartidos de feed usan displayHome, 6 publicaciones, 3 columnas desktop, diseño de cuadrícula, lazy loading y una duración de caché de 3600 segundos. El feed se renderiza solo en el hook de social-feed configurado; si el hook configurado no coincide con el hook actual, no se genera nada.
Hay dos casos prácticos: las URLs sin tiktok.com se omiten, y cualquier petición oEmbed que falle se omite en lugar de renderizar una tarjeta rota. La tarjeta del escaparate enlaza a la URL original de TikTok y muestra la miniatura, autor y caption devueltos, así que vídeos eliminados/privados o respuestas oEmbed bloqueadas simplemente reducen el feed.
VIDEO_URLS=https://www.tiktok.com/@brand/video/1234567890 USERNAME=brand SHOW_CAPTION=1 POST_COUNT=6Sí. El trait compartido de chat comprueba el ajuste móvil antes de renderizar y no devuelve ningún botón cuando la visualización móvil está desactivada para un visitante móvil.
No, el módulo no gestiona agentes, historial de conversaciones ni flujos de soporte. WhatsApp gestiona la conversación en sí, mientras que el módulo gestiona el botón del escaparate y la URL click-to-chat. Eso mantiene la integración ligera y clara.
El único campo de conexión obligatorio es PHONE. Debe contener solo dígitos, de 7 a 20 caracteres, incluyendo el código de país y sin signos más ni espacios. La plantilla del front construye https://wa.me/{phone}, y si se configura un mensaje añade ?text=... para que WhatsApp lo prerrellene.
- Lo que controla PrestaShop: activar/desactivar, número de teléfono, mensaje opcional prerrellenado, posición, estilo icono/barra, texto CTA, color, tamaño, margen, tooltip, animación, visibilidad móvil, retraso de visualización y filtro de páginas.
- Lo que controla WhatsApp: el hilo real del chat, respuestas, asignación de personal, historial de mensajes, notificaciones y cualquier función de bandeja o CRM.
El mensaje opcional soporta {product} en páginas de producto y {url} para la página actual, lo que resulta útil para preguntas de producto. Sigue siendo solo un mensaje WhatsApp prerrellenado, no un ticket ni un registro de soporte guardado en PrestaShop.
El módulo reemplaza {url} por la URL de la página actual. En páginas de producto también puede reemplazar {product} por el nombre del producto actual.
El módulo puede renderizar desde el hook footer o before-body, pero una bandera estática interna evita la salida duplicada. El alcance de página puede ser todas las páginas, páginas de producto, páginas de categoría o páginas relacionadas con checkout.
Añade el código de invitación de Discord en la configuración del módulo y activa el widget. En PrestaShop, el módulo renderiza un botón de front office enlazado a discord.gg con el código de invitación guardado, posición configurable, estilo, texto CTA, color, tamaño, tooltip, animación y margen.
Usa solo el código de invitación, no la URL completa. El validador de configuración obligatoria espera letras, números, guiones y guiones bajos, de 2 a 64 caracteres. Un código de invitación ausente impide el renderizado; un código guardado inválido se marca en el aviso de configuración y puede producir un enlace de Discord incorrecto.
INVITE_CODE=AbCdEfG123 ENABLED=1 STYLE=icon POSITION=bottom-right CTA_TEXT=Join our DiscordEn la instalación, los valores predeterminados ya dejan el widget activado, abajo a la derecha, estilo icono, azul Discord #5865F2, tamaño 60px, margen 20px, tooltip activado, animación pulse, móvil activado, todas las páginas y sin retraso. El panel de configuración de administración recomienda crear una invitación permanente y un canal de soporte dedicado, porque el módulo envía a los compradores al flujo de unión al servidor en lugar de gestionar conversaciones de Discord dentro de PrestaShop.
Sí, el widget puede limitarse por tipo de página. En PrestaShop, la guarda de chat compartida soporta todas las páginas, páginas de producto, páginas de categoría o controladores relacionados con checkout, y también comprueba el ajuste separado de visibilidad móvil antes de renderizar.
El filtro de páginas se guarda en el ajuste compartido PAGES. La guarda devuelve true para all, comprueba php_self=product para páginas de producto, php_self=category para páginas de categoría, y trata cart, order, order-opc, orderopc y checkout como controladores relacionados con checkout.
La misma guarda también requiere ENABLED y un INVITE_CODE no vacío, y oculta el widget en móvil cuando SHOW_MOBILE está desactivado. Eso significa que la segmentación por página no es un snippet separado que haya que pegar en el tema; forma parte de la decisión de renderizado del módulo antes de generar el CSS y el botón.
PAGES=product SHOW_MOBILE=1 DELAY=0Si, el modulo tiene un ajuste de retraso para el boton de la tienda. En PrestaShop la plantilla del hook escribe un valor data-delay y un pequeño script oculta el widget y lo muestra tras los segundos configurados.
No, el módulo no envía texto prerrellenado a Discord. El ajuste de conexión obligatorio es un código de invitación, no un token de API de usuario/mensaje, y la plantilla del escaparate renderiza un enlace a https://discord.gg/{invite_code}.
El campo de administración Pre-filled Message se guarda como referencia y el módulo puede sustituir {url} internamente antes de asignar datos de plantilla, pero la plantilla actual del escaparate no genera ese mensaje ni lo añade a la URL de invitación de Discord.
Eso difiere de plataformas de chat que soportan parámetros URL para una conversación prerrellenada. Los enlaces de invitación de Discord llevan al comprador a un flujo de invitación/unión al servidor, así que la configuración práctica es crear un enlace de invitación permanente y dirigir a los clientes a un canal de soporte después de unirse.
La fuente confirma esa separación. El formulario de conexión de administración etiqueta el campo como Pre-filled Message, pero su descripción dice que no se usa para invitaciones de Discord y que se guarda como referencia. En el hook, el módulo sustituye {url} dentro del mensaje guardado antes de asignar datos Smarty, pero la plantilla solo usa invite_code, posición/estilo/CTA/apariencia, tooltip, animación y retraso.
Para comerciantes, la configuración fiable es la propia invitación: crea un código de invitación estable, evita que caduque y usa reglas de servidor/canal de Discord para guiar a los clientes después de unirse. No dependas de este módulo para abrir un DM directo de Discord, publicar en un canal o pasar un mensaje de checkout/producto a Discord.
No, es un módulo de navegación de idiomas. Ayuda a los compradores a cambiar entre idiomas que ya tienes en marcha y los dirige a URLs localizadas donde PrestaShop tiene datos. La calidad de traducción, segmentación por país y lógica de ubicación del visitante quedan fuera de este módulo.
El módulo lee los idiomas activos de PrestaShop para la tienda actual con Language::getLanguages(true, shop_id). Si la tienda solo tiene un idioma activo, no devuelve selector. Para cada idioma, asigna el ISO del idioma a un SVG de bandera cuando existe, construye una URL de idioma desde las URLs de idioma alternativo del front controller cuando están disponibles, y recurre a getLanguageLink() de PrestaShop.
- Navegación: la salida desktop oculta el selector nativo de idioma desktop y renderiza un desplegable de banderas en
displayNav2; la salida móvil puede renderizar un select simple endisplayMobileLanguageSelector. - Etiquetas:
SHOW_LABELcontrola si se muestra el código ISO actual junto a la bandera, ySHOW_NAMEScontrola si se muestran nombres completos de idioma en el desplegable. Los valores predeterminados son etiqueta desactivada y nombres activados. - Límites: no traduce nombres/descripciones de producto, no elige idiomas por geolocalización, no redirige visitantes por país ni crea URLs localizadas faltantes.
Hay limpieza adicional de URLs para alias de páginas principales y un hook de integración para rutas de filtro traducidas de MPR Filter Revolution, pero eso sigue dependiendo de rutas/datos traducidos existentes. Es un selector, no un motor de traducción.
Registra displayHeader, displayOrderConfirmation, actionCustomerAccountAdd y actionValidateOrder.
No. El template de confirmación de pedido y el server conversion builder usan el evento de Pinterest checkout para pedidos completados, incluyendo valor de pedido, cantidad, moneda, ID de pedido y event ID.
CAPI_ENABLED debe estar activado, el Pinterest ad account ID debe contener solo dígitos y el access token no debe estar vacío. El batch limit debe estar entre 1 y 100.
Sí, cuando una custom rule tiene capi habilitado. El front conversion bridge mapea nombres de eventos de navegador conocidos y también acepta nombres de eventos CAPI personalizados configurados.
El módulo lee la cadena de selectores configurada y ejecuta document.querySelectorAll para esos selectores. De forma predeterminada apunta a miniaturas de producto, bloques de categoría y elementos de productos destacados.
El script front termina pronto si IntersectionObserver no está disponible. Eso significa que no añade clases de animación ocultas en navegadores no compatibles.
Sí, puedes activar o desactivar el efecto desde los ajustes del módulo. Es útil si quieres probar si las animaciones ayudan a tu tienda o si una página de campaña necesita un diseño más tranquilo. Como el efecto no está hardcodeado en las plantillas, quitarlo no requiere revertir el tema.
El interruptor on/off es el ajuste ENABLED. El hook de cabecera comprueba primero ese valor; cuando está desactivado, vuelve antes de registrar el CSS del front, JavaScript o configuración inline, así que las plantillas del tema quedan intactas.
Los valores predeterminados de instalación son ENABLED=1, ANIMATION_TYPE=fade-up, DELAY=0, DURATION=600 y selectores para miniaturas de producto, bloques de categoría y elementos de productos destacados. Las opciones de administración también permiten cambiar el tipo de animación a fade-in, slide-left, slide-right o zoom-in, ajustar retraso/duración en milisegundos y editar la lista de selectores.
En el escaparate, el script usa IntersectionObserver. Si no hay selectores coincidentes o el navegador no soporta la API, sale sin aplicar clases ocultas/visibles. Por tanto, desactivar el ajuste del módulo es la ruta limpia de rollback; no se necesita revertir plantilla porque el módulo controla el registro de assets y la inyección de clases.
ENABLED=0No. Cuando el observer marca un elemento como visible, llama a unobserve para ese elemento, así que el reveal es una transición de una sola vez.
Los valores por defecto de instalación ponen ENABLED en 0 y USERNAME en una cadena vacía. El hook de renderizado sale pronto salvo que el módulo esté activado y exista un nombre de usuario.
No, abre tu perfil de Snapchat mediante el nombre de usuario configurado. El contenido del perfil y las conversaciones permanecen dentro de Snapchat. Esto mantiene el módulo centrado en dar a los compradores una ruta limpia para seguirte o contactarte sin añadir un feed social pesado a la página.
La salida del escaparate es un botón flotante renderizado desde el hook displayBeforeBodyClosingTag. El hook se detiene antes de renderizar si el botón Snapchat no está activado, si el valor USERNAME está vacío, si la visualización móvil está desactivada para un visitante móvil o si el controlador actual está listado en EXCLUDE_PAGES. Cuando renderiza, el destino se construye como https://www.snapchat.com/add/ más el nombre de usuario codificado en URL.
La plantilla confirma que es un enlace normal, no un embed de Snapchat. Genera una etiqueta <a> con la URL configurada, target=_blank opcional, texto de tooltip, estilo de botón, animación y mensaje grabber opcional. No hay iframe, llamada a API de Snapchat, renderizador de feed ni código que lea conversaciones o contenido del perfil desde Snapchat.
Required for output: ENABLED=1
Required account value: USERNAME=yourbrand
Rendered link: https://www.snapchat.com/add/yourbrandPara comerciantes, eso significa que el módulo tiene bajo impacto: da a los visitantes una ruta visible hacia tu presencia en Snapchat mientras deja todo el contenido, follows, mensajes y privacidad de cuenta bajo la app y web propias de Snapchat.
La definición de configuración lista small, medium y large, etiquetados como 48px, 60px y 72px. El tamaño seleccionado se pasa a la clase del widget como mprchat-size-....
No. Este módulo renderiza un enlace flotante a un perfil de Snapchat. Snapchat Pixel y el seguimiento de eventos publicitarios los gestiona otro módulo de este lote.
Cuando las wishlists de invitado están activadas, el script frontal guarda los ID de producto en localStorage del navegador y devuelve respuestas en modo invitado para acciones de añadir y eliminar. El almacenamiento con sesión iniciada usa las tablas de base de datos del módulo.
La configuración JavaScript marca al cliente como conectado y la acción de sincronización puede enviar los artículos de localStorage al servidor para que se añadan a la wishlist predeterminada del cliente.
Las wishlists de base de datos tienen un token de 32 caracteres. La vista frontal puede cargar productos por token, y la plantilla trata al propietario conectado de forma distinta a un visitante que ve una wishlist compartida.
Cuando un cliente conectado guarda un producto, el módulo almacena el precio del momento de añadirlo. La lista de productos compara ese precio guardado con el precio actual del producto y marca una bajada cuando el precio actual es inferior.
No. Este módulo es principalmente un tracker de automatización de Brevo y sincronización de registro de cliente, no una integración completa de eventos de carrito/pedido/producto.
- Gestiona:
displayBeforeBodyClosingTagcarga el script de automatización de Brevo, llama a la función de seguimiento de página e identifica al visitante por email cuando un cliente ha iniciado sesión.actionCustomerAccountAddpuede crear o actualizar el nuevo cliente como contacto de Brevo cuando la suscripción automática está activada. - No gestiona: actualizaciones de carrito, payloads de vista de producto, eventos de compra de confirmación de pedido, eventos de carrito abandonado o eventos de estado de pedido. El módulo no registra hooks de carrito, pedido o producto para esas acciones.
Si necesitas abandono de carrito, ingresos de compra o automatización de comportamiento de producto en Brevo, este módulo necesitaría hooks de evento adicionales o una integración separada que envíe esos eventos específicos de Brevo.
La lista de hooks es el límite importante: el módulo registra solo displayBeforeBodyClosingTag y actionCustomerAccountAdd. La plantilla del escaparate crea window.sib, carga https://sibautomation.com/sa.js?key=..., encola las funciones estándar de Brevo y llama a window.sendinblue.page(). Si un cliente ha iniciado sesión, también llama a window.sendinblue.identify() con la dirección de email. No se añaden IDs de producto, líneas de carrito, referencias de pedido, totales ni estados de pedido a ese payload de navegador.
En la creación de cuenta, el módulo publica al endpoint de contactos de Brevo con el email del cliente, FIRSTNAME, LASTNAME, updateEnabled=true y el LIST_ID configurado cuando se ha guardado uno. Eso es útil para crecimiento de lista y entrada básica en automatizaciones, pero está separado del seguimiento de eventos ecommerce.
Registered hooks: displayBeforeBodyClosingTag, actionCustomerAccountAdd
Contact API: POST https://api.brevo.com/v3/contacts
Tracked browser event here: page view, plus logged-in email identify
Not present here: cart payload, purchase payload, abandoned cart eventActiva el módulo, añade una clave API de Brevo y mantén activada la sincronización automática de registro. Cuando PrestaShop crea una cuenta de cliente, el hook actionCustomerAccountAdd envía el email más los atributos FIRSTNAME y LASTNAME a Brevo, e incluye el ID de lista configurado cuando se ha guardado uno.
Los ajustes relevantes son ENABLED, API_KEY, LIST_ID y AUTO_SUBSCRIBE. En la instalación, el módulo empieza con ENABLED=0, clave API vacía, ID de lista vacío, clave de cliente de tracker vacía y AUTO_SUBSCRIBE=1. Así que la configuración habitual es: activar Brevo, pegar la clave API de Brevo, introducir opcionalmente el ID de lista numérico para nuevos contactos y dejar activado Auto-subscribe New Customers.
La sincronización solo se ejecuta para creación de cuentas nuevas porque el módulo escucha actionCustomerAccountAdd. Primero comprueba que el módulo esté activo, que exista la clave API, que la suscripción automática esté activada y que PrestaShop haya proporcionado un objeto newCustomer cargado. Si cualquiera de esas comprobaciones falla, vuelve sin enviar nada a Brevo.
Cuando envía, el módulo publica JSON en https://api.brevo.com/v3/contacts con timeout cURL de 10 segundos y verificación SSL peer activada. Establece updateEnabled en true, así que un contacto existente en Brevo puede actualizarse en lugar de provocar un fallo por contacto duplicado. Esta versión de la fuente no importa clientes existentes en masa y no sincroniza ediciones posteriores de perfil salvo que PrestaShop cree una nueva cuenta mediante ese hook.
Required: ENABLED=1, API_KEY set, AUTO_SUBSCRIBE=1
Optional: LIST_ID=123
Sent fields: email, FIRSTNAME, LASTNAME, listIds when configuredSí. El hook del escaparate carga el tracker de automatización de Brevo solo cuando el módulo está activado, la Brevo API Key está configurada y la Client Key está configurada. El campo Client Key en los ajustes del módulo se etiqueta como Client Key (Tracker), y la pista de la fuente dirige a los comerciantes a Brevo > Automation > Settings > Tracking Code.
Para confirmar que el tracker se carga, abre el código fuente del escaparate o las herramientas de desarrollador del navegador y busca https://sibautomation.com/sa.js?key=... con script id sendinblue-js. La plantilla inicializa window.sib.client_key, encola sendinblue.track, sendinblue.identify, sendinblue.trackLink y sendinblue.page, identifica a clientes conectados por email y luego llama a window.sendinblue.page().
Si no ves ese script, revisa primero el interruptor de módulo activado, API Key y Client Key. El hook devuelve una cadena vacía cuando falta cualquiera de esos requisitos.
El requisito de API key importa aunque el tracker de navegador use la Client Key. En este módulo, isActive() es compartido por el hook del tracker y comprueba tanto ENABLED como API_KEY; luego el hook comprueba por separado CLIENT_KEY. Por tanto, una tienda con solo la Client Key guardada seguirá sin generar nada hasta que también se configure la API key.
Required for tracker output:
ENABLED=1
API_KEY=xkeysib-...
CLIENT_KEY=Brevo automation tracker keyLa salida del tracker se limita al script de automatización de Brevo, seguimiento de página e identificación por email de clientes conectados. En esta versión de la fuente no añade contenido de carrito, totales de pedido, metadatos de producto ni eventos de compra.
Sí, la sincronización automática de registro puede desactivarse desde la configuración del módulo. El hook actionCustomerAccountAdd de PrestaShop comprueba el interruptor AUTO_SUBSCRIBE antes de enviar un nuevo cliente a Brevo, así que el módulo puede permanecer instalado mientras la sincronización de registro está desactivada.
El ajuste se etiqueta como Auto-subscribe New Customers en las opciones del módulo. Su valor predeterminado es activado en una instalación nueva, pero el hook lo comprueba cada vez que PrestaShop crea una cuenta de cliente. Cuando AUTO_SUBSCRIBE está desactivado, el hook sale antes de validar el nuevo objeto de cliente o llamar a la API de contactos de Brevo.
Desactivar este interruptor solo detiene la sincronización de registro a contacto. No desinstala el módulo, no elimina credenciales API guardadas ni desactiva automáticamente el tracker de automatización del escaparate. Si ENABLED, API_KEY y CLIENT_KEY siguen configurados, el hook del tracker todavía puede cargar el script de Brevo y llamar a la función de seguimiento de página.
Tampoco da de baja ni elimina contactos que ya se crearon en Brevo. Simplemente impide que este módulo envíe futuras creaciones de contacto de nuevas cuentas mientras el interruptor permanezca desactivado.
AUTO_SUBSCRIBE=1: new customer can be posted to Brevo contacts
AUTO_SUBSCRIBE=0: actionCustomerAccountAdd returns before syncContactToBrevo()Puedes añadir Crisp chat a PrestaShop introduciendo tu Crisp Website ID y activando el módulo. El aviso de configuración del módulo espera el Website ID en formato UUID, pero el módulo solo exige que el campo no esté vacío; no impone el patrón UUID exacto al guardar ni al mostrar el widget. En la práctica, aun así deberías pegar el Website ID real con formato UUID desde Crisp, porque un valor arbitrario no vacío puede guardarse y renderizarse pero quizá no cargue un widget funcional.
Al instalar, el módulo Crisp crea valores de chat con ENABLED=1, WEBSITE_ID vacío, SHOW_MOBILE=1, PAGES=all, DELAY=0 y PASS_USER_DATA=1. Como el Website ID empieza vacío, el módulo puede instalarse correctamente, pero el widget permanece inactivo hasta guardar ese ID.
El aviso de configuración requerida espera formato UUID, por ejemplo xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. La ayuda de configuración apunta a Crisp en Settings > Website Settings > Setup instructions. Una vez guardado un valor no vacío, el escaparate sigue aplicando las mismas reglas de visualización, así que el widget respeta el interruptor de activación, un Website ID no vacío, el ajuste móvil y la segmentación de páginas.
Cuando se cumplen esas reglas, la plantilla define window.CRISP_WEBSITE_ID, opcionalmente envía datos de email/nombre del cliente conectado y añade https://client.crisp.chat/l.js de forma asíncrona al head de la página.
Minimum setup:
Enable Crisp Chat = Yes
Website ID = UUID from Crisp
Show on Pages = All Pages, Product Pages, Category Pages or Checkout PagesSí, Crisp chat puede limitarse por tipo de página de PrestaShop. La guarda de chat compartida soporta todas las páginas, páginas de producto, páginas de categoría o controladores de checkout, incluidos cart, order, order-opc, orderopc y checkout, antes de generar el script Crisp.
El ajuste es el campo select compartido Show on Pages. Sus valores guardados soportados son all, product, category y checkout. El valor predeterminado del módulo es all, así que una instalación nueva con un Website ID válido será apta para mostrarse en todas las páginas del escaparate salvo que el comerciante cambie ese ajuste.
La coincidencia de página usa el controlador actual de PrestaShop php_self. El modo solo producto coincide exactamente con product, el modo solo categoría coincide exactamente con category, y el modo checkout coincide con cart, order, order-opc, orderopc o checkout. El interruptor móvil se comprueba por separado, así que una página puede coincidir con la regla de página y aun así ocultarse en móvil si SHOW_MOBILE está desactivado.
Show on Pages = all -> every page
Show on Pages = product -> product controller only
Show on Pages = category -> category controller only
Show on Pages = checkout -> cart/order checkout controllersSi se guarda un valor inesperado en PAGES, la rama predeterminada de la guarda compartida permite la página en lugar de bloquearla. Para una segmentación predecible, usa uno de los cuatro valores expuestos por el formulario.
Sí, pero solo cuando la transferencia de datos de cliente está activada y el comprador ha iniciado sesión. El ajuste es el interruptor Pass Customer Data en la configuración del módulo Crisp; establécelo en No para impedir que el módulo envíe datos de identidad del cliente conectado a Crisp.
- Cuando
PASS_USER_DATAestá desactivado, el helper de chat compartido devuelve campos de cliente vacíos. - Cuando está activado y el cliente ha iniciado sesión, el helper devuelve el email del cliente y el nombre más apellidos del cliente.
- La plantilla Crisp envía esos datos como
user:emailyuser:nicknameantes de cargarhttps://client.crisp.chat/l.js.
Los visitantes anónimos siguen recibiendo el widget Crisp cuando el Website ID y las reglas de visualización lo permiten, pero no se transfiere ningún email o nombre de cliente de PrestaShop porque no hay objeto de cliente conectado.
En una instalación nueva, PASS_USER_DATA usa por defecto 1, así que los comerciantes que no quieran esta transferencia deberían desactivar el interruptor deliberadamente. El helper solo expone dos valores a la plantilla: customer_email y customer_name. No incluye datos de dirección, números de teléfono, contenido del carrito, historial de pedidos ni ID de cliente de PrestaShop.
El hook Crisp también debe cumplir primero las reglas normales de visualización del módulo. Si el módulo está desactivado, falta el Website ID, la visualización móvil está bloqueada o la regla de página no coincide, la plantilla no se renderiza y no se envían datos de cliente a Crisp.
PASS_USER_DATA=1 + logged-in customer: email and first name + last name can be pushed
PASS_USER_DATA=0 or anonymous visitor: customer_email and customer_name stay emptySí, el script de Crisp puede retrasarse un número configurado de segundos. La plantilla actual del hook de PrestaShop envuelve el cargador de Crisp en setTimeout cuando el retraso es superior a cero; no espera scroll, clic, toque u otra interacción de usuario.
El ajuste guardado es DELAY, mostrado en el formulario compartido como Fallback Delay (seconds). En el módulo Crisp actual, el hook pasa ese valor a la plantilla como entero. Si el valor es mayor que cero, la plantilla envuelve todo el bloque de configuración y añadido del script Crisp en setTimeout(..., DELAY * 1000).
Un valor de 0 significa que la plantilla no añade wrapper de timeout, así que la configuración Crisp se ejecuta inmediatamente cuando se analiza la salida del hook. Aunque la descripción del campo compartido menciona primera interacción de usuario y fallback, esta plantilla Crisp implementa solo el comportamiento de temporizador descrito arriba.
DELAY=0 -> no setTimeout wrapper; load immediately
DELAY=5 -> run Crisp setup after 5 seconds
DELAY=15 -> run Crisp setup after 15 secondsEl retraso no omite la cadena normal de guardas. El módulo debe seguir activado, el Website ID debe estar presente, la visualización móvil debe estar permitida para visitantes móviles y la regla de segmentación de páginas debe coincidir antes de imprimir cualquier script retrasado.
Sí. Configura los IDs de producto excluidos en el ajuste de lista de productos del módulo, por ejemplo como lista separada por comas. El override elimina los productos excluidos del paquete pasado al cálculo de reglas de carrito de PrestaShop, así que los descuentos monetarios se calculan solo sobre productos elegibles.
Excluded product IDs: 42,108,315
Cart: #42 $100 excluded + #77 $50 eligible
Voucher: 20% off products
Before exclusion: 20% of $150 = $30 discount
After exclusion: 20% of $50 = $10 discount; #42 stays at full priceLa misma lista de exclusión puede combinarse con exclusiones de categoría y fabricante porque el módulo fusiona las tres fuentes en un único conjunto de productos excluidos. Los descuentos porcentuales se aplican solo a productos elegibles. Las reducciones de importe fijo se prorratean mediante el paquete filtrado, mientras que el envío gratuito y el comportamiento de regalo se dejan al manejo normal de reglas de carrito de PrestaShop.
El ajuste de lista de productos se guarda como PRODUCTS. El resolvedor lee el valor separado por comas, convierte cada entrada con intval, elimina valores cero vacíos y luego fusiona esos IDs con IDs derivados de categoría y fabricante. La lista final se cachea para la petición PHP actual, lo que evita repetir las consultas de categoría y fabricante durante el mismo cálculo de carrito.
El override CartRule solo cambia reglas con una reducción monetaria: reduction_percent mayor que cero o reduction_amount mayor que cero. Si el módulo no está activado, si la lista de exclusión configurada se resuelve como vacía o si el paquete de la regla de carrito actual no contiene productos excluidos, delega sin cambios en el cálculo padre de PrestaShop.
Como el filtro comprueba id_product, la exclusión se aplica al producto completo. Si un producto tiene combinaciones, la fuente no distingue una combinación de atributo de otra en este paso de exclusión.
Stored setting: PRODUCTS=42,108,315
Resolver output: [42,108,315,...category matches,...manufacturer matches]
Override input: package products
Override output: package products without excluded id_product valuesSí. Las exclusiones pueden introducirse como IDs directos de producto, IDs de categoría e IDs de fabricante. Los campos de configuración de administración son listas separadas por comas, y el resolvedor las convierte en una lista final de IDs de producto antes del cálculo del descuento.
PRODUCTS=12,15
CATEGORIES=3,7
MANUFACTURERS=1,4Con esa configuración, los productos 12 y 15 se excluyen directamente. El módulo también consulta category_product para cada producto asignado a las categorías 3 o 7, y consulta product para cada producto cuyo id_manufacturer es 1 o 4. Fusiona esos IDs, elimina duplicados con array_unique y cachea el resultado para la petición actual.
El override CartRule pide entonces al módulo esa lista resuelta de productos y filtra los productos excluidos fuera del paquete antes de que se calcule el descuento de regla de carrito padre. En términos de comerciante: los productos coincidentes permanecen a precio completo, mientras que el resto del carrito puede seguir recibiendo el descuento del cupón.
La regla de categoría se basa en los IDs exactos de categoría guardados en CATEGORIES. La consulta de fuente lee filas de category_product donde id_category está en esa lista; no recorre el árbol de categorías en PHP. Si una tienda necesita excluir también todas las categorías hijas, esos IDs de categorías hijas deberían incluirse salvo que los productos también estén asignados directamente a la categoría padre listada.
La regla de fabricante se basa en product.id_manufacturer. Como ocurre con productos directos, la exclusión final es por id_product, así que todas las combinaciones de un producto coincidente se tratan como excluidas. Las entradas de texto inválidas se reducen efectivamente mediante conversión a entero; los valores vacíos y cero no aportan IDs de producto útiles.
Category source: ps_category_product.id_category IN saved category IDs
Manufacturer source: ps_product.id_manufacturer IN saved manufacturer IDs
Final discount filter: id_product not in resolved exclusion listNo, el override apunta a reducciones monetarias de reglas de carrito, no al beneficio de envío gratuito en sí. Si el módulo está desactivado, no hay productos excluidos configurados o la regla de carrito no tiene reducción porcentual ni de importe fijo, el override delega en el cálculo normal CartRule de PrestaShop.
Ejemplo: un cupón da 10% off plus free shipping, y el carrito contiene solo productos excluidos por este módulo. El descuento de producto se convierte en 0 porque todos los productos están excluidos de la reducción monetaria, pero si la regla tiene free_shipping y PrestaShop está calculando la acción de envío, el override delega en el cálculo padre de envío para que la parte de envío gratuito pueda seguir aplicándose.
Para carritos mixtos, el módulo filtra los productos excluidos antes del cálculo padre. Los descuentos porcentuales se aplican solo a productos elegibles, y los descuentos de importe fijo los calcula PrestaShop contra el paquete filtrado.
La ruta rápida es importante para cupones solo de envío gratuito. Cuando una regla de carrito no tiene reduction_percent ni reduction_amount, el override devuelve el resultado padre de PrestaShop sin filtrar el paquete. Eso significa que un cupón puro de envío gratuito sigue las condiciones normales de cupones de PrestaShop y no se reduce solo porque los productos estén en la lista de exclusión.
Cuando todos los productos están excluidos y una regla combina un descuento monetario con envío gratuito, el override devuelve 0 para la parte monetaria salvo que el filtro actual sea uno de los filtros de acción shipping/all de PrestaShop. Para esos filtros shipping/all llama al cálculo padre con FILTER_ACTION_SHIPPING, que es la razón a nivel de fuente por la que el beneficio de envío puede seguir disponible.
Un detalle práctico: el aviso opcional del carrito está separado de las matemáticas del descuento. El renderizador de aviso comprueba si el módulo y el aviso están activados, si el carrito tiene reglas de carrito y si hay productos excluidos presentes. No inspecciona si la regla de carrito es monetaria o solo de envío gratuito, así que el mensaje puede seguir siendo informativo mientras PrestaShop gestiona el envío normalmente.
Sí, el módulo puede mostrar un aviso en el carrito cuando hay productos excluidos. En PrestaShop, el aviso aparece solo cuando el módulo y el ajuste de aviso están activados, el carrito tiene reglas de carrito y al menos un producto del carrito coincide con la lista de exclusión.
La función de aviso está activada por defecto al instalar con SHOW_NOTICE=1. El texto multilingüe predeterminado del aviso es The following products are excluded from the applied discount:, y los comerciantes pueden editar NOTICE_TEXT desde los ajustes del módulo. El módulo registra tanto displayShoppingCart como displayShoppingCartFooter; el hook footer se mantiene como alias de compatibilidad para tiendas que todavía usan la ubicación de hook antigua.
El renderizador también tiene una guarda contra duplicados. Una vez que un aviso se ha renderizado durante la petición, $cartNoticeRendered impide que el mismo mensaje aparezca dos veces si ambos hooks de carrito se ejecutan en el tema.
El módulo construye la lista de nombres de producto desde los productos actuales del carrito cuyo id_product aparece en la lista de exclusión resuelta. Si product_name no está disponible, recurre a name y luego a una etiqueta genérica de número de producto. La plantilla escapa tanto el texto del aviso como los nombres de producto antes de generar la salida.
Notice shown only if:
ENABLED=1
SHOW_NOTICE=1
cart has at least one cart rule
cart contains at least one resolved excluded productSi no hay cupón/regla de carrito aplicada, el aviso se oculta intencionadamente aunque haya productos excluidos en la cesta. Eso mantiene el mensaje ligado al momento en que un cliente espera un descuento y podría preguntarse por qué algunos artículos quedaron a precio completo.
El campo obligatorio es el HubSpot Portal ID. El aviso de configuración requerida del módulo permanece activo mientras el campo esté vacío.
La plantilla de HubSpot revisada identifica a los clientes conectados por e-mail cuando pass-user-data está activado. No envía datos de visitantes anónimos desde PHP.
El trait compartido del chat admite todas las páginas, páginas de producto, páginas de categoría o páginas relacionadas con el checkout, como cart, order, order-opc, orderopc y checkout.
No. El código utiliza un timeout configurado en milisegundos antes de renderizar el widget. Es un retraso temporal, no un cargador activado por interacción.
No hay ningún motor de reglas automáticas en los archivos leídos aquí. La asignación de insignias se guarda por producto en mprproductbadges, y el formulario admin requiere un producto seleccionado.
La tabla guarda id_product, badge_name, badge_color, badge_bg_color, position y active, además del ID de insignia autoincremental.
La consulta del storefront filtra por producto y estado activo, y después ordena los resultados por position ASC. Los números de posición más bajos se muestran primero.
Sí. MprProductBadgesConfig expone un interruptor ENABLED. Cuando está desactivado, renderBadges() devuelve una cadena vacía antes de leer datos del producto.
El módulo debe estar activado y debe existir un Pixel ID. El validador de configuración obligatoria acepta Pixel IDs con letras, números, guiones bajos o guiones, con longitud de 8 a 128 caracteres.
displayOrderConfirmation renderiza el evento purchase del navegador. actionValidateOrder encola un evento purchase server-side cuando Conversions API está configurada y el seguimiento purchase está activado.
Los eventos header y purchase reciben un event_id desde PrestaShopConversionBuilder::buildEventId, y el mismo valor se copia a client_dedup_id. La cola Purchase CAPI usa el mismo event ID basado en el pedido.
Las reglas pueden activarse por clics CSS, coincidencias de URL, coincidencias de controller/module o eventos DOM con nombre. El normalizer valida requisitos de trigger, limita la longitud del selector y sanea parámetros personalizados antes de guardar el JSON.
El feed necesita un bearer token y un username cuando el módulo no está gestionado por Social Revolution. El módulo puede llamar a X API para resolver el user ID a partir de ese username.
La configuración controla texto del post, fecha, likes, reposts, respuestas, medios y detalles del autor. El código también crea permalinks y gestiona expansiones de medios devueltas por la API.
No. Los requisitos difieren. YouTube puede usar URLs manuales de vídeo sin API key, mientras que Facebook, Instagram y X requieren credenciales de plataforma antes de poder obtener posts desde sus APIs. Cada módulo muestra su propio aviso de configuración requerida.
Los módulos de feed usan datos cacheados y obtienen desde su plataforma/fuente configurada cuando las reglas de caché lo permiten. Algunos también ofrecen controles de limpiar caché o sincronizar, así que el comportamiento real de refresco depende de credenciales, duración de caché y ajustes del módulo de plataforma.
No. Las opciones de layout son similares, pero no idénticas. Facebook y X incluyen opciones grid, slider y lista; Instagram y YouTube incluyen opciones grid/slider; Pinterest y TikTok tienen sus propias plantillas de feed y post-item.
Los módulos de integración individuales incluyen visualización de feeds y algunos hooks o secciones de auto-publicación en el código, pero el pack debe describirse principalmente como integraciones de visualización de feeds salvo que la configuración de publicación de un módulo de plataforma concreto esté configurada y probada.
El módulo asigna páginas y hooks del front office de PrestaShop a eventos Criteo OneTag, con ajustes separados para cada evento estándar.
| Evento | Dónde se dispara | Notas |
|---|---|---|
viewHome | Página de inicio desde displayHeader | Controlado por el ajuste de tracking de home. |
viewItem | Página de producto desde displayHeader | Usa el contexto del producto actual. |
viewCategory | Página de categoría/listado desde displayHeader | Usa contexto de categoría/listado y datos de productos visibles cuando están disponibles. |
viewSearchResult | Página de resultados de búsqueda desde displayHeader | Incluye contexto de búsqueda y datos de productos coincidentes cuando están disponibles. |
viewBasket | Página de carrito o checkout desde displayHeader | Usa las líneas del carrito actual. |
addToCart | JavaScript de front office en la plantilla de cabecera | Capturado desde interacciones de actualización de carrito y añadir al carrito. |
trackTransaction | Confirmación de pedido desde displayOrderConfirmation | Usa referencia de pedido, moneda y líneas compradas. |
custom | Reglas configuradas de clic, URL, controlador o evento DOM | Solo se ejecuta cuando el tracking de eventos personalizados está activado y las reglas coinciden. |
Todos los eventos de navegador siguen dependiendo de que el módulo esté activo, haya un partner ID de Criteo configurado, el visitante pase las comprobaciones de tracking/consentimiento del módulo y el toggle correspondiente por evento esté activado.
Sí, puede respetar el consentimiento de cookies cuando RESPECT_CONSENT está activado, que es el valor predeterminado del módulo. El módulo comprueba primero mprcookiesrevolution analizando la cookie mprcr_consent y buscando marketing:1. Si falta esa cookie, recurre al valor DEFAULT_CONSENT de mprcookiesrevolution.
Si Cookies Revolution no está activo, comprueba mprcookiebanner. Un valor de cookie mprcookie_consent=granted permite Criteo; cualquier otro valor presente lo bloquea. Si la cookie del banner no existe, el módulo usa el DEFAULT_CONSENT de mprcookiebanner.
Si no hay ningún módulo de consentimiento MPR compatible instalado o activo, hasMarketingConsent() devuelve permitido, así que Criteo no se bloquea solo por consentimiento. Para una configuración estricta basada primero en consentimiento, mantén Respect marketing consent activado y ejecuta uno de los módulos de consentimiento MPR compatibles. La puerta de consentimiento del lado del cliente solo se activa cuando Respect marketing consent está activo y mprcookiesrevolution o mprcookiebanner está activo.
La comprobación de consentimiento forma parte de canTrack(), que se usa antes de eventos de cabecera, eventos de compra de confirmación de pedido y encolado de compras del lado del servidor. Así que cuando la comprobación de consentimiento del servidor bloquea el seguimiento, el módulo no construye eventos normales de navegador y no encola la conversión del lado del servidor desde actionValidateOrder.
La plantilla del navegador también incluye una comprobación de consentimiento del lado del cliente cuando la puerta de consentimiento está activa. Puede llamar a window.MPRCR.isGranted('marketing') cuando Cookies Revolution expone ese helper, o puede leer directamente las mismas cookies mprcr_consent y mprcookie_consent. Si esa comprobación JavaScript devuelve false, se detiene antes de enviar eventos Criteo a window.criteo_q.
RESPECT_CONSENT=0: consent check is bypassed
RESPECT_CONSENT=1 + mprcr_consent contains marketing:1: allowed
RESPECT_CONSENT=1 + mprcookie_consent=granted: allowed
RESPECT_CONSENT=1 + no supported MPR consent module: allowed by this moduleEl consentimiento no es la única guarda de seguimiento. El seguimiento del navegador también requiere ENABLED=1 y un Criteo Partner ID numérico válido, y la navegación de empleados puede excluirse cuando EXCLUDE_EMPLOYEES está activado.
Sí, cuando SEND_CUSTOMER_IDENTIFIERS está activado. El módulo construye eventos de cliente de Criteo separados junto a los eventos normales de página o compra. Nunca envía el email en claro en esos eventos de cliente; lo convierte a minúsculas, lo recorta y luego lo hashea con SHA-256. El ID de cliente también se hashea con un prefijo customer:.
[{"event":"setCustomerId","id":"sha256(customer:123)"},{"event":"setEmail","email":"sha256(alice@example.com)"}]Los valores anteriores son placeholders que muestran solo la forma. En la salida real del escaparate, los campos hash contienen cadenas hexadecimales SHA-256 de 64 caracteres. Los eventos se omiten por completo cuando los identificadores de cliente están desactivados o cuando no puede cargarse un cliente válido desde el contexto u pedido actual.
El ajuste está desactivado por defecto, así que el comerciante debe optar por activarlo antes de que se creen estos eventos. Para eventos normales de página, el módulo usa el cliente actual de PrestaShop desde el contexto del escaparate. Para eventos de compra de confirmación de pedido, puede cargar el cliente desde el id_customer del pedido. En ambas rutas, la fuente comprueba que exista un objeto cliente válido antes de añadir cualquier evento de identificador.
Las plantillas del navegador colocan estos eventos de identificador en la cola universal con setAccount y setSiteType, antes de enviar el evento de página, cesta o compra a window.criteo_q. El módulo no envía el nombre, teléfono, dirección postal ni ID de cliente PrestaShop sin procesar en esos eventos de cliente del navegador.
Para seguimiento de compras del lado del servidor, la misma bandera opt-in también puede añadir un valor de email hasheado a la consulta Retail Media cuando el cliente del pedido tiene una dirección de email. Esa ruta del lado del servidor sigue dependiendo de las guardas normales de seguimiento: el módulo debe estar activo, el consentimiento debe permitir seguimiento cuando está activado, el seguimiento de compra debe estar activo y los ajustes de Criteo del lado del servidor deben ser válidos.
Sí. El módulo tiene seguimiento opcional de compras Criteo Retail Media del lado del servidor. Para usarlo, el seguimiento de compras debe estar activado y los ajustes del lado del servidor deben estar configurados: Criteo partner ID, S2S_ENABLED, región eu o us, IDs de página API desktop y móvil, y un límite de lote. El límite de lote predeterminado del lado del servidor es 20, con validación acotada de 1 a 100.
Cuando PrestaShop dispara actionValidateOrder, el hook encola una conversión trackTransaction para el proveedor criteo_retailmedia y procesa inmediatamente un lote pequeño, pero no inspecciona por sí mismo el estado del pedido o el estado de pago. La ruta de cola se ejecuta cuando el seguimiento del módulo puede ejecutarse, el seguimiento de compra está activado, la configuración del lado del servidor es válida y hay un objeto Order cargado. Si necesitas semántica de solo pagado, debe garantizarse por el contexto de validación del pedido o añadirse como una comprobación explícita de estado.
También se registra una tarea cron llamada send_criteo_retailmedia_conversions para procesar conversiones encoladas cada 300 segundos. La petición del servidor se envía al endpoint Retail Media de Criteo para la región configurada, como d.eu.criteo.com o d.us.criteo.com, con ID de transacción, artículo, precio, cantidad, moneda, datos de visitante/cliente e ID de página. El ajuste opcional S2S_SEND_IP_UA controla si se incluyen datos de IP y user-agent. Esta cola del lado del servidor está separada del evento de navegador trackTransaction en la página de confirmación de pedido, así que los envíos fallidos del servidor pueden reintentarse sin depender de la sesión del navegador del cliente.
La función del lado del servidor se instala con la tabla de cola de conversiones compartida y registro cron. Está desactivada por defecto: S2S_ENABLED=0, S2S_REGION=eu, ID de página desktop trackTransactionApiDesktop, ID de página móvil trackTransactionApiMobile, S2S_SEND_IP_UA=1 y S2S_BATCH_LIMIT=20. El Partner ID debe ser numérico y de 4 a 20 dígitos, la región debe ser eu o us, y los IDs de página pueden contener letras, números, guion bajo, dos puntos y guion.
En la validación de pedido, el módulo comprueba primero las guardas de seguimiento de alto nivel: Criteo debe estar activo, el seguimiento de compra debe estar activado, el consentimiento debe permitir seguimiento cuando la guarda de consentimiento está activa y los ajustes del lado del servidor deben pasar la validación. Si cualquiera de esas comprobaciones falla, no se encola ningún evento de servidor.
El payload de compra se construye desde los datos de línea de pedido. Los IDs de artículo, precios y cantidades se unen con caracteres pipe para la consulta Criteo Retail Media. Si no se puede mapear ningún ID de artículo, el módulo envía un fallback item=None, price=0.00 y quantity=1 en lugar de dejar vacío un campo obligatorio. El valor de entorno se selecciona desde el user agent como desktop d, móvil m o tablet t, y ese entorno elige el ID de página desktop o móvil.
El controlador de administración también expone herramientas operativas para esta cola: puede mostrar recuentos pending/sending/sent/failed, enviar una prueba de API y mover eventos Criteo del lado del servidor fallidos de nuevo a pending para reintento.
Required server-side setup:
ENABLED=1
PARTNER_ID=12345
TRACK_PURCHASE=1
S2S_ENABLED=1
S2S_REGION=eu or us
S2S_DESKTOP_PAGE_ID=trackTransactionApiDesktop
S2S_MOBILE_PAGE_ID=trackTransactionApiMobileCuando hay un user ID configurado, el módulo llama al endpoint Facebook Graph media con campos como caption, media_type, media_url, thumbnail_url, permalink, timestamp, like_count y comments_count. Sin user ID, recurre al endpoint Instagram Basic Display me/media.
El número de publicaciones configurado está limitado en el código a 25. La configuración predeterminada usa 12 publicaciones.
No se encontró ninguna carga de Stories ni ruta de plantilla para Stories en el código revisado. El feed gestiona publicaciones recientes de medios, incluidas imágenes, miniaturas de vídeo y badges de carousel.
El servicio de sincronización comprueba que mprgalleryrevolution esté activo, crea o reutiliza una galería de Instagram, descarga medios de imagen, crea registros de medios de Gallery Revolution y guarda registros de sincronización con datos de engagement.
El módulo crea su propia tabla mprpsvls_view y registra vistas de páginas de producto por producto, tienda e invitado. Los totales se cuentan como invitados distintos dentro del período configurado.
No. Los recuentos de ventas se calculan desde pedidos y detalles de pedido de PrestaShop, filtrados a pedidos válidos y al período configurado. Los ajustes de boost pueden cambiar el número mostrado, pero el conteo fuente viene del historial de pedidos.
Si la opción de conteo mínimo está activada, el módulo no devuelve nada cuando todos los contadores habilitados están por debajo del mínimo configurado. Esto evita que aparezcan bloques de estadísticas vacíos o poco convincentes en la página de producto.
El modal carga mediante el controlador AJAX del módulo y puede mostrar pedidos válidos recientes del producto actual. Los datos incluyen nombre del cliente, ciudad, país, nombre del producto, cantidad y fecha, con anonimimización del nombre disponible desde la configuración.
El módulo usa mprscd_description para la categoría, tienda y registro activo, y mprscd_description_lang para el texto de descripción multilingüe.
No por defecto. La configuración FIRST_PAGE_ONLY se instala como activada, y el renderer devuelve salida vacía cuando el número de página de categoría solicitado es mayor que 1.
En versiones de PrestaShop que usan el hook del formulario de categoría Symfony, el módulo añade un textarea formateado traducible llamado mprscd_description directamente después del campo de descripción nativo.
El injector inserta la llamada estándar de hook Smarty {hook h='displayMprSecondCatDesc'} envuelta en comentarios marcadores del módulo. Rechaza rutas inseguras fuera de plantillas del tema y puede eliminar después las inyecciones marcadas.
La constante del módulo PLATFORMS lista facebook, instagram, x, linkedin, pinterest, tiktok y youtube. El controller de conexión incluye rutas OAuth para las plataformas donde están implementadas.
El módulo instancia servicios de tracking para Facebook, Pinterest, Microsoft Ads, Google Ads, LinkedIn, TikTok, X, Snapchat, Reddit, Taboola y Outbrain. Los hooks header, confirmación de pedido, validación de pedido y sign-up delegan en esos servicios.
Las tareas cron declaradas procesan la cola de posts cada 60 segundos, refrescan la caché de feeds cada 1800 segundos, actualizan tokens OAuth que caducan cada 3600 segundos, recopilan analytics a diario a las 06:00 y procesan colas de conversión cada 300 segundos por provider.
La pantalla analytics filtra por rango de fechas y muestra posts, posts fallidos, reach, impressions, engagement, clics y últimos followers para cada fila de plataforma devuelta a la plantilla.
Cuando está configurada, encola payloads de conversión del lado del servidor con datos de evento e identificadores disponibles como twclid, campos de cliente hasheados y opcionalmente IP y user agent, y luego envía solicitudes firmadas al X ads API endpoint.
El módulo debe estar activado y debe guardarse una Pixel ID válida. Purchase tracking también requiere una purchase event ID, y Conversions API requiere sus propias credenciales cuando está activada.
El código puede construir PageView, ViewContent, AddToCart, InitiateCheckout, Purchase, Search, AddToWishlist, SignUp y eventos personalizados configurados, según los interruptores activados y el contexto de página.
Cuando el respeto del consentimiento está activado, el servicio comprueba cookies de consentimiento compatibles y puertas de consentimiento del lado del cliente. La plantilla frontal puede retrasar la carga hasta que se conceda el consentimiento de marketing.
Añade tu Chatra Widget ID y activa el módulo. El hook de PrestaShop renderiza el script de Chatra antes de la etiqueta de cierre body, asigna el ID a window.ChatraID y carga https://call.chatra.io/chatra.js de forma asíncrona en el escaparate. Esto mantiene la configuración ligada a los ajustes del módulo y al comportamiento en tiempo de ejecución de PrestaShop.
Al instalar, el módulo Chatra establece ENABLED=1, WIDGET_ID vacío, SHOW_MOBILE=1, PAGES=all, DELAY=0 y PASS_USER_DATA=1. Por tanto, el módulo puede instalarse y estar activado, pero no generará el widget hasta que se guarde un Widget ID no vacío.
La página de configuración etiqueta el campo como Widget ID y la ayuda de la fuente dice que se pegue desde Chatra en Settings > General > Widget code. El validador de configuración obligatoria solo comprueba que el valor no esté vacío; no impone un formato tipo UUID como hace el módulo Crisp.
Antes de renderizar, la guarda de chat compartida comprueba que el módulo esté activado, que el WIDGET_ID requerido esté presente, que la visualización móvil esté permitida cuando el visitante está en móvil y que la regla de segmentación de página seleccionada coincida con el controlador actual. Cuando esas comprobaciones pasan, la plantilla define window.ChatraID, crea window.ChatraSetup y añade el script cargador de Chatra de forma asíncrona.
Minimum setup:
Enable Chatra Chat = Yes
Widget ID = value copied from Chatra widget code
Show on Pages = all, product, category or checkoutSi PASS_USER_DATA está activado y el comprador ha iniciado sesión, la plantilla también coloca el email del cliente en ChatraSetup.clientId. No envía el nombre del cliente, dirección, contenido del carrito ni historial de pedidos en esta plantilla.
Sí, el script de Chatra puede retrasarse un número configurado de segundos. En PrestaShop, la plantilla envuelve el cargador del widget en setTimeout cuando el valor de retraso es mayor que cero, y luego carga el mismo script de Chatra después de ese retraso.
El ajuste guardado es DELAY, expuesto en el formulario de chat compartido como Fallback Delay (seconds). El módulo lo pasa a la plantilla Smarty como entero. Cuando DELAY>0, la plantilla envuelve tanto la asignación window.ChatraID/window.ChatraSetup como el bloque de añadido del script en setTimeout(..., DELAY * 1000).
Cuando DELAY=0, la plantilla no envuelve el cargador en setTimeout, así que Chatra se inicializa inmediatamente cuando se analiza la salida del hook. La plantilla actual no implementa carga por scroll, clic, toque o primera interacción; es un temporizador simple basado en segundos.
DELAY=0 -> load immediately
DELAY=3 -> wait 3 seconds, then load Chatra
DELAY=10 -> wait 10 seconds, then load ChatraEl ajuste de retraso solo afecta al tiempo después de que el módulo haya decidido renderizar. La guarda normal sigue aplicándose primero: el módulo debe estar activado, WIDGET_ID debe estar guardado, el ajuste móvil debe permitir el dispositivo del visitante y la regla de segmentación de páginas debe coincidir.
Sí, el módulo puede limitar Chatra por tipo de página de PrestaShop. Su configuración soporta todas las páginas, páginas de producto, páginas de categoría y controladores relacionados con checkout como cart, order y checkout, así que el widget no se renderiza necesariamente en todas las páginas del escaparate.
En la configuración del módulo, este es el ajuste PAGES. Las opciones integradas son all, product, category y checkout; checkout cubre la familia de controladores cart/order usada por distintas versiones de PrestaShop, incluidos cart, order, order-opc, orderopc y checkout. El widget se renderiza desde displayBeforeBodyClosingTag solo cuando el módulo está activado, el Widget ID requerido está presente, el ajuste móvil permite el dispositivo actual y la comprobación de página pasa.
Hay un límite práctico: esto es segmentación por tipo de página, no un constructor de reglas por URL. Cuando PAGES está establecido en product, category o checkout, otros nombres de controlador no pasan como permitidos; fallan la comprobación del tipo de página seleccionado. El fallback permisivo es para un ajuste vacío/all o un valor inesperado de configuración PAGES. Si necesitas incluir o excluir una landing page concreta o un controlador muy específico, eso requeriría una regla a nivel de código o una capa de segmentación más avanzada dentro de Chatra.
Sí, pero en el snippet de Chatra renderizado por este módulo solo se pasa a Chatra el email del cliente conectado. El helper de chat compartido puede recoger email y nombre cuando PASS_USER_DATA está activado y el cliente ha iniciado sesión, pero la plantilla Chatra solo escribe el email como window.ChatraSetup.clientId.
Para desactivar ese paso de datos, desactiva el interruptor Pass Customer Data en los ajustes del módulo Chatra. Entonces el helper devuelve valores de cliente en blanco y la plantilla no emite clientId. Esta plantilla Chatra no imprime nombre de cliente, datos de pedido, datos de dirección ni datos de grupo.
Los disparadores de chat, enrutamiento de chat, asignación de operadores y diseño del widget siguen configurándose dentro de Chatra. El módulo de PrestaShop es principalmente responsable de cargar https://call.chatra.io/chatra.js con el Widget ID y retraso opcional.
El valor predeterminado de instalación para PASS_USER_DATA es activado, pero los datos siguen siendo condicionales: el objeto cliente debe existir, el visitante debe haber iniciado sesión y el hook del escaparate debe tener permiso para renderizar. Los visitantes invitados no reciben ningún identificador de cliente desde este módulo. El ajuste de retraso también se maneja localmente: cuando DELAY es mayor que cero, la plantilla envuelve el cargador de Chatra en setTimeout; cuando es cero, el cargador se ejecuta inmediatamente.
Para revisiones de privacidad, la distinción importante es que el helper puede devolver un nombre completo, pero esta plantilla concreta de Chatra no lo genera. El único valor derivado del cliente emitido por la plantilla es el clientId basado en email, y solo cuando PASS_USER_DATA permanece activado.
Sí. El resolver comprueba la segmentación entity selector para el producto y también aplica reglas de grupo de clientes, programación, país y visibilidad de stock antes de preparar una pestaña para mostrarla.
El código admite los tipos de contenido html, markdown, entities, mixed, contact y files. Las pestañas entity y mixed pueden renderizar productos seleccionados y páginas CMS, mientras que las de archivos exponen descargas validadas.
El reCAPTCHA del formulario de contacto es configurable. Cuando está activado y las claves están configuradas, el handler verifica el token enviado con Google antes de guardar la consulta o enviar el email de notificación.
No. La acción getTabContent carga la pestaña solicitada, comprueba que esté activa y verifica mediante el resolver que aplique al producto actual antes de devolver HTML.
La plantilla del hook tiene ramas para facebook, twitter, pinterest, linkedin, whatsapp y email. Solo se renderizan las redes presentes en la lista configurada.
El módulo renderiza en displayProductMetaShare y displayProductAdditionalInfo, pero displayProductAdditionalInfo devuelve vacío después de que se haya definido productShareRendered.
No. La plantilla usa enlaces anchor simples a la URL de compartir de cada plataforma e iconos SVG inline. No hay scripts sociales de terceros en la plantilla.
El método de renderizado resuelve la URL del producto y el nombre del producto, los codifica para los endpoints de compartir y también asigna valores sin procesar a Smarty. Si no puede resolverse ninguna URL o ID de producto, usa la URL de la página actual.
El módulo debe estar activado y la counter ID debe contener solo dígitos. El servicio de tracking también comprueba exclusión de empleados y reglas de consentimiento antes de ejecutar tracking normal.
Según la configuración y el contexto de página, prepara datos de tracking para page view, product view, category view, add to cart, add to wishlist, checkout start, búsqueda, signup y purchase.
Cuando Measurement Protocol está activado, la counter ID y el token están configurados, y hay una Yandex client ID válida disponible, el hook de validación de pedido puede encolar un payload Purchase y procesar un lote pequeño.
El servicio lee datos de consentimiento de MPR Cookies Revolution y MPR Cookie Banner cuando esos módulos están presentes. Si el respeto del consentimiento está desactivado, el tracking se permite sin esas comprobaciones.
EU VAT Checker valida números VAT mediante VIES en formularios de dirección y solicitudes AJAX del frontend. En PrestaShop carga la validación en páginas de pedido, dirección, carrito y checkout, y luego también comprueba direcciones guardadas mediante hooks de añadido y actualización.
En el escaparate, el módulo registra su JavaScript de validación solo para la familia de páginas checkout/dirección: order, address, cart y checkout. El script observa campos VAT, normaliza los números introducidos eliminando espacios, puntos y guiones, pone el valor en mayúsculas y luego llama al controlador AJAX del módulo. Aplica debounce a comprobaciones en vivo y vuelve a validar en blur. Al enviar el formulario, el script dispara una llamada AJAX de validación cuando hace falta, pero no impide el envío ni espera esa respuesta AJAX.
El bloqueo se implementa del lado del servidor, así que la comprobación no es solo cosmética. En PrestaShop 1.7+, el módulo se engancha a la validación del formulario de dirección y añade errores al campo VAT cuando el número VAT no es válido. En flujos antiguos también tiene un hook heredado de envío de cuenta/dirección que añade errores del controlador. Si el número VAT no tiene prefijo de país, el código puede recurrir al país de dirección seleccionado cuando ese país está en la UE. Los resultados se cachean en mpreuvatchecker_cache, con CACHE_HOURS predeterminado de 24, por lo que las comprobaciones repetidas no siempre consultan VIES.
Las caídas de VIES se controlan con ON_UNAVAILABLE. El valor predeterminado es accept, mientras que reject puede bloquear el guardado de dirección y skip evita aplicar el resultado de VIES. Ese ajuste importa porque la disponibilidad de VIES de la UE está fuera del control de tu tienda.
Sí, puede exigir un número VAT cuando el campo de empresa está relleno. En PrestaShop esto se controla con el ajuste REQUIRED_COMPANY, y el módulo añade un error de formulario antes de aceptar la dirección cuando el campo VAT está vacío.
El valor predeterminado de REQUIRED_COMPANY es desactivado, así que los comerciantes deben activarlo deliberadamente. Una vez activado, la regla es condicional: el módulo comprueba si el campo de empresa tiene valor, y solo entonces exige el campo VAT. Un cliente privado que deja empresa vacía no se ve obligado a introducir VAT solo porque el módulo esté instalado.
El módulo expone la misma regla al JavaScript del front mediante requiredCompany, así que los compradores pueden ver el requisito antes de enviar. La decisión final sigue ocurriendo en PHP durante la validación de dirección, donde el módulo añade el error al formulario de dirección de PrestaShop si empresa está rellena y VAT falta. Esto es más seguro que un atributo required solo del tema, que podría omitirse o no estar presente en una plantilla de checkout antigua.
Sí, puede añadir clientes con números VAT de la UE válidos a un grupo de clientes seleccionado. En PrestaShop esto requiere GROUP_ENABLED y un GROUP_ID válido; cualquier precio exento de impuestos sigue dependiendo de la configuración de grupos y reglas fiscales de PrestaShop.
La asignación ocurre después del procesamiento de añadido/actualización de dirección, no simplemente durante la vista previa AJAX en vivo. Cuando una dirección guardada tiene un número VAT de la UE parseable y VIES devuelve válido, el módulo llama a su helper de grupo y añade el cliente al grupo configurado. Si el cliente guarda después un estado VAT vacío o inválido, el módulo puede quitar de nuevo ese grupo configurado cuando el manejo de grupos está activado.
Hay dos detalles operativos importantes. Primero, el módulo usa grupos de clientes de PrestaShop; no reescribe por sí mismo todas las reglas fiscales ni garantiza precios exentos de VAT. Todavía necesitas que el grupo objetivo y las reglas fiscales estén configurados correctamente en PrestaShop. Segundo, al eliminar el grupo, el código evita dejar al cliente sin ningún grupo recurriendo al grupo de clientes predeterminado de la tienda si hace falta.
Puedes elegir si una caída de VIES acepta, rechaza u omite la validación. En PrestaShop, el ajuste ON_UNAVAILABLE controla el resultado del formulario de dirección, mientras CACHE_HOURS puede reducir llamadas en directo repetidas mediante caché.
Paid añade una condición en la que total_paid_real >= total_paid_tax_incl. Unpaid añade total_paid_real < total_paid_tax_incl. All no añade ninguna condición de pago.
No. La columna disponible products_list usa una subconsulta con GROUP_CONCAT para colocar nombres de productos y cantidades en un único campo resumen de la fila del pedido.
No. processExport() devuelve false cuando no se envían columnas seleccionadas, y el controlador muestra un error sin datos en lugar de transmitir un archivo vacío.
La instalación guarda LIMIT como 10000. El formulario también permite un valor de filas máximas, y la consulta omite el LIMIT SQL solo cuando el límite enviado es cero o menor.
El módulo debe estar activado y tener un Quora Pixel ID válido. El seguimiento aún puede quedar bloqueado por exclusión de empleados o por la barrera de consentimiento cuando está activada la carga consciente del consentimiento.
La configuración incluye interruptores para PageVisit, ViewContent, AddToCart, AddToWishlist, InitiateCheckout, Search, Purchase y SignUp, además de una configuración JSON validada de eventos personalizados.
La ruta del lado servidor requiere el interruptor CAPI, un ID numérico de cuenta publicitaria y un access token. Los eventos se ponen en cola, se limpian con el tiempo y se envían al endpoint de conversiones de Quora en lotes configurados.
Solo cuando advanced matching está activado y el visitante es un cliente conectado con una dirección de email. En ese caso el módulo hashea el email antes de pasarlo a la inicialización del pixel Quora.
Sí, si se configuran URL de vídeos manuales. El modo manual sin API extrae ID de vídeo y usa YouTube oEmbed y URL de miniaturas, pero no ofrece el mismo enriquecimiento de duración, visualizaciones y fecha que el modo API.
Se requiere una API key cuando el módulo debe obtener vídeos automáticamente desde una playlist ID o channel ID mediante YouTube Data API.
El extractor de ID de video gestiona URL watch estandar, enlaces cortos youtu.be, URL embed y URL shorts.
El modo embed abre una lightbox iframe desde el feed de la tienda. El modo new-tab envía al visitante a la página del vídeo en YouTube.
Añade el Microsoft Clarity Project ID, activa el seguimiento, guarda la configuración del módulo y luego verifica el script del escaparate. El campo Project ID acepta solo de 5 a 64 letras o números, así que pega solo el project id, no toda la etiqueta de script de Clarity. La propia ayuda del módulo dirige a los comerciantes a clarity.microsoft.com > Settings > Overview.
- En Microsoft Clarity, abre el proyecto y copia el Project ID desde los ajustes del proyecto.
- En PrestaShop, abre los ajustes del módulo Microsoft Clarity.
- Pega el Project ID en Project ID y activa Enable Microsoft Clarity.
- Guarda. El controlador de administración rechaza activar Clarity sin Project ID y rechaza IDs fuera del formato alfanumérico de 5-64 caracteres.
- Abre una página del escaparate y comprueba el código fuente o panel de red del navegador para
https://www.clarity.ms/tag/PROJECT_ID.
El hook de cabecera carga el script Clarity solo cuando el seguimiento puede ejecutarse: el módulo debe estar activo, la navegación de empleados puede excluirse y el consentimiento de marketing debe estar presente cuando el módulo está configurado para respetar un módulo de consentimiento MPR.
Por defecto, el módulo se instala con el seguimiento desactivado y un project id vacío, pero la mayoría de interruptores de eventos están activados una vez que el seguimiento está activo. El código puede enviar eventos de page view, product view, add-to-cart, wishlist, inicio de checkout, búsqueda, compra y registro, además de etiquetas de página como moneda y tipo de página. El seguimiento de compra se emite en la confirmación de pedido e incluye etiquetas derivadas del pedido; el registro se guarda como una bandera de cookie de corta duración durante la creación de cuenta y se envía en el siguiente render de cabecera coincidente.
El manejo de consentimiento está ligado a los módulos de cookies MPR cuando están instalados. Con RESPECT_CONSENT activado, Cookies Revolution se comprueba mediante la categoría marketing de mprcr_consent, y Lightweight Cookie Banner se comprueba mediante mprcookie_consent. Si ninguno está activo, el módulo trata el consentimiento como disponible. Los eventos personalizados también están soportados, pero sus reglas JSON se validan: nombres de evento, selectores, disparadores de URL/controlador y payloads de etiquetas deben ajustarse a los límites del módulo antes de que el controlador de administración los acepte.
Sí, puede enviar a Clarity eventos y etiquetas ecommerce de PrestaShop. El módulo incluye page view, vista de producto, añadir al carrito, inicio checkout, compra, búsqueda, wishlist y registro; las etiquetas de compra pueden incluir valor, moneda, artículos y referencia.
Sí, el módulo puede respetar el consentimiento antes del seguimiento. Comprueba el consentimiento de mprcookiesrevolution o mprcookiebanner cuando existe, puede enviar una señal de consentimiento a Clarity y bloquear el tracking cliente hasta aceptar marketing en PrestaShop.
Sí, los eventos personalizados de Clarity pueden configurarse con reglas JSON. El módulo admite selectores de clic, reglas URL contains, coincidencia de controlador o módulo y eventos DOM, y sanea nombres y etiquetas antes de enviarlos desde PrestaShop.
Sí, el controlador de overrides puede asignar un mismo H1 a varias categorías. En el admin de PrestaShop, Entity Selector guarda los ID seleccionados, mientras una edición directa en una categoría la separa del override compartido si cambia su valor H1.
Puedes usar los placeholders admitidos por el módulo en valores H1 personalizados. El resolver sustituye nombre de categoría, recuento de productos, número de página, etiqueta de página, nombre de tienda e idioma, y después normaliza el H1 final de PrestaShop según los ajustes de seguridad.
Sí, los valores H1 se guardan por idioma y pueden usar fallback si está configurado. Si el idioma actual de PrestaShop no tiene valor H1, el resolver puede probar el idioma predeterminado y después cualquier idioma disponible antes de devolver sin override.
No, no es una herramienta de renombrado global de categorías. El módulo cambia el contenido de la página de categoría y, si está activado, la etiqueta del listado product-search, pero no renombra el objeto Category de PrestaShop en navegación, URLs u otros contextos de catálogo.
Sí, la configuración de métodos incluye Apple Pay, Google Pay, Link, tarjetas, PayPal y otros métodos de Stripe. En PrestaShop se comprueba y guarda la disponibilidad de wallets para ocultar las opciones no compatibles con el navegador o dispositivo del cliente.
Comprueba que las claves activas de Stripe coincidan con el modo test o live seleccionado. En PrestaShop, el modo test espera prefijos pk_test y sk_test, mientras el modo live espera pk_live y sk_live antes de considerar el checkout configurado.
Sí, devuelve opciones de transportista con nombres, plazos, precios, estado seleccionado y métodos de pago compatibles. En PrestaShop el checkout AJAX guarda el transportista elegido en el carrito y la cookie, y filtra pagos según compatibilidad configurada.
Stripe Express Checkout puede mostrar botones en producto, carrito, listados y hooks express personalizados. En PrestaShop el módulo registra hooks de acciones de producto, información adicional, botones de producto, carrito y hooks propios, con ajustes que controlan dónde aparecen.
En actionOrderStatusPostUpdate, el módulo busca el equipo asignado al nuevo estado de pedido nativo. Si existe un equipo y las notificaciones de cambio de estado están activadas, notifica a ese equipo sobre el movimiento del pedido.
El helper de adjuntos permite formatos de imagen comunes, PDF, archivos Office y OpenDocument, CSV, texto, RTF, archivos PowerPoint y EML. También comprueba el tipo MIME y rechaza archivos que no coinciden con las reglas de tipos permitidos.
Sí. MprWfEmployeePreference almacena notification_muted, y el controlador AJAX tiene una acción setNotificationMute para el empleado actual.
Sí. El panel asigna a Smarty la última versión del historial de workflow y un flag ENABLE_CONCURRENCY_CHECK, y el endpoint AJAX del panel también devuelve la versión actual.
Requiere la Zendesk Chat account key. La plantilla frontal añade esa clave a la URL del https://v2.zopim.com/ widget script.
Sí. Cuando la transferencia de datos de cliente está activada y hay datos disponibles, la plantilla llama al setter Zendesk live chat con el nombre y e-mail del cliente.
Sí. El trait compartido de chat comprueba el alcance de página configurado antes de renderizar y admite todas las páginas, páginas de producto, páginas de categoría y controllers relacionados con checkout.
Si el retraso configurado es mayor que cero, la plantilla envuelve el código de inyección del script Zendesk en un timeout JavaScript durante ese número de milisegundos.
La Auditoría SEO para PrestaShop examina su tienda real y sus datos efectivos de Search Console, en lugar de aplicar una lista genérica de verificación con un rastreador que ignora cómo está construido PrestaShop. El objetivo es detectar los problemas que realmente impulsan el tráfico orgánico en un catálogo de PrestaShop y comprender por qué se producen en su tienda, tema y conjunto de módulos en concreto. Esto es lo que revisa un especialista:
Indexabilidad
Confirmamos que las páginas que deberían posicionar son realmente aptas para hacerlo. Eso implica revisar sus reglas de robots.txt, las directivas noindex y la corrección de los canonical en productos, categorías, páginas CMS y listados paginados. PrestaShop es conocido por generar variaciones de URL rastreables — filtros de navegación por capas, parámetros de orden, ?search_query= y combinaciones de atributos — que pueden inflar el presupuesto de rastreo o dividir las señales. Comparamos lo que envía con lo que Google ha indexado realmente, de modo que las diferencias entre lo enviado y lo indexado quedan claramente a la vista.
Datos estructurados
Validamos su JSON-LD de Product, Offer, BreadcrumbList y Organization frente a los requisitos reales de los resultados enriquecidos, no solo con un verificador de sintaxis. La ausencia de precio, disponibilidad o campos de valoraciones suele impedir que los resultados de producto muestren fichas enriquecidas, y los temas de PrestaShop varían mucho en lo completo que emiten este marcado.
Enlazado interno
Cartografiamos las páginas huérfanas, el enlazado cruzado débil entre categorías y cómo fluye la autoridad de enlace por el catálogo. Un enlazado interno sólido es una de las palancas de posicionamiento más controlables en una tienda grande, y con frecuencia se descuida cuando las categorías crecen de forma orgánica.
Sitemaps XML y hreflang
Revisamos sus sitemaps XML en busca de diferencias entre lo enviado y lo indexado y, en tiendas multilingües, verificamos que las señales hreflang sean recíprocas y correctas para que se sirva la versión de idioma y país adecuada.
Carencias de contenido
Por último, identificamos las páginas pobres, la duplicación y la intención de búsqueda no cubierta — lugares donde la página existe pero no satisface lo que realmente buscan los usuarios.
Como un especialista revisa directamente su tienda y su propiedad de Search Console, cada hallazgo refleja su situación real en lugar de una lista teórica de buenas prácticas.
Al finalizar la Auditoría SEO recibe un plan de acción claro y priorizado, redactado en lenguaje sencillo — no un volcado de hoja de cálculo de 200 filas que le deja adivinando por dónde empezar. El entregable está pensado para actuar sobre él, tanto si realiza el trabajo usted mismo como si lo encarga a un desarrollador.
Para cada problema exponemos explícitamente tres cosas:
- Qué falla — el problema concreto, descrito en términos que pueda reconocer en su propia tienda.
- Por qué importa para el tráfico — la razón práctica por la que afecta a la indexación, el rastreo o el posicionamiento, de modo que entienda lo que está en juego y no solo una etiqueta.
- Exactamente qué corregir primero — el siguiente paso concreto, no una recomendación vaga.
Los hallazgos se ordenan por impacto frente a esfuerzo. Esto significa que los elementos de gran efecto y poco esfuerzo quedan claramente separados del trabajo estructural más extenso, de modo que pueda abordar de inmediato las mejoras rápidas y planificar el resto con confianza. Este orden es deliberado: en una tienda con mucha actividad, conocer la secuencia suele ser más valioso que la lista bruta de problemas.
Cuando realmente resulta útil, nombramos el elemento concreto de PrestaShop implicado — el ajuste de configuración, el controlador o la plantilla exactos que requieren atención. Por ejemplo, si un problema de canonical se origina en cómo un controlador de categoría construye sus URL, o una carencia de datos estructurados reside en un .tpl concreto, lo señalamos directamente. Esa precisión permite que su desarrollador vaya directo a la corrección en lugar de redescubrir el diagnóstico.
El plan está redactado para sostenerse por sí solo. Nunca se queda con hallazgos que no pueda interpretar, y no existe obligación alguna de contratar a nadie más para darles sentido — es un documento sobre el que puede actuar directamente.
Empezar requiere muy poco de su parte. Comenzamos con un breve paso de definición de alcance para confirmar los aspectos que dan forma a toda la revisión: sus objetivos, sus mercados objetivo y los idiomas que atiende su tienda. Esto importa porque las prioridades de SEO difieren mucho entre, por ejemplo, una tienda nacional monolingüe y un catálogo multilingüe donde el hreflang y la segmentación por país son preocupaciones centrales.
Una vez acordado eso, ejecutamos la revisión sobre su tienda en producción y sus datos de Search Console. Trabajar sobre la tienda real — en lugar de una copia de pruebas o un rastreo sintético — es lo que permite que los hallazgos reflejen su indexación real, sus URL reales y sus datos de consultas reales.
Cuánto tarda
La mayoría de las auditorías se completan con rapidez una vez disponible el acceso. Confirmamos con usted el plazo previsto tras el breve paso de definición de alcance, porque el tiempo de entrega realista depende del tamaño de su catálogo y del alcance que elija — una tienda monolingüe acotada se revisa más rápido que una multilingüe extensa.
Qué necesita preparar
Nada técnico. No necesita reunir informes, exportar datos ni cambiar ajustes por adelantado. Para empezar, las dos cosas que ayudan son:
- Acceso de solo lectura a su back office — suficiente para inspeccionar la configuración, los módulos y la estructura de URL sin alterar nada.
- Acceso a su propiedad de Search Console — para que podamos ver cómo rastrea e indexa Google el sitio actualmente.
El acceso de solo lectura es deliberado: permite que un especialista vea exactamente cómo está configurada su tienda manteniéndole a usted con pleno control, sin riesgo de que se realicen cambios durante la revisión. Si prefiere acotar el acceso de forma más estricta, podemos trabajar dentro de ese marco.
La Auditoría SEO en sí es un diagnóstico. El entregable es un plan priorizado sobre el que usted — o cualquier desarrollador competente — puede actuar de forma autónoma. Lo redactamos deliberadamente para que se sostenga por sí solo: cada problema explica qué falla, por qué importa y qué hacer, con el ajuste, el controlador o la plantilla de PrestaShop concretos nombrados donde resulta útil. No queda dependiente de nosotros para interpretar los resultados.
Dicho esto, muchos propietarios de tiendas prefieren no implementar las correcciones ellos mismos y, si desea que hagamos el trabajo, podemos hacerlo. Existen dos vías generales, y elegimos la que realmente encaja con el problema:
- Nuestros propios módulos de PrestaShop — cuando un problema recurrente o estructural se resuelve mejor con una herramienta adecuada (por ejemplo, gestionar canonicals, sitemaps, datos estructurados o redirecciones a escala), y un módulo es la respuesta correcta a largo plazo en lugar de un ajuste puntual.
- Trabajo de corrección práctico — cambios directos en plantillas, configuración o código cuando lo que hace falta es una corrección puntual.
Cualquier trabajo de implementación se presupuesta por separado, una vez que la auditoría ha dejado claras las prioridades. Creemos que ese es el orden honesto de hacerlo: usted ve primero el diagnóstico, entiende lo que realmente hay que hacer y solo entonces decide si nos devuelve el trabajo o lo lleva a otra parte.
No existe obligación alguna de comprar nada más. La auditoría es completa y útil por sí misma — el plan es suyo para ejecutarlo como prefiera. Ofrecer la implementación es una comodidad para quienes desean que un solo equipo lleve el trabajo hasta el final, no una condición para que la auditoría merezca la pena.
La Auditoría de Seguridad para PrestaShop es una revisión práctica de su tienda real, centrada en las amenazas que afectan de verdad a las tiendas PrestaShop en la práctica, no en una lista genérica de cumplimiento. La popularidad de PrestaShop lo convierte en un objetivo frecuente, y los patrones de ataque son bastante específicos — por eso la auditoría se concentra donde reside el riesgo real. Un especialista revisa las siguientes áreas:
Análisis de vulnerabilidades
Comprobamos si hay un núcleo, módulos y versión de PHP desactualizados que arrastren CVE conocidos. Los módulos de terceros sin actualizar son uno de los puntos de entrada más comunes en PrestaShop, porque un único módulo descuidado puede exponer toda la tienda incluso cuando el núcleo está al día.
Detección de malware y Magecart
Buscamos skimmers inyectados, web-shells y archivos manipulados — las inyecciones de robo de tarjetas de estilo Magecart y las puertas traseras que apuntan a los flujos de pago y compra. Es un patrón con el que tratamos habitualmente, así que la revisión se basa en cómo son realmente estos compromisos en el sistema de archivos y la base de datos, no en una simple comparación de firmas.
Exposición a inyecciones
Evaluamos las superficies de inyección SQL y de plantillas Smarty (RCE) en módulos y overrides — los puntos donde una entrada no confiable llega a una consulta o a una plantilla y puede convertirse en ejecución remota de código.
Fortalecimiento del administrador y 2FA
Revisamos el acceso al back office: cuentas de empleado, protección de inicio de sesión y autenticación de doble factor. Unas credenciales de administrador débiles o compartidas y un back office sin proteger son una causa recurrente de brechas que nada tienen que ver con fallos de código.
Copias de seguridad y recuperación
Por último, comprobamos si realmente podría restaurar de forma limpia tras un incidente — que existan copias de seguridad, que sean recientes y que sean genuinamente utilizables. Una copia que nunca ha probado es un riesgo, no una red de seguridad.
Como un especialista inspecciona su tienda real, los hallazgos reflejan su exposición y configuración reales en lugar de una lista teórica de cosas que podrían salir mal.
Para obtener una imagen completa solicitamos acceso de solo lectura al back office y, cuando sea posible, acceso de lectura a archivos y registros. Esa combinación basta para inspeccionar la tienda a fondo — versiones de módulos, configuración, el sistema de archivos y los patrones de acceso en sus registros — sin cambiar nada. Los registros en particular son donde suelen aparecer indicios de un compromiso activo o de ataques de sondeo, así que el acceso de lectura a ellos mejora de forma sustancial lo que la auditoría puede ver.
En cuanto a la seguridad, el punto clave es sencillo: nunca modificamos su tienda durante una auditoría. Toda la revisión es observacional. No se parchea, elimina ni reconfigura nada mientras observamos, lo que significa que no existe riesgo de que la propia auditoría rompa su tienda o interfiera con los compradores.
Trabajar con el alcance con el que se sienta cómodo
El acceso puede ajustarse a su nivel de comodidad. Si prefiere no conceder acceso a archivos o registros, podemos trabajar con un alcance más limitado — por ejemplo, un análisis externo combinado con una revisión guiada del back office, donde usted permanece a los mandos y nosotros dirigimos qué comprobar. La auditoría sigue siendo valiosa así; un acceso más profundo simplemente le permite ver más.
Si encontramos un compromiso activo
Si la revisión descubre un compromiso activo, se lo comunicamos de inmediato — no esperamos al final para entregar un informe. A continuación describimos pasos de contención seguros antes que nada, de modo que la prioridad pase a ser limitar el daño y proteger los datos de clientes y pagos en lugar de continuar una revisión pausada de una tienda que está siendo explotada activamente. Gestionar un incidente con calma y en el orden correcto es parte de por qué la auditoría es de solo lectura por defecto: queremos entender la situación por completo antes de realizar cualquier cambio.
De la Auditoría de Seguridad recibe un plan de remediación priorizado y en lenguaje sencillo. Para cada problema exponemos claramente tres cosas:
- Qué está expuesto — la debilidad concreta, descrita para que pueda reconocerla en su propia tienda.
- Qué gravedad tiene — una clasificación de gravedad clara, de modo que una sugerencia menor de fortalecimiento nunca se confunda con una verdadera emergencia.
- Exactamente qué corregir primero — el siguiente paso concreto, con detalle práctico en lugar de una advertencia vaga.
Los problemas críticos — cualquier cosa explotable de forma activa — se marcan en lo más alto con pasos concretos, de modo que los problemas más peligrosos sean imposibles de pasar por alto y no haya ambigüedad sobre por dónde empezar. Este orden importa: en seguridad, la secuencia en que actúa suele marcar la diferencia entre un problema contenido y un incidente grave.
Fortalecimiento para el futuro, no solo un parche puntual
Más allá de corregir lo que falla hoy, también recibe recomendaciones prácticas de fortalecimiento orientadas a hacer la tienda más resistente en el futuro. Suelen abarcar:
- Autenticación de doble factor en las cuentas del back office.
- Blindaje del administrador — restringir quién puede acceder al back office y cómo.
- Política de copias de seguridad — garantizar que dispone de copias recientes, probadas y genuinamente restaurables.
La intención es que la tienda acabe más segura como postura permanente, no simplemente parcheada una vez y dejada a la deriva hacia la misma exposición. El plan está redactado para que usted o su desarrollador puedan actuar sobre él directamente, con los elementos urgentes inequívocamente separados de las mejoras a más largo plazo.
La Auditoría de Seguridad entrega el diagnóstico y el plan — una exposición clara y ordenada por gravedad de qué está expuesto y qué hacer al respecto. Ese entregable se sostiene por sí solo: usted, o cualquier desarrollador de su confianza, puede actuar sobre él directamente.
Si desea que el trabajo se realice en lugar de solo documentarse, podemos llevar a cabo la remediación práctica como una pieza de trabajo aparte y acotada. Según lo que encuentre la auditoría, suele incluir:
- Limpiar una infección — eliminar skimmers inyectados, web-shells y archivos manipulados, y rastrear cómo entró el atacante para que la puerta quede realmente cerrada.
- Parchear módulos — actualizar o corregir módulos, núcleo u overrides vulnerables que arrastren problemas conocidos.
- Fortalecer el administrador — blindar el acceso al back office, las cuentas de empleado y la protección de inicio de sesión.
Mantener la remediación separada de la auditoría es deliberado. La auditoría es observacional y de solo lectura, de modo que el diagnóstico nunca queda condicionado por la tentación de empezar a cambiar cosas a mitad de la revisión; la remediación se acota después frente a prioridades claras y acordadas.
Cuando hay un compromiso activo
Ante un compromiso activo priorizamos primero la contención. Antes de cualquier limpieza o parcheo más amplios, la preocupación inmediata es limitar el daño y proteger los datos de clientes y pagos. Solo una vez contenida la situación procede el resto de la remediación en un orden meditado. No existe obligación de tomar la vía de la remediación — pero si desea que un solo equipo lleve el problema desde el diagnóstico hasta la corrección, esa opción está ahí.
La Auditoría de Rendimiento para PrestaShop mide su tienda real en condiciones realistas, no una única puntuación sintética tomada de forma aislada. Una cifra de laboratorio puntual dice muy poco sobre cómo se comporta la tienda para los compradores reales y para Googlebot; la auditoría está concebida para encontrar los cuellos de botella genuinos. Un especialista revisa las siguientes capas:
Perfilado de PHP
Perfilamos el backend para encontrar hooks, módulos y rutas de código lentas que inflan el tiempo de respuesta del servidor. En PrestaShop, un único módulo pesado enganchado en todas las páginas — o una operación costosa que se ejecuta en la visualización de categorías y productos — es una causa muy común de un Time To First Byte lento, y el perfilado es lo que lo localiza con precisión en lugar de adivinar.
Base de datos
Buscamos consultas lentas y N+1, índices ausentes y joins pesados. A medida que crecen los catálogos y el historial de pedidos, consultas que estaban bien al lanzar pueden convertirse silenciosamente en el coste dominante de una página, y la solución suele ser un índice preciso en lugar de un cambio amplio.
Caché y CCC
Revisamos su pila de caché de principio a fin: compilación de Smarty, Redis, caché de página completa y los ajustes de Combine-Compress-Cache (CCC). Una caché mal configurada es una de las áreas de rendimiento de mayor palanca en PrestaShop, y con frecuencia se deja en un estado subóptimo.
Core Web Vitals
Evaluamos LCP, CLS e INP tal como los mide realmente Google — las métricas de campo que alimentan la experiencia de página — y no solo una instantánea de laboratorio. Largest Contentful Paint, Cumulative Layout Shift e Interaction to Next Paint apuntan cada uno a problemas subyacentes distintos, desde recursos que bloquean el renderizado hasta diseños inestables.
Canal de imágenes y CDN
Por último, revisamos el canal de imágenes y la entrega en el borde: formatos modernos (WebP/AVIF), carga diferida y si una CDN sirve los recursos de forma eficiente desde el borde. Las imágenes suelen ser la parte más pesada de la página de una tienda, así que aquí es donde a menudo están las mayores ganancias del mundo real.
Como medimos su tienda real a lo largo de estas capas, los hallazgos reflejan cómo rinde su tienda de verdad y no un punto de referencia teórico.
De la Auditoría de Rendimiento recibe un plan priorizado y en lenguaje sencillo. Para cada hallazgo exponemos claramente tres cosas:
- Qué hace que la tienda sea lenta — el cuello de botella concreto, en términos concretos.
- Por qué importa — el efecto práctico en el tiempo de carga del mundo real, la respuesta del servidor y la experiencia para compradores y rastreadores.
- Exactamente qué corregir primero — el siguiente paso, no una recomendación vaga.
Los hallazgos se ordenan por impacto frente a esfuerzo, de modo que los cambios que aportan más velocidad con menos trabajo quedan claramente separados de las piezas mayores de optimización. En una tienda en producción ese orden suele ser la parte más valiosa del informe: le dice no solo qué falla, sino la secuencia en que abordarlo.
Señalamos al culpable
Cuando un módulo, consulta o ajuste concreto es el responsable, lo nombramos. Si el hook de un módulo concreto infla el tiempo de respuesta, a una consulta concreta le falta un índice, o un ajuste de CCC o de caché está mal configurado, lo señalamos directamente. Esa precisión significa que usted — o su desarrollador — puede actuar sobre la causa exacta en lugar de adivinar y cambiar cosas al azar, lo que en una instalación de PrestaShop compleja puede empeorar fácilmente las cosas.
Velocidad real, no una puntuación de vanidad
El objetivo en todo momento es la velocidad real para compradores y para Googlebot — páginas más rápidas que carguen genuinamente antes para los visitantes y se rastreen de forma más eficiente — en lugar de simplemente poner en verde una insignia de Lighthouse. Una tienda puede puntuar bien en una prueba de laboratorio y aun así sentirse lenta en el campo; la auditoría está redactada para mejorar la experiencia que de verdad cuenta, con el informe estructurado para que el plan pueda ejecutarse directamente.
No. La auditoría está diseñada para no perturbar a sus compradores. El perfilado y la medición se realizan de un modo que mantiene estable la tienda en producción — normalmente inspección de solo lectura combinada con medición controlada en lugar de algo que cargue o estrese el sitio a costa de los visitantes reales.
Los dos principios que la mantienen segura son sencillos:
- La inspección es observacional. Revisar la configuración, perfilar rutas de código y examinar consultas son actividades de solo lectura — observamos cómo se comporta la tienda, no cambiamos cómo funciona.
- La medición es controlada. Cualquier medición activa se hace de forma deliberada y mesurada, no como una prueba de carga incontrolada apuntando a su proceso de pago en producción durante el horario comercial.
Usted mantiene el control de los cambios
Fundamentalmente, no desplegamos cambios durante la auditoría. La auditoría produce un plan; no toca su configuración, plantillas o código en producción. Eso significa que usted mantiene el control total sobre qué se implementa y cuándo — no se altera nada en su tienda sin su decisión. Puede revisar las recomendaciones, elegir cuáles aplicar y planificarlas para una ventana tranquila si lo prefiere. Separar así la medición de la implementación es exactamente lo que permite ejecutar la auditoría de forma segura sobre una tienda en producción y operativa.
Empezar requiere poco de su parte. Comenzamos con un breve alcance para confirmar sus mayores puntos de dolor, porque el trabajo de rendimiento es mucho más eficaz cuando se dirige a las páginas y momentos que realmente duelen. Las áreas típicas que concretamos son:
- Páginas de categoría lentas — a menudo donde la navegación por capas, los filtros y las grandes rejillas de productos se combinan para lastrar el tiempo de respuesta.
- Proceso de pago — donde la lentitud cuesta ventas directamente y frustra a los clientes listos para comprar.
- Administración / back office — el procesamiento lento de pedidos y la gestión del catálogo que consumen el tiempo de su equipo.
- Comportamiento en carga máxima — cómo aguanta la tienda ante picos de tráfico, eventos de ventas o campañas.
Saber cuál de estos le importa más da forma a dónde va el esfuerzo de medición, de modo que los hallazgos aborden sus problemas reales y no un perfil genérico.
Una vez acordado el alcance, medimos sobre su tienda en producción — la tienda real en condiciones reales, que es la única manera de que las cifras reflejen lo que sus compradores y Googlebot experimentan de verdad.
Cuánto tarda
La mayoría de las auditorías se completan con rapidez una vez disponible el acceso. Confirmamos con usted el plazo previsto tras el breve paso de definición de alcance, ya que el tiempo de entrega realista depende del tamaño de su tienda y de la amplitud de lo que medimos. La conversación de alcance es breve y es el punto natural en el que acordamos tanto el foco como el calendario.
La Auditoría UI/UX para PrestaShop revisa su tienda real, en producción tal como la experimenta un comprador de verdad — no una lista genérica aplicada a una captura de pantalla. Recorremos el recorrido completo, desde aterrizar en una página de categoría hasta completar un pedido, y señalamos cada punto donde la interfaz añade fricción, confusión o titubeo. La revisión se estructura en torno a las áreas que más importan en un catálogo de PrestaShop:
- Usabilidad — navegación, búsqueda en el sitio y la claridad de sus páginas de categoría y producto. Comprobamos si los menús reflejan cómo compran realmente los clientes, si la búsqueda devuelve resultados útiles y si las páginas de producto responden a las preguntas que tiene un comprador antes de decidirse.
- Móvil — la experiencia en los dispositivos que de verdad usa la mayor parte de su tráfico. Probamos los objetivos táctiles, el comportamiento del botón fijo de añadir al carrito, la carga de imágenes y la usabilidad de los formularios en pantallas más pequeñas, donde la mayoría de los temas de PrestaShop fallan en silencio.
- Flujo de producto y pago — los momentos exactos en que los compradores titubean, se confunden o abandonan. Los procesos de pago de una página y de varios pasos de PrestaShop tienen cada uno trampas de abandono conocidas: creación de cuenta forzada, costes de envío poco claros, cargos sorpresa y selectores de combinaciones/atributos confusos.
- Accesibilidad — conformidad con la EAA / WCAG, cada vez más esperada en las tiendas de la UE. Los problemas de accesibilidad son también problemas de usabilidad, así que esto se solapa en gran medida con la conversión.
- Señales de confianza — valoraciones, garantías y la claridad de su información de entrega y devoluciones. Un contenido de confianza ausente o enterrado es una causa común y de bajo esfuerzo de ventas perdidas.
Por qué importa
La mayoría de los problemas de conversión de PrestaShop no son defectos de diseño en la profundidad del tema — son puntos de fricción pequeños y corregibles que se acumulan a lo largo de miles de sesiones. Un ajuste en un tema hijo, un paso de pago reordenado o un mensaje de entrega más claro pueden eliminar una barrera que costaba pedidos en silencio.
Esta auditoría es para propietarios de tiendas que sospechan que su tráfico es decente pero su conversión no, y que quieren una evaluación honesta, con ojos de comprador, en lugar de una propuesta de rediseño. Usamos su catálogo real, su tema real y los recorridos reales de sus clientes, de modo que los hallazgos se aplican directamente a su tienda.
Recibe un plan priorizado y en lenguaje sencillo que señala exactamente dónde titubean o abandonan los compradores, por qué ocurre y qué cambiar primero con precisión. Está redactado para actuar sobre él — no es un ensayo de diseño ni una lista de opiniones subjetivas sobre colores y tipografías.
Qué incluye el entregable
- Recomendaciones concretas y específicas de PrestaShop — ajustes del tema, estructura de página, pasos del proceso de pago, configuración de módulos y ubicación del contenido. Cuando la corrección reside en una plantilla concreta del tema, una pantalla de configuración o un ajuste de categoría, lo decimos, para que su desarrollador (o el nuestro) pueda actuar sin conjeturas.
- El razonamiento detrás de cada problema — qué experimenta el comprador, por qué provoca titubeo o abandono y cómo es algo mejor. Entender el “porqué” significa que su equipo puede aplicar el mismo razonamiento a cambios futuros.
- Una clasificación clara — las recomendaciones se ordenan para que pueda empezar por las correcciones de mayor impacto y avanzar hacia abajo, en lugar de gastar esfuerzo en cambios cosméticos que no mueven nada.
Por qué importa
Una lista larga y sin clasificar de “cosas que podría mejorar” tiende a quedar sin usar. Al centrarse en los cambios que elevan la conversión y cumplen las obligaciones de accesibilidad — y ordenarlos para que las mayores ganancias vayan primero — el plan es algo que puede ejecutar genuinamente, en secuencia, con tiempo y presupuesto limitados. Las recomendaciones se acotan a la forma de hacer las cosas en PrestaShop: overrides en el tema hijo, configuración nativa y módulos bien elegidos en lugar de parches frágiles.
Encaja con propietarios que quieren un siguiente paso claro en lugar de una vaga sensación de que “el sitio podría estar mejor”. Termina con una hoja de ruta de cambios concretos y defendibles y una idea de cuáles abordar esta semana frente a este trimestre.
Sí — la accesibilidad es una parte integrada de la Auditoría UI/UX, no un complemento opcional. La Ley Europea de Accesibilidad (EAA) se aplica a muchas tiendas en línea que venden a consumidores de la UE, y cumplirla es cada vez más una expectativa en lugar de algo opcional. Comprobamos su tienda frente a los criterios WCAG pertinentes y le ofrecemos una imagen clara y honesta de su situación actual.
Qué comprobamos
- Navegación por teclado — si un comprador puede desplazarse por menús, filtros, opciones de producto y el proceso de pago usando solo el teclado, sin quedar atrapado ni perder su posición.
- Contraste — texto y elementos interactivos frente a sus fondos, para que el contenido sea legible para usuarios con baja visión y con mala iluminación.
- Etiquetas — campos de formulario, botones y controles correctamente nombrados para que la tecnología de asistencia pueda anunciarlos. Los formularios de pago y de contacto de PrestaShop son un punto débil común aquí.
- Orden de foco — una ruta de foco lógica y visible para que los usuarios de teclado y de lector de pantalla sigan la página en una secuencia sensata.
- Formularios — mensajes de error, indicación de campos obligatorios y claridad de entrada, especialmente en el registro y el proceso de pago.
Por qué importa
Obtiene una visión clara de su situación y las correcciones prácticas que respaldan el cumplimiento. Y lo fundamental: la mayoría de estas correcciones también mejoran la usabilidad para todos: etiquetas más claras, mejor contraste y un orden de foco sensato reducen la fricción para todos los compradores, no solo para quienes usan tecnología de asistencia. En PrestaShop, muchas de estas se abordan mediante cambios en plantillas del tema hijo y CSS en lugar de ediciones del núcleo, lo que las mantiene seguras de mantener entre actualizaciones.
Resulta muy adecuada para tiendas orientadas a la UE que quieren entender su exposición y actuar sobre ella de forma metódica. Le ofrecemos una evaluación honesta de las carencias y los pasos prácticos que respaldan el cumplimiento — sin exagerar lo que cualquier auditoría individual puede certificar.
La Auditoría de Hosting e Infraestructura para PrestaShop evalúa su hosting frente a la carga real de una tienda — cómo se comporta su tienda bajo tráfico y actividad administrativa reales — en lugar de las promesas de la ficha técnica de un plan de hosting. Un servidor “rápido” sobre el papel puede seguir entregando páginas lentas una vez que tiene en marcha un catálogo completo de PrestaShop, módulos y tareas de back office. Examinamos las capas que de verdad determinan la velocidad, la estabilidad y la resiliencia:
- Versión de PHP y recursos del servidor — CPU, memoria y límites frente a su tráfico. Comprobamos si su versión de PHP es actual y compatible, y si los límites de memoria, el tiempo de ejecución y la capacidad de trabajadores coinciden con la carga que ve realmente su tienda.
- Capas de caché — OPcache, Redis, caché de página completa y cómo están configuradas. Una caché mal configurada o ausente es una de las causas más comunes de páginas lentas en PrestaShop, y verificamos que cada capa esté presente y haga su trabajo.
- CDN y borde — entrega, tasas de acierto de caché y protección del origen. Observamos si los recursos estáticos y las páginas se sirven desde el borde, con qué frecuencia se acierta realmente la caché y si su origen está protegido.
- TLS / HTTP — certificado, HTTP/2-3 y cabeceras de seguridad. Los protocolos desactualizados y las cabeceras ausentes cuestan tanto rendimiento como seguridad.
- Copias de seguridad, conmutación por error y uptime — si podría sobrevivir a una caída o a un despliegue erróneo. Evaluamos si existen copias de seguridad, si son recientes y si son realmente restaurables, y qué ocurre cuando algo falla.
Por qué importa
El hosting está debajo de todo lo demás: ninguna cantidad de optimización del frontend rescata una tienda sobre un servidor infradimensionado o mal configurado. PrestaShop en particular es sensible a la configuración de PHP, la caché y el rendimiento de la base de datos, de modo que pequeñas carencias de infraestructura afloran como páginas de categoría lentas, administración pesada y ventas perdidas durante los picos de tráfico. Esta auditoría es para propietarios que sospechan que su hosting es parte del problema — o que simplemente quieren saber, con honestidad, si su configuración actual puede soportar hacia dónde se dirige la tienda.
Recibe un plan priorizado y en lenguaje sencillo para hacer su tienda más rápida, segura y resiliente — con orientación clara sobre qué cambiar a nivel de hosting y, igual de importante, qué merece realmente el coste. Está redactado para que un propietario no técnico pueda entender las contrapartidas y un equipo técnico pueda actuar sobre ellas.
Qué incluye el entregable
- Acciones concretas y clasificadas — desde correcciones de configuración (ajustes de PHP, capas de caché, cabeceras) hasta cambios estructurales mayores, ordenadas para que los elementos de mayor impacto y mejor relación calidad-precio vayan primero.
- Encuadre honesto del coste — separamos los cambios que se amortizan solos de los que son un “estaría bien tenerlo”, para que no invierta de más en infraestructura que su tienda aún no necesita.
- Un veredicto claro sobre su hosting actual — si su hosting le está frenando de verdad, lo decimos sin rodeos y explicamos cómo sería una configuración mejor para el tamaño de su tienda, en lugar de dejarle adivinando.
Por qué importa
Las decisiones de infraestructura son fáciles de errar en ambas direcciones: pagar por capacidad que nunca usará, o arrastrarse en un hosting que ahoga cada día de mucha actividad. El plan está diseñado para cortar con eso — concreto, clasificado y ajustado a su tráfico y tamaño de catálogo reales. Como está expresado en lenguaje sencillo con el razonamiento adjunto, puede tomar decisiones con confianza sobre dónde gastar y dónde dejar las cosas como están.
Encaja con propietarios de tiendas que quieren claridad antes de comprometer presupuesto — ya sea afinar el hosting que tienen o entender qué buscar en uno mejor. Termina con una hoja de ruta defendible en lugar de un argumento de venta.
La auditoría es deliberadamente neutral respecto al proveedor. Nuestro trabajo es decirle, con honestidad, si su hosting actual se ajusta a su tráfico y dónde se queda corto — no dirigirle hacia ningún proveedor en concreto. Nunca se le presiona a cambiar de hosting para “aprobar” la auditoría, y no hay una agenda oculta de comisiones por recomendación detrás de los consejos.
Cómo funciona
- Primero evaluamos lo que tiene — la auditoría mide su configuración existente frente a su tráfico y tamaño de tienda reales, de modo que el punto de partida es siempre “¿le encaja este hosting?” y no “¿qué hosting le vendemos?”.
- Si una migración está realmente justificada, explicamos por qué — exponemos las razones concretas por las que su hosting actual se queda corto y qué buscar en una opción mejor, para que pueda evaluar las opciones por sus méritos.
- El traslado es un trabajo aparte y acotado — si decide migrar, podemos llevarlo a cabo como su propio encargo claramente definido. Nunca se incluye en la auditoría ni se usa como condición de ella.
Por qué importa
Las migraciones de PrestaShop conllevan un riesgo real — desajustes de versión de PHP y de base de datos, dependencias de módulos rotas, configuración de caché y URL, y caídas si el cambio no se planifica con cuidado. Por eso precisamente la recomendación de mover (o no mover) tiene que ser honesta e independiente de cualquier motivo de venta. Una auditoría neutral respecto al proveedor significa que puede confiar en el veredicto: si quedarse es lo correcto, lo diremos; si moverse está justificado, entenderá con precisión por qué y qué implica una migración segura.
Encaja con propietarios que quieren una respuesta directa sobre su hosting sin la presión habitual de cambiar. Obtiene claridad sobre si su hosting es adecuado para su propósito, y control total sobre qué hace después, si es que hace algo.
Este es el lado técnico de los feeds y el seguimiento — acotado deliberadamente aparte de la gestión de campañas. La auditoría comprueba si los datos que fluyen hacia Google Merchant Center, GA4 y Google Ads son completos, exactos y fiables, porque todo lo que va después (fichas gratuitas, anuncios de Shopping, informes de rendimiento) depende de que esa base sea sólida. Examinamos:
- Calidad del feed de Merchant — atributos obligatorios, títulos, GTIN, desaprobaciones y problemas de política. Comprobamos que los productos lleven los atributos que Google espera, que los títulos estén estructurados para coincidir con cómo busca la gente y que las desaprobaciones o marcas de política no estén suprimiendo en silencio parte de su catálogo.
- Seguimiento de GA4 / Ads — activación de conversiones, deduplicación y si puede confiar en sus cifras. Verificamos que las conversiones se disparen de verdad, que no se cuenten dos veces y que las cifras sobre las que basa sus decisiones reflejen la realidad.
- Schema de Product / Offer — los datos estructurados que respaldan las fichas gratuitas y los resultados enriquecidos. Un marcado correcto de
ProductyOfferayuda a que su catálogo cumpla los requisitos para fichas gratuitas de Shopping y resultados enriquecidos en la búsqueda. - Calidad de los datos de producto — los datos del catálogo que alimentan tanto su feed como su SEO en el sitio. Los mismos datos de producto de PrestaShop impulsan el feed y la tienda, así que limpiarlos mejora ambos a la vez.
Por qué importa
Los problemas de feed y de seguimiento son insidiosos porque son invisibles en el día a día: un GTIN ausente, un título mal formado o una etiqueta de conversión que se dispara dos veces no lanzan un error — simplemente distorsionan sus datos en silencio y reducen su alcance. En PrestaShop, los feeds suelen generarse mediante un módulo que mapea los campos del catálogo a los atributos de Google, y pequeñas carencias de mapeo se multiplican a lo largo de miles de productos. Esta auditoría encuentra esas carencias antes de que le cuesten visibilidad o desvíen sus decisiones de campaña. Es para propietarios que ejecutan (o planean ejecutar) Shopping y quieren la seguridad de que los datos subyacentes son correctos.
Recibe un plan priorizado y en lenguaje sencillo para corregir exactamente lo que está bloqueando su feed y su seguimiento — desaprobaciones, atributos ausentes, conversiones rotas o contadas dos veces — ordenado para que aborde primero los problemas que afectan a los ingresos. Está concebido para actuar sobre él en orden, no como un volcado en bruto de cada aviso que emite Google.
Qué incluye el entregable
- Correcciones concretas y clasificadas — cada problema se describe en lenguaje sencillo con qué cambiar y dónde, ordenado por impacto para que las desaprobaciones y las conversiones rotas (lo que de verdad le cuesta alcance o distorsiona sus cifras) vayan primero.
- Orientación específica de PrestaShop — como el feed se genera a partir de su catálogo, muchas correcciones residen en los datos de producto, el mapeo de atributos o la configuración de módulos; señalamos dónde se origina el problema para que se corrija en la fuente, no se parchee producto a producto.
- Correcciones de seguimiento — orientación clara sobre la activación de conversiones y la deduplicación para que pueda volver a confiar en los datos que alimentan GA4 y Ads.
Por qué importa
Los problemas de seguimiento y de feed distorsionan en silencio cada decisión de campaña — puja, presupuesta y optimiza frente a cifras erróneas, y lo hace tanto en el tráfico de shopping de pago como gratuito. Hacer esto bien, por tanto, se amortiza ampliamente: datos de conversión más limpios significan decisiones mejor fundamentadas en todas partes, y un feed más sano significa que más parte de su catálogo es realmente apta para mostrarse. Como los mismos datos de catálogo también alimentan su SEO en el sitio, corregirlos en la fuente mejora más que solo el feed.
Encaja con propietarios que sienten que su rendimiento o sus informes de Shopping “no cuadran” y quieren corregir los cimientos antes de gastar más en campañas. Termina con una lista clara y ordenada de correcciones que apunta primero a los problemas que afectan a los ingresos.
Esta auditoría se acota a los cimientos técnicos — salud del feed, exactitud del seguimiento y schema — no a la gestión diaria de campañas o de pujas. Mantenemos deliberadamente las dos cosas separadas para que cada una reciba el tipo de atención adecuado: la auditoría se asegura de que sus datos sean correctos, que es precisamente lo que hace eficaz cualquier trabajo de campaña.
Dónde está la línea
- Dentro del alcance: diagnosticar desaprobaciones del feed y atributos ausentes, verificar el seguimiento de conversiones y la deduplicación, y comprobar los datos estructurados de
Product/Offer— la fontanería de la que depende cada campaña. - Fuera del alcance: la gestión continua de pujas, la asignación de presupuesto, la estructura de campañas y la optimización diaria de campañas de Shopping o de Búsqueda en activo.
Por qué importa
La gestión de campañas construida sobre cimientos rotos malgasta el gasto: si las conversiones se rastrean mal o la mitad de su catálogo está desaprobada, incluso una gestión experta de pujas optimiza frente a señales erróneas. Acertar primero con los cimientos es lo que hace eficaz el trabajo de campaña — es la diferencia entre optimizar el rendimiento real y perseguir ruido. Muchos propietarios de tiendas descubren que corregir los problemas de feed y de seguimiento mejora los resultados antes de realizar cambio alguno en las campañas.
Si desea ayuda continua con las campañas, podemos hablarlo por separado — es simplemente un encargo distinto con una cadencia distinta. Esto mantiene la auditoría honesta y enfocada: un chequeo de salud técnico y puntual sobre el que puede actuar, tanto si gestiona las campañas usted mismo, usa otra agencia o más adelante nos pide que las asumamos. El resultado es una base sólida sobre la que cualquier esfuerzo de campaña, interno o externo, puede construir con confianza.
La Auditoría de Conversión B2C revisa su tienda real y en producción a través de la lente de una tienda de consumo cuya misión es convertir a los visitantes existentes en compradores. No partimos de una lista genérica; partimos de su tráfico real, sus páginas de producto reales y su proceso de pago real, y luego recorremos el trayecto que sigue un comprador y encontramos por dónde se fugan los ingresos. Como el objetivo es la tasa de conversión y no el acabado general, cada observación se vincula a una caída medible.
Qué examinamos
- El embudo — dónde se pierden los visitantes entre el aterrizaje, la categoría, el producto, el carrito y el pago. En PrestaShop eso suele significar páginas de categoría lentas o recargadas, rutas internas débiles desde las páginas de blog/aterrizaje hacia las de producto, y el clásico precipicio del carrito al pago.
- Conversión en la página de producto — calidad de las imágenes y el zoom, claridad de precios, mensajes de stock y entrega, urgencia y fricción al añadir al carrito. Observamos cómo renderiza su tema la caja de compra y si la jerarquía de
product.tplsitúa por encima del pliegue la información que impulsa la decisión. - Móvil — la experiencia donde realmente convierte (o no) la mayor parte del tráfico de consumo. Comprobamos los objetivos táctiles, el botón fijo de añadir al carrito, el peso de las imágenes y si el proceso de pago móvil es genuinamente usable en lugar de un diseño de escritorio encogido.
- Confianza y prueba social — valoraciones, reseñas, garantías, tranquilidad sobre devoluciones y señales de seguridad de pago situadas en los puntos de decisión exactos donde un consumidor titubea.
- Fricción en el pago y devoluciones — el punto de abandono final y de mayor valor. Observamos el flujo del proceso de pago de una página, la creación de cuenta forzada, las opciones de pago, los costes inesperados que aparecen tarde y con qué claridad se comunican las devoluciones.
Por qué importa
La mayoría de las tiendas gastan mucho para captar tráfico y luego pierden una gran parte por fricción corregible. Apretar el embudo monetiza visitantes que ya ha pagado, lo que suele ser la palanca más rápida y barata de la que dispone. PrestaShop añade sus propias particularidades — overrides del tema, conflictos de módulos en el proceso de pago y el comportamiento de CCC/caché que afecta a la velocidad de página — y las tenemos en cuenta en lugar de darle consejos agnósticos respecto a la plataforma.
Esta auditoría es para tiendas PrestaShop orientadas al consumidor que tienen un tráfico significativo pero sienten que la tasa de conversión es más baja de lo que debería. El resultado es diagnóstico y priorizado, de modo que pueda actuar primero sobre los problemas de mayor impacto en lugar de adivinar.
Se solapan, pero responden a preguntas distintas, y elegir la correcta le ahorra tiempo y dinero. La Auditoría UI/UX trata sobre la usabilidad y la accesibilidad en toda la tienda — navegación, arquitectura de la información, legibilidad, coherencia, estándares de accesibilidad y la calidad general de la experiencia para todo visitante, tenga o no intención de comprar hoy. La Auditoría de Conversión B2C está enfocada con precisión en los ingresos: los cambios concretos en el embudo y la página de producto que convierten más de su tráfico actual en pedidos.
Cómo elegir
- Si su prioridad es elevar la tasa de conversión — conseguir que más de los visitantes que ya tiene añadan al carrito y completen el pago — la Auditoría de Conversión B2C es la indicada. Se centra en las fugas del embudo, la persuasión en la página de producto, el flujo de compra móvil, las señales de confianza en el punto de decisión y el abandono en el pago.
- Si su prioridad es la usabilidad y accesibilidad generales — hacer toda la tienda más fácil, clara e inclusiva de usar en todos los tipos de página, no solo en la ruta de compra — la Auditoría UI/UX encaja mejor.
En la práctica, las dos son complementarias. Un problema de UI/UX (navegación confusa, un formulario inaccesible, un diseño incoherente) puede ser también un problema de conversión, y un hallazgo de una auditoría aflora a menudo en la otra. Pero el enfoque y la priorización difieren: la auditoría de conversión ordena todo por el impacto esperado en los ingresos, mientras que la de UI/UX ordena por calidad de usabilidad y accesibilidad.
En PrestaShop en concreto, ambas auditorías tienen en cuenta los overrides del tema, el comportamiento de los módulos y la estructura de plantillas, pero miran cosas distintas — la de conversión mira la caja de compra, el carrito y el proceso de pago de una página; la de UI/UX mira la tienda en su conjunto. Si no está seguro de cuál necesita, díganos su objetivo: más ventas con el mismo tráfico le orienta hacia la auditoría de conversión; una tienda más limpia, usable y accesible le orienta hacia UI/UX.
Recibe un plan priorizado y en lenguaje sencillo para convertir más de sus visitantes existentes en compradores — cambios concretos y específicos de PrestaShop clasificados por el impacto esperado en la conversión, para que pueda empezar por las ganancias que mueven los ingresos más rápido. Está redactado para actuar sobre él, no para archivarlo.
Qué incluye el entregable
- Una lista priorizada de hallazgos — cada problema que encontramos a lo largo del embudo, las páginas de producto, la experiencia móvil, las señales de confianza y el proceso de pago, ordenado por el impacto esperado en la conversión y no por lo fácil que fue detectarlo.
- Recomendaciones concretas y específicas de PrestaShop — no consignas genéricas de buenas prácticas, sino qué cambiar en su tienda: ajustes de tema/plantilla, configuración, elecciones de módulos y correcciones de pago/carrito que encajan con cómo funciona PrestaShop de verdad.
- El razonamiento detrás de cada elemento — por qué le cuesta pedidos y cómo es una buena versión, para que su equipo (o el nuestro) pueda implementarlo con confianza.
- Un punto de partida claro — como todo está clasificado, puede empezar por los cambios de mayor impacto y avanzar hacia abajo, en lugar de intentar hacerlo todo a la vez.
Por qué importa la priorización
El trabajo de conversión está lleno de pequeños posibles ajustes, y hacerlos en orden aleatorio malgasta el esfuerzo. Al clasificar los cambios por el impacto esperado, el plan le permite capturar primero las mayores ganancias de ingresos y decidir dónde parar en función de los rendimientos decrecientes. El plan es honesto y mesurado — identifica por dónde se fuga su tráfico actual y cómo recuperarlo; no promete resultados concretos de tráfico, posicionamiento o ingresos, porque estos dependen de su mercado, sus productos y su ejecución.
Está redactado en lenguaje sencillo para que un propietario de tienda pueda entenderlo y actuar sobre él, a la vez que es lo bastante específico para que un desarrollador de PrestaShop pueda implementarlo directamente. Si lo desea, los cambios recomendados pueden luego acotarse como trabajo de implementación.
La Auditoría de Preparación B2B comprueba si su tienda PrestaShop está genuinamente lista para vender de empresa a empresa — no solo si puede aceptar un pedido, sino si admite la forma en que compran realmente los compradores profesionales. Vender a empresas introduce requisitos que una configuración de consumo estándar simplemente no tiene, y la mayoría de las tiendas descubren las carencias solo después de que un cliente profesional se topa con un muro. Esta auditoría las encuentra antes.
Qué evaluamos
- Grupos de clientes y catálogos restringidos — mostrar los productos y precios correctos a los compradores correctos. Comprobamos cómo están configurados sus grupos de clientes de PrestaShop y si la visibilidad del catálogo, los precios por grupo y las restricciones de acceso se comportan realmente como se pretende.
- Precios escalonados / al por mayor — precios por volumen y por contrato hechos correctamente, incluidos precios específicos, descuentos por cantidad y tarifas por grupo, para que los compradores mayoristas vean precios exactos sin soluciones manuales.
- Plazos de pago a crédito — flujos de facturación y pago aplazado, para que las cuentas profesionales aprobadas puedan pedir a crédito en lugar de verse forzadas a pagar por adelantado como un consumidor.
- Solicitudes de presupuesto — un flujo de precios negociados superpuesto al proceso de pago estándar, para que los compradores que necesitan un presupuesto antes de comprometerse tengan una ruta adecuada en lugar de abandonar.
- Flujos de IVA de la UE y cuentas profesionales — validación VIES de los números de IVA, gestión de la inversión del sujeto pasivo para ventas intracomunitarias y un proceso sensato de incorporación/registro B2B para las nuevas cuentas profesionales.
Por qué importa
Los compradores B2B esperan que su precio, sus plazos y su tratamiento fiscal se respeten automáticamente. Si una empresa tiene que escribir un correo para pedir un precio, no puede obtener plazos a crédito o ve un IVA incorrecto en el pago, pierde el pedido — y a menudo la relación. PrestaShop puede admitir todo esto mediante funciones nativas, configuración, módulos existentes y, cuando hace falta, trabajo a medida, pero hay que configurarlo deliberadamente. La auditoría asigna cada requisito a la situación actual de su tienda.
Esto es para comerciantes de PrestaShop que quieren añadir o reforzar un canal B2B junto a (o en lugar de) las ventas de consumo. El resultado es diagnóstico y priorizado; le dice dónde se queda corto y qué implica cerrar cada carencia, de modo que invierta solo en las capacidades que su negocio realmente necesita.
Recibe un plan priorizado y en lenguaje sencillo que muestra exactamente dónde se queda corta su tienda para una venta B2B real y cómo cerrar cada carencia — ya sea mediante configuración, un módulo existente o una pieza de trabajo a medida. Los hallazgos se clasifican para que active primero las capacidades B2B de mayor valor, en lugar de intentar construirlo todo a la vez.
Qué incluye el entregable
- Un análisis de carencias a lo largo de los requisitos B2B fundamentales — grupos de clientes y catálogos restringidos, precios escalonados/al por mayor, plazos de pago a crédito, solicitudes de presupuesto y flujos de IVA de la UE/cuentas profesionales — comparando lo que esperan los compradores profesionales con cómo se comporta su tienda PrestaShop hoy.
- Un remedio claro para cada carencia — y, fundamentalmente, cómo cerrarla: si es un cambio de configuración en PrestaShop, un módulo existente que ya lo resuelve o un desarrollo genuinamente a medida. Esa distinción importa porque determina el coste y el esfuerzo.
- Prioridades clasificadas — primero las capacidades B2B de mayor valor, para que pueda poner en marcha cuanto antes las funciones que desbloquean los pedidos profesionales y posponer las prescindibles.
- Razonamiento en lenguaje sencillo — por qué cada carencia le cuesta compradores empresariales y cómo es una versión que funciona, redactado para que un propietario de tienda pueda decidir y un desarrollador pueda implementar.
Por qué importa la priorización
La preparación B2B rara vez es un único interruptor — es un conjunto de capacidades interconectadas, y algunas importan mucho más a sus compradores concretos que otras. Al clasificar cada carencia, el plan le permite habilitar la venta B2B real de forma incremental y gastar solo donde cuenta. Es una evaluación honesta: identifica lo que falta y lo que implica corregirlo, sin prometer resultados concretos de ventas o crecimiento, que dependen de su mercado y su ejecución.
La auditoría viene deliberadamente antes de cualquier construcción, de modo que solo se comprometa con la configuración, los módulos o el trabajo a medida que su negocio realmente necesita. Si decide proceder, cada una de las carencias recomendadas puede acotarse como implementación — configuración, uno de nuestros módulos existentes o desarrollo a medida.
Sí. Muchas de las carencias que aflora una Auditoría de Preparación B2B ya están cubiertas por nuestros módulos de PrestaShop existentes — por ejemplo, los precios por grupo de clientes, la validación de IVA y la gestión de la inversión del sujeto pasivo, y los flujos de solicitud de presupuesto — de modo que cerrarlas suele ser cuestión de instalar y configurar una funcionalidad probada en lugar de encargar un trabajo a medida. Todo lo que sea genuinamente específico de su negocio puede acotarse como desarrollo a medida.
Cómo sigue la implementación a la auditoría
- Primero la configuración — algunas carencias se cierran únicamente configurando PrestaShop correctamente: grupos de clientes, catálogos restringidos, precios específicos/escalonados y reglas de impuestos. Cuando es así, lo decimos, porque es la vía más económica.
- Luego los módulos existentes — cuando una capacidad necesita más que la configuración nativa (lógica de precios por grupo, validación de IVA VIES e inversión del sujeto pasivo intracomunitaria, flujos de presupuesto negociado), nuestros módulos existentes suelen cubrirla, así que obtiene funcionalidad probada en lugar de algo construido desde cero.
- Desarrollo a medida cuando es realmente necesario — si su proceso B2B tiene requisitos que nada estándar cumple, esa pieza a medida puede acotarse y construirse deliberadamente.
Por qué la auditoría va primero
Ejecutar la evaluación antes de cualquier construcción significa que solo invierte en lo que su negocio realmente necesita, por orden de prioridad, en lugar de comprar módulos de forma especulativa o encargar trabajo a medida que la configuración podría haber resuelto. Mantiene el gasto honesto: cada recomendación se vincula a una carencia real, y usted elige hasta dónde llegar.
Así que la respuesta es a la vez diagnóstico y entrega — la auditoría le dice con precisión qué falta y cómo cerrarlo, y luego podemos implementar las correcciones mediante configuración, nuestros módulos existentes o desarrollo a medida según lo requiera la situación. No hay garantías de resultados ligadas a la construcción; a lo que nos comprometemos es a cerrar las carencias concretas que la auditoría identifica.
La Evaluación de Idoneidad de Módulos asigna sus requisitos de negocio reales a soluciones y le dice, con honestidad, qué encaja. En lugar de partir de un producto que podría comprar, parte de lo que realmente necesita lograr — y luego trabaja hacia atrás hasta la respuesta correcta, que a veces es un módulo, a veces una función nativa de PrestaShop y a veces nada en absoluto.
Cómo funciona
- Usted describe el resultado que necesita — el problema a resolver o la capacidad a añadir, en términos de negocio. No necesita saber qué módulo o función lo hace; ese es nuestro trabajo.
- Lo traducimos a requisitos concretos — convirtiendo un objetivo difuso ("necesito un mejor filtrado", "necesito este comportamiento en el pago") en criterios específicos y verificables que una solución debe cumplir, incluidas consideraciones de compatibilidad con la versión de PrestaShop, el tema y el rendimiento.
- Evaluamos las opciones frente a esos requisitos — los nuestros y los módulos de terceros, además de la funcionalidad nativa de PrestaShop — comprobando cada candidato con honestidad frente a lo que realmente necesita en lugar de lo que es más fácil de vender.
- Obtiene una matriz de requisitos y una recomendación — una asignación clara de cada requisito a la opción que mejor encaja, con las contrapartidas detalladas, para que la decisión sea transparente.
Por qué importa
Los errores más caros de PrestaShop no suelen ser los módulos que fallan de plano — son los que funcionan a medias, se apilan unos sobre otros, entran en conflicto en el pago o el tema y se acumulan silenciosamente en una tienda frágil y lenta. Comprar lo correcto una sola vez evita eso. El ecosistema de PrestaShop es amplio y desigual; el mismo resultado puede alcanzarse de varias formas con consecuencias muy distintas para la mantenibilidad, el rendimiento y las actualizaciones de versión, y la evaluación las sopesa en lugar de limitarse a comparar funciones.
Esto es para comerciantes ante una decisión — a punto de comprar un módulo, evaluando opciones que compiten o sin saber si siquiera necesitan uno. El entregable tiene calidad de decisión y es imparcial: le dice qué comprar o construir, qué descartar y por qué, antes de que comprometa dinero. No promete un resultado de negocio concreto; garantiza que la solución que elija encaje genuinamente con el requisito.
Sí — con honestidad. Si un módulo de terceros, una función nativa de PrestaShop o ningún módulo en absoluto encaja mejor con su requisito, lo decimos. Todo el valor de la Evaluación de Idoneidad de Módulos es una recomendación imparcial; orientarle hacia nuestro propio catálogo al margen de la idoneidad echaría por tierra el propósito y erosionaría la confianza sobre la que se construye el servicio.
Cómo funciona la imparcialidad en la práctica
- Manda el requisito, no el catálogo — evaluamos cada candidato frente a sus requisitos concretos. El módulo (o la función nativa) que mejor los cumpla, de quien sea, gana la recomendación, incluso cuando no es el nuestro.
- Primero lo nativo cuando basta — PrestaShop ya hace muchísimo de serie. Si la configuración o una función integrada resuelve su problema, comprar cualquier módulo — el nuestro o el de cualquiera — es la decisión equivocada, y le diremos que se ahorre el dinero.
- Terceros cuando encajan mejor — si un módulo de terceros encaja de forma más limpia con su versión, tema o flujo de trabajo, esa es la recomendación honesta, con las contrapartidas explicadas.
- Las contrapartidas sobre la mesa — compatibilidad, mantenibilidad, rendimiento, soporte y riesgo de actualización entran todos en juego, de modo que la recomendación refleja el coste total de propiedad, no solo una lista de funciones.
Por qué este es el propósito del servicio
Una evaluación que siempre concluye "compre el nuestro" no es una evaluación — es un argumento de venta. La razón por la que los comerciantes pagan por una evaluación de idoneidad independiente es precisamente obtener una recomendación en la que puedan confiar, incluso cuando los envía a otra parte o les dice que no hagan nada. El panorama de módulos de PrestaShop es amplio y desigual, y la opción genuinamente mejor para un requisito dado se sitúa con frecuencia fuera del rango de cualquier proveedor individual. Preferimos tener razón a servirnos a nosotros mismos, porque eso es lo que hace que la recomendación merezca la pena seguir.
Recibe una matriz de requisitos clara que asigna cada una de sus necesidades a la solución que mejor encaja, con una recomendación en lenguaje sencillo y las contrapartidas detalladas. En resumen: sabrá qué comprar o construir, qué descartar y por qué — antes de gastar dinero.
Qué incluye el entregable
- Una matriz de requisitos — cada una de sus necesidades traducida a un requisito concreto y verificable, contrastada con las soluciones candidatas (las nuestras, de terceros y la funcionalidad nativa de PrestaShop) para que vea de un vistazo qué cumple qué.
- Una recomendación de mejor encaje por requisito — la opción que elegiríamos y por qué, en lenguaje sencillo, para que el razonamiento sea transparente en lugar de un veredicto de caja negra.
- Las contrapartidas — compatibilidad con su versión de PrestaShop y su tema, mantenibilidad, rendimiento y riesgo de actualización, para que entienda no solo qué encaja, sino qué le cuesta cada elección con el tiempo.
- Orientación clara sobre qué descartar — incluido dónde la configuración nativa basta y no hace falta ningún módulo, que a menudo es lo que más dinero ahorra.
Por qué ayuda el formato de matriz
Una matriz hace la decisión auditable: en lugar de confiar en una única línea de "compre esto", puede ver cada requisito, cada candidato y exactamente dónde encaja o se queda corto cada uno. Eso es especialmente valioso en PrestaShop, donde el mismo resultado puede alcanzarse de varias formas con consecuencias muy distintas para la estabilidad y las futuras actualizaciones. También facilita revisar la decisión más adelante, o instruir a un desarrollador con precisión sobre qué implementar.
El entregable tiene calidad de decisión y es imparcial — le dice qué comprar o construir, qué descartar y por qué, antes de que comprometa presupuesto. No promete un resultado de negocio concreto; lo que le da es la confianza de que la solución que elija encaja genuinamente con el requisito, de modo que compre lo correcto una vez en lugar de apilar módulos que funcionan a medias. Si decide proceder, la recomendación puede pasarse directamente a la implementación — configuración, uno de nuestros módulos o desarrollo a medida según corresponda.
La Revisión de Idoneidad del Tema evalúa un tema — o su lista de candidatos preseleccionados — frente a sus requisitos reales, no frente a las pulidas capturas de marketing de una página de demostración. Un tema que parece rápido y flexible con doce productos de muestra puede comportarse de forma muy distinta cuando soporta su catálogo completo, sus módulos y su tráfico. Nosotros cerramos esa brecha antes de que usted se comprometa.
Qué inspeccionamos realmente
- Rendimiento en condiciones reales — cómo se renderiza el tema con un tamaño de catálogo realista en lugar de una demo reducida, incluyendo el peso de su CSS/JS, cómo gestiona los listados de categorías y productos, y dónde es probable que lastre los Core Web Vitals.
- Capacidad de tema hijo — si puede personalizar el tema mediante un tema hijo adecuado y seguir aplicando las actualizaciones del origen de forma segura, o si cada cambio implica editar archivos del tema base que la siguiente actualización sobrescribirá.
- Soporte B2B — con qué solvencia afronta requisitos como grupos de clientes, precios específicos, visualización de impuestos y catálogos basados en cuentas, si su tienda no es puramente B2C.
- Accesibilidad — alineación con las expectativas de EAA / WCAG, lo cual importa tanto legalmente como por la usabilidad para todo su público.
- Calidad móvil — un comportamiento responsive genuino y una usabilidad táctil real, no solo un diseño que técnicamente se reorganiza.
- Cadencia de actualizaciones — si el tema se mantiene activamente para la versión actual de PrestaShop, o es un código abandonado que se convertirá silenciosamente en un lastre.
Por qué importa: el tema es una de las cosas más difíciles de cambiar tras el lanzamiento. Afecta a cada página, a cada ruta de conversión y a su coste de mantenimiento a largo plazo. Elegir solo por la apariencia es la forma en que las tiendas acaban atrapadas en deuda de rendimiento o en un código muerto. Esta revisión saca a la luz esos riesgos mientras usted aún tiene libertad de elección.
Es adecuada para comerciantes que comparan temas antes de una construcción o un cambio de plataforma, para agencias que evalúan el tema preferido de un cliente, y para cualquiera que quiera una lectura técnica e independiente de un tema de PrestaShop en lugar de un argumento de venta.
Usted recibe un veredicto puntuado de cada tema frente a sus requisitos específicos, con las concesiones y los riesgos explicitados antes de comprometerse — no descubiertos semanas después del lanzamiento, cuando deshacerlos resulta caro.
Cómo es el entregable
- Una evaluación clara de cada tema (o de cada candidato de su lista) medido frente a los criterios que importan a su tienda, para que pueda comparar de igual a igual en lugar de por las primeras impresiones.
- Los riesgos nombrados con claridad — deuda de rendimiento que perjudicará la velocidad de página y los Core Web Vitals, soporte de tema hijo pobre o frágil que bloquea la personalización segura, lagunas de accesibilidad frente a EAA / WCAG, o un código abandonado que no irá al ritmo de PrestaShop.
- Una lectura práctica de si un tema es una base sólida, un compromiso manejable, o algo que evitar.
Por qué esto es valioso: los problemas de tema más dañinos son los que no se ven en una demo. Un tema puede parecer perfecto y aun así ser imposible de personalizar sin romper las actualizaciones, o volverse lento una vez cargado su catálogo real, o estar silenciosamente sin mantenimiento. Para cuando esos problemas afloran en producción, normalmente ya ha invertido en contenido, configuración y personalización sobre él.
El propósito de la revisión es una elección informada. Usted decide con los ojos abiertos — conservar, personalizar o cambiar — y entra en la decisión sabiendo exactamente lo que asume. No hacemos ninguna promesa sobre un resultado concreto; le damos el panorama técnico honesto para que la decisión sea suya, sobre una base firme. Es la diferencia entre elegir un tema y heredar sus problemas.
Sí. Podemos revisar un tema que usted ya haya comprado o sobre el que ya haya construido, y aplicar exactamente el mismo veredicto puntuado y basado en requisitos a lo que está ejecutando hoy. La revisión no es solo para la selección de temas desde cero — es igual de útil cuando ha heredado un tema, ha asumido una tienda, o ha empezado a sospechar que su tema actual le está frenando.
Qué le dice la revisión de un tema existente
- Si merece la pena conservarlo — una lectura honesta de si su tema actual es una base sólida en la que seguir invirtiendo, o un lastre a largo plazo.
- Cuáles son sus riesgos — deuda de rendimiento que ralentiza sus páginas, soporte de tema hijo frágil o ausente que dificulta la personalización segura, lagunas de accesibilidad frente a EAA / WCAG, y si el código sigue manteniéndose activamente para la versión actual de PrestaShop.
- Si un tema hijo o un cambio es el mejor camino — si la base es buena, podemos confirmar que personalizar mediante un tema hijo adecuado le mantiene a salvo de las actualizaciones; si no, le decimos con claridad que un cambio es la vía de menor riesgo.
Por qué esto importa: muchos comerciantes solo descubren las verdaderas limitaciones de un tema después de haber construido contenido, configurado módulos y personalizado plantillas sobre él. Revisar lo que ya ejecuta le permite tomar esa decisión de forma deliberada en lugar de reactiva — antes de invertir más trabajo sobre una base inestable, o, al contrario, antes de descartar innecesariamente un tema que solo necesita un enfoque sensato de tema hijo.
Esto es muy adecuado para tiendas que no eligieron su tema actual, que están sopesando un rediseño, o que simplemente quieren una opinión técnica independiente sobre el tema del que ya dependen — con los riesgos expuestos con claridad para que la decisión siga siendo suya.
Un proyecto de módulo personalizado para PrestaShop se gestiona como un encargo de ingeniería en toda regla, no como un parche rápido. Cada proyecto comienza con un descubrimiento acotado — el paso en el que convertimos una necesidad de negocio en una especificación concreta y lista para construir.
Primero el descubrimiento
En el descubrimiento determinamos qué debe hacer realmente el módulo, incluidos los casos límite y las restricciones específicas de PrestaShop que silenciosamente hunden los proyectos mal acotados: cómo debe engancharse al frontal y al back office, cómo se comporta entre grupos de clientes, multitienda, múltiples idiomas y monedas, cómo interactúa con el carrito, los pedidos o el catálogo, y dónde se puede — y dónde no — extender con seguridad el comportamiento del core. El resultado es una especificación lo bastante precisa como para presupuestar y construir con honestidad. La tarifa de descubrimiento se acredita a la construcción, así que si decide continuar no es dinero perdido — pasa a formar parte del trabajo.
Construir, probar y entregar
A partir de esa especificación construimos el módulo con estándares de producción — usando la arquitectura de hooks y overrides de PrestaShop en lugar de modificar el core — luego lo probamos y lo entregamos. Las condiciones de soporte se acuerdan en el alcance del proyecto, de modo que usted sabe de antemano qué está cubierto en lugar de descubrirlo más tarde.
Por qué trabajar así: la mayoría de los proyectos de módulo dolorosos no fracasan en el código sino en las suposiciones — un requisito que resulta significar tres cosas distintas, o una restricción de PrestaShop que nadie comprobó. Fijar esas cosas en el descubrimiento es lo que permite que la construcción sea predecible.
El resultado es un módulo que hace exactamente lo que los módulos estándar y de mercado no hacen, construido deliberadamente para su tienda en lugar de ensamblado a partir de piezas dispares. Es adecuado para comerciantes cuyo flujo de trabajo, catálogo o integración genuinamente no encaja en un módulo estándar, y que quieren algo mantenible en lugar de un apaño puntual que se rompe en la siguiente actualización.
Su módulo personalizado se construye y se prueba en PrestaShop 1.7, 8 y 9. PrestaShop cambió enormemente a lo largo de esas versiones principales — se desaprobaron APIs del core, cambiaron firmas y algunos métodos se eliminaron por completo — de modo que un módulo escrito de forma ingenua contra una versión a menudo se rompe en otra.
Cómo lo mantenemos compatible
Usamos envoltorios de compatibilidad de versión en lugar de llamar directamente a APIs frágiles del core. Cuando un método de PrestaShop difiere o desaparece entre versiones, el envoltorio detecta la versión en ejecución y llama por debajo a la API correcta, de modo que el mismo módulo se comporta correctamente en 1.7, en 8 y en 9. Esto reduce el riesgo de rotura en la actualización por APIs del core desaprobadas o eliminadas — el modo de fallo que deja a los comerciantes atrapados en una versión antigua de PrestaShop porque su código personalizado no puede avanzar.
Self-heal / infra-guard
El módulo también incorpora nuestra arquitectura self-heal / infra-guard. Las actualizaciones de PrestaShop y las reconstrucciones de cache pueden dejar las pestañas del back office de un módulo ausentes, sus hooks sin registrar o su esquema de base de datos desincronizado — y el síntoma clásico es un módulo que falla en silencio, con una entrada de menú desaparecida o una función que sencillamente deja de funcionar. Infra-guard comprueba las propias pestañas, hooks y esquema del módulo y los repara en lugar de dejar que se degraden, de modo que el módulo sigue funcionando tras una actualización de PrestaShop en lugar de deteriorarse sin que se note.
Por qué importa: en PrestaShop, el coste de un módulo personalizado rara vez está en la primera construcción — está en todo lo que viene después. Construir contra tres versiones principales soportadas, con envoltorios de compatibilidad e infraestructura de autorreparación, es lo que mantiene el módulo como un activo a largo plazo que sobrevive a las actualizaciones, en lugar de un lastre que hay que rediseñar cada vez que la plataforma avanza. Esto es especialmente valioso para comerciantes que pretenden mantener la tienda al día y no quieren que su código personalizado sea lo que les ancle a una versión antigua.
Sí — usted es propietario de su módulo, y es genuinamente PHP abierto y legible, sin ionCube y sin ofuscación. Usted, o cualquier desarrollador con quien elija trabajar, puede abrir el código fuente, leer exactamente qué hace, auditarlo en seguridad y comportamiento, y mantenerlo o ampliarlo de forma independiente.
Por qué esto es deliberado
Buena parte del mercado de módulos de PrestaShop entrega código cifrado o bloqueado con ionCube. Eso parece inofensivo hasta que necesita cambiar algo, depurar una interacción con otro módulo, o trasladar la tienda — y descubre que no puede, porque el código es una caja negra y solo el proveedor original tiene la llave. Eso silenciosamente le ata a un único proveedor para mantener su propia tienda en funcionamiento.
Nosotros hacemos lo contrario. Como el módulo se entrega como PHP simple y auditable:
- Puede hacer que lo revisen en seguridad en sus términos, por quien usted confíe.
- Puede depurar interacciones con su tema y otros módulos en lugar de chocar contra un muro opaco.
- Puede hacer que cualquier desarrollador competente de PrestaShop lo mantenga o lo amplíe — no depende de nosotros para seguir operando.
- Puede leerlo para entender su propia tienda, lo cual importa para el cumplimiento, el traspaso y la diligencia debida.
Por qué importa: un módulo personalizado es parte de la infraestructura de su negocio, y una infraestructura que no puede leer ni cambiar no es realmente suya. Un código abierto y legible significa que nunca queda secuestrado por la dependencia de un proveedor, y el futuro de su tienda permanece en sus manos. Es lo contrario de buena parte del mercado de módulos de PrestaShop, y es una elección deliberada — preferimos ganarnos el trabajo recurrente siendo buenos colaboradores que reteniendo su código como rehén.
El desarrollo de módulos a medida para PrestaShop comienza desde 2.490 €. El precio exacto lo fija el descubrimiento acotado, porque un presupuesto honesto necesita una especificación real en lugar de una conjetura hecha antes de que nadie haya determinado qué tiene que hacer realmente el módulo.
Por qué el precio se acota, no se fija
El trabajo a medida varía enormemente. Un módulo que añade un comportamiento concreto es una construcción muy distinta de uno que se integra con un sistema externo, gestiona multitienda y múltiples idiomas, manipula el flujo del carrito o del pedido, o tiene que afrontar casos límite peliagudos entre grupos de clientes y monedas. Presupuestar cualquiera de esas cosas a partir de un encargo de una línea o bien infla la cifra para cubrir incógnitas, o bien oculta un riesgo que aflora más tarde como ampliación de alcance. El descubrimiento elimina las conjeturas: convertimos su necesidad en una especificación concreta — con las restricciones y los casos límite de PrestaShop fijados — y presupuestamos frente a eso.
La tarifa de descubrimiento se acredita a la construcción
El paso de descubrimiento tiene una tarifa, pero se acredita a la construcción, de modo que no es dinero perdido si decide continuar — simplemente pasa a formar parte del proyecto. Si no continúa, igualmente se lleva una especificación clara y lista para construir de lo que su módulo necesitaría, lo cual tiene valor por sí mismo (por ejemplo, si lo lleva a otro sitio o lo retoma más adelante).
Por qué está pagando: no solo por código, sino por un módulo construido con estándares de producción en PHP abierto y legible del que usted es propietario, probado en PrestaShop 1.7, 8 y 9, con la arquitectura self-heal / infra-guard que lo mantiene en funcionamiento tras las actualizaciones de la plataforma. La cifra desde 2.490 € es el suelo realista para ese nivel de trabajo; el descubrimiento determina dónde se sitúa su proyecto concreto por encima de él.
Un Configurador de Productos justifica su valor en productos complejos, hechos a medida o de varios componentes — cualquier cosa en la que el cliente, en la práctica, ensambla su propia versión en lugar de elegir una referencia fija de la estantería. Si una compra implica elegir dimensiones, materiales, acabados, opciones y complementos, una página de producto plana no puede representarla honestamente, y los atributos basados en combinaciones se vuelven rápidamente inmanejables.
Productos que encajan bien
- Artículos cortados a medida — cualquier cosa vendida por largo, ancho o superficie elegidos, donde el precio depende de las dimensiones que introduce el cliente.
- Packs y kits — productos ensamblados a partir de varios componentes que el cliente selecciona juntos.
- Mobiliario — estructura, tamaño, material, tapizado o acabado, y opciones de complementos que se combinan en un único artículo conformado.
- Rotulación — opciones de tamaño, sustrato, acabado y cantidad que determinan el precio.
- Equipamiento técnico — equipos configurables donde la construcción correcta depende de una cadena de elecciones compatibles.
Por qué una página de producto estándar se queda corta: los atributos y combinaciones nativos de PrestaShop funcionan para un puñado de variantes, pero no escalan a productos con muchas opciones independientes o con precios basados en dimensiones — acaba con una explosión de combinaciones o con una página que sencillamente no puede capturar las elecciones reales. Un configurador modela las opciones como elecciones en lugar de como variantes preconstruidas, lo que mantiene el catálogo manejable y la experiencia de compra clara.
En la página, los compradores eligen sus opciones con ensamblaje de precio en vivo — el precio se actualiza a medida que construyen, de modo que siempre ven el coste exacto de la configuración que están montando en lugar de una vaga cifra “desde” o un callejón sin salida de presupuesto bajo petición. Esa transparencia es lo que convierte un producto complejo en algo que un cliente puede comprar con confianza por internet.
Es adecuado para comerciantes cuyos productos son genuinamente configurables y que actualmente los están forzando a páginas de producto rígidas, gestionando la configuración por correo electrónico, o perdiendo ventas porque el frontal no puede mostrar un precio real para una construcción real.
Sí. Cada configuración es limpia para SEO y compartible mediante una URL basada en ruta — una ruta real y legible en lugar de una cadena de consulta enrevesada arrastrando una larga lista de parámetros ?option=…&option=…. Esa distinción importa más de lo que parece a primera vista.
Por qué importan las URL basadas en ruta
- Enlazables y guardables — un cliente puede guardar una construcción concreta, volver a ella más tarde, o abrirla en otro dispositivo y retomarla exactamente donde estaba.
- Compartibles — un comprador puede enviar su configuración exacta a un colega, a un socio o de vuelta a su equipo comercial, y todos aterrizan en la misma construcción. Igualmente, usted puede enviar una configuración preparada a un cliente para que la retome.
- Indexables cuando proceda — las rutas limpias son algo que los buscadores pueden tratar como páginas propias, en lugar de la sopa de parámetros que los rastreadores normalmente ignoran o tratan como duplicados. Usted mantiene el control de qué configuraciones merece la pena mostrar.
Construido sobre el motor Product Setup
El configurador funciona sobre nuestro motor Product Setup, lo que significa que es rápido y rastreable en lugar de una pesada caja negra de JavaScript. Muchos configuradores son enteramente widgets de lado cliente: estupendos hasta que un buscador, un enlace compartido o un cliente con una conexión lenta se encuentra con una carcasa vacía que solo se ensambla a sí misma después de que se ejecute un montón de JavaScript. Construir sobre el motor Product Setup mantiene las páginas del configurador reales y accesibles, con la elección de opciones en vivo e interactiva superpuesta encima, en lugar de ser lo único que sostiene la página.
Por qué importa: para los productos configurables, el enlace es el producto. Si un cliente no puede guardar, compartir o volver a una construcción concreta — o si los buscadores no pueden dar sentido a sus configuraciones — pierde tanto conversiones como visibilidad. Unas URL de configuración limpias, basadas en ruta y rastreables convierten cada construcción en algo duradero, compartible e indexable en lugar de un estado de navegador desechable.
La Configuración del Configurador de Productos comienza desde 1.490 €, y el trabajo convierte su producto y sus opciones en un configurador guiado funcional con precios en vivo y URL compartibles — no en un widget a medio terminar que luego tiene que conectar usted mismo.
Qué incluye la configuración
- Convertir su producto y sus opciones reales en un configurador guiado que acompaña al comprador a través de sus elecciones en la página.
- Precios en vivo, de modo que el precio se ensambla a medida que el cliente construye y siempre ve el coste exacto de su configuración.
- URL de configuración compartibles y basadas en ruta, de modo que una construcción concreta puede enlazarse, guardarse, enviarse a un cliente e indexarse cuando proceda, en lugar de quedar atrapada en un estado de navegador transitorio.
Por qué el alcance se confirma en el descubrimiento
El alcance exacto — el número de opciones, las reglas de precios que conectan esas opciones con el precio final, y cualquier integración que el configurador necesite — se confirma en un descubrimiento breve. Esto es lo que mantiene el presupuesto honesto: un configurador con un par de opciones sencillas y precios simples es una construcción muy distinta de uno con precios basados en dimensiones, opciones interdependientes o una conexión con otro sistema. El descubrimiento se asegura de que el presupuesto refleje su producto real, no una plantilla aplicada a ciegas, de modo que no paga por una complejidad que no tiene ni infravalora la complejidad que sí tiene.
Por qué importa: para los productos configurables, “montar un configurador” puede significar cantidades de trabajo enormemente distintas según cómo se comporten realmente las opciones y los precios. Anclar en desde 1.490 € y luego confirmar los detalles en el descubrimiento le da un suelo realista y un precio fundamentado en su producto real. Es adecuado para comerciantes con productos genuinamente configurables que quieren que los compradores construyan y pongan precio a su propia versión en el frontal, con cada construcción limpia, rápida y compartible.
Monitoring Plan es el más ligero de nuestros Care Plans de PrestaShop — una red de seguridad continua y siempre activa que vigila su tienda para que usted no tenga que hacerlo. Está hecho para una sola tarea y la hace bien: avisarle de que algo va mal antes de que un cliente le envíe un correo al respecto.
Qué incluye
- Monitorización de uptime — su frontal y su checkout se comprueban de forma continua, de modo que una caída dispara una alerta en el momento en que ocurre en lugar de horas después.
- Comprobaciones de cron y salud del core — detectamos tareas cron rotas o detenidas y errores fatales evidentes que degradan silenciosamente una tienda PrestaShop (tareas programadas fallidas, procesos del core ausentes, fatales de PHP recurrentes).
- Vigilancia de seguridad y rendimiento — alertas básicas de regresión que avisan cuando algo ha cambiado a peor.
- Panel en vivo + informe mensual — una vista en tiempo real del % de uptime, los incidentes y lo que detectamos, resumido cada mes para que tenga un registro claro.
Qué muestran el panel y el informe
El panel en vivo le da un estado de salud de un vistazo: el porcentaje de uptime actual, cualquier incidente abierto o reciente, y las últimas comprobaciones. El informe mensual lo agrega en el uptime del periodo, un registro de incidentes y una breve nota sobre cualquier cosa que merezca su atención — de modo que incluso un propietario poco implicado se mantiene informado.
Un límite honesto
Monitoring Plan es monitorización y alerta únicamente. Son los ojos sobre su tienda, no las manos — el trabajo de reparación real se presupuesta por separado, o se gestiona con las horas de experto mensuales de Store Care Plan. Mantenemos esa línea clara a propósito, para que usted sepa siempre exactamente por qué está pagando. La cobertura en horario laboral para los eventos señalados es de lun.–vie., 09:00–18:00 CET.
Si su tienda es estable y simplemente quiere un sistema de alerta temprana fiable, Monitoring Plan es el punto de partida adecuado. Cuando prefiera que los pequeños problemas se le resuelvan a medida que aparecen, Store Care Plan es el paso natural hacia arriba — incluye todo lo de aquí más un bloque de horas de experto cada mes.
Monitoring Plan cubre monitorización y alerta — son los ojos sobre su tienda, no las manos. Cuando algo se rompe, se le avisa de inmediato; la reparación en sí se presupuesta luego por separado, o se cubre con las horas de experto mensuales de Store Care Plan. Somos deliberados con esta distinción para que nunca haya sorpresas sobre lo que el plan hace y no hace.
Cómo funciona en la práctica
Cuando una comprobación falla — su frontal o su checkout se cae, una tarea cron se detiene, o aflora un error fatal — Monitoring Plan lanza una alerta y registra el incidente en su panel en vivo. Usted se entera del problema en el momento en que ocurre en lugar de por un cliente frustrado. Lo que Monitoring Plan no hace es iniciar sesión automáticamente y reparar el problema; el diagnóstico y la resolución son trabajo aparte.
Sus opciones cuando algo necesita arreglo
- Presupuestar el arreglo por separado — acotamos el problema concreto y usted aprueba el trabajo antes de que se haga nada.
- Subir a Store Care Plan — si prefiere no lidiar con presupuestos por incidente, Store Care Plan incluye todo lo de Monitoring Plan más 2 horas de trabajo de experto al mes (tope 6h) para gestionar los pequeños problemas — configuración, cache, cron, ajustes de módulos y errores de PHP evidentes — a medida que aparecen.
Véalo así: Monitoring Plan está diseñado para alertarle rápido y le da un registro claro de lo ocurrido. Store Care Plan añade a alguien que actúa sobre las cosas pequeñas sin un nuevo presupuesto cada vez. Muchos propietarios de tienda empiezan con Monitoring Plan por tranquilidad y suben a Store Care Plan cuando se dan cuenta de cuánto mantenimiento rutinario preferirían delegar. En cualquier caso, los proyectos mayores — una nueva función, un módulo personalizado, una migración — siempre se acotan y presupuestan por su cuenta, de modo que la línea entre la monitorización y el trabajo práctico se mantiene limpia y honesta.
Una caída dispara una alerta instantánea. Un evento P1 — que su frontal o su checkout estén caídos — se señala de inmediato en horario laboral (lun.–vie., 09:00–18:00 CET), de modo que se entera en el momento en que ocurre en lugar de por un cliente frustrado o un pedido perdido.
Qué cuenta como P1
P1 se reserva para las cosas que le cuestan ventas directamente: que su frontal no cargue, o que el checkout falle de modo que los clientes no puedan completar un pedido. Estas son las señales de máxima prioridad en su panel precisamente porque cada minuto de una caída importa para una tienda PrestaShop.
Cómo funciona la alerta
Monitoring Plan comprueba su frontal y su checkout de forma continua. En el momento en que una comprobación falla, se lanza una alerta y el incidente se registra en su panel en vivo con marca de tiempo. Eso le da dos cosas a la vez: un aviso inmediato, y un registro permanente al que puede volver — útil para detectar patrones o confirmar exactamente cuándo empezó y terminó un problema.
Una nota honesta
Monitoring Plan le avisa rápido — esa es su promesa central — pero es un plan de monitorización y alerta, así que la reparación en sí se presupuesta por separado o se gestiona con las horas mensuales de Store Care Plan. No prometemos cero caídas; ningún proveedor honesto puede. Lo que sí prometemos es que usted no será el último en enterarse. Las comprobaciones continuas más la señalización inmediata durante la franja laboral significan que los problemas afloran en cuanto las comprobaciones continuas los detectan, no después de que un cliente se tome el tiempo de quejarse — lo cual suele ser la diferencia entre una recuperación rápida y una tarde de pedidos perdida.
Monitoring Plan es ideal para tiendas que son estables y simplemente quieren ojos sobre ellas — una red de seguridad fiable sin un bloque mensual de horas de trabajo. Si su tienda PrestaShop funciona con fluidez la mayor parte del tiempo y lo que principalmente quiere es asegurarse de que se enterará rápido de un problema, este es el encaje adecuado.
Sacará el máximo partido de Monitoring Plan si…
- Su tienda está consolidada y razonablemente libre de problemas, y rara vez necesita cambios prácticos.
- Quiere monitorización continua de uptime, cron y salud del core con alertas inmediatas en horario laboral (lun.–vie., 09:00–18:00 CET).
- Prefiere pagar el arreglo ocasional como un presupuesto separado y aprobado antes que cargar con un presupuesto mensual de horas que quizá no use.
- Valora un panel en vivo y un informe mensual como un registro claro y honesto de la salud de su tienda.
Cuándo subir de nivel en su lugar
Si además quiere que los pequeños arreglos se le gestionen — configuración, cache, cron, ajustes de módulos y errores de PHP evidentes — sin presupuestar cada uno, suba a Store Care Plan. Store Care Plan incluye todo lo de Monitoring Plan más 2 horas de trabajo de experto al mes (tope 6h, sin acumulación), de modo que el mantenimiento rutinario se hace en lugar de acumularse. Y si su prioridad es la visibilidad en buscadores en lugar del uptime, SEO Care Plan se centra en la higiene técnica de SEO en su lugar.
En resumen: elija Monitoring Plan cuando quiera una alerta temprana fiable y un registro, y le resulte cómodo que los arreglos se presupuesten según haga falta. Elija Store Care Plan cuando le gustaría que alguien mantuviera discretamente en orden las cosas pequeñas cada mes. Muchos propietarios empiezan con Monitor y suben de nivel cuando ven cuánto trabajo rutinario preferirían delegar.
Store Care Plan mantiene su tienda PrestaShop sana y le da una persona real para gestionar las cosas pequeñas que de otro modo se acumulan. Es el punto medio práctico de nuestros Care Plans: monitorización más un bloque mensual de horas de experto, de modo que los problemas se detectan y se resuelven.
Qué incluye
- Todo lo de Monitoring Plan — monitorización continua de uptime, cron y salud del core con alertas inmediatas, de modo que siempre sabe cuándo algo va mal.
- Comprobaciones de seguridad y rendimiento — avisos de módulos y configuración más vigilancia de regresiones, de modo que un cambio que degrada silenciosamente su tienda queda señalado.
- 2 horas de trabajo de experto al mes (tope 6h) — los arreglos de configuración, cache, cron y módulos, y los errores de PHP evidentes, que de otro modo se acumulan en una lista pendiente.
- Panel en vivo + informe mensual — puntuaciones de salud, incidentes, acciones realizadas y horas usadas, para que vea exactamente adónde fue su tiempo.
Cómo funcionan las horas
Store Care Plan incluye 2 horas de experto al mes. Las horas no se acumulan, y cualquier exceso se factura en incrementos de 15 minutos hasta un tope mensual de 6 horas — de modo que un mes ajetreado nunca se le descontrola. Las horas están orientadas al pequeño mantenimiento recurrente que mantiene una tienda en funcionamiento; un proyecto mayor (una nueva función, un módulo personalizado, una migración) se acota y se presupuesta por su cuenta.
Objetivos de servicio e informes
Store Care Plan lleva un objetivo de uptime monitorizado del 99,5% y apunta a una respuesta en 3 horas hábiles para un incidente P1 — frontal o checkout caído — durante la franja laboral (lun.–vie., 09:00–18:00 CET). El informe mensual lo ata todo: muestra sus puntuaciones de salud y su tendencia, los incidentes ocurridos, las acciones concretas realizadas en su tienda, y cómo se usaron las horas mensuales — un registro transparente en lugar de un vago “todo bien”.
Store Care Plan es adecuado para propietarios que quieren su tienda vigilada y el trabajo rutinario gestionado discretamente, sin levantar un presupuesto aparte cada vez que algo pequeño necesita atención. Si su prioridad es en cambio la visibilidad en buscadores, combínelo con SEO Care Plan, que se centra en la higiene técnica de SEO.
Store Care Plan incluye 2 horas de experto al mes. Las horas no se acumulan, y cualquier exceso se factura en incrementos de 15 minutos hasta un tope mensual de 6 horas — de modo que un mes ajetreado nunca se le descontrola, y siempre conoce de antemano su exposición máxima.
Cómo se estructuran las horas
- 2 horas incluidas cada mes — su asignación fija para el mantenimiento rutinario.
- Sin acumulación — cada mes empieza de cero; el tiempo no usado no se guarda. Las horas están diseñadas para mantener su tienda al día, no para acumular un saldo.
- Exceso en incrementos de 15 minutos — si un mes necesita más de las 2 horas incluidas, el trabajo adicional se factura con precisión, en bloques de cuarto de hora en lugar de redondearse a la hora.
- Tope de 6 horas — el total de horas mensuales tiene un tope de 6, de modo que incluso un mes inusualmente exigente tiene un límite predecible.
Para qué son las horas — y para qué no
Las horas cubren el pequeño trabajo recurrente que mantiene sana una tienda PrestaShop: configuración, cache, cron, ajustes de módulos y errores de PHP evidentes. Están deliberadamente acotadas al mantenimiento constante que de otro modo se acumula.
Una pieza de trabajo mayor — una nueva función, un módulo personalizado, una migración de datos, un rediseño — queda fuera de las horas mensuales y se acota y se presupuesta por su cuenta. Eso mantiene la asignación mensual enfocada y su factura predecible: mantenimiento rutinario dentro del plan, proyectos presupuestados con transparencia y aprobados antes de empezar.
El seguimiento de todo
Cada acción y las horas que consumió quedan registradas en su panel en vivo y resumidas en el informe mensual, de modo que puede ver exactamente cómo se usaron las 2 horas y si se aplicó algún exceso. Si necesita de forma sistemática más de lo que el tope permite, esa es una señal clara de que merece la pena acotar un encargo dedicado en lugar de estirar un plan de mantenimiento.
Para un incidente P1 — su frontal o su checkout caído — Store Care Plan apunta a una respuesta en 3 horas hábiles (lun.–vie., 09:00–18:00 CET). El plan también lleva un objetivo de uptime monitorizado del 99,5%, de modo que los problemas se detectan y se actúa sobre ellos con rapidez en lugar de dejarlos arrastrarse.
Qué significa P1
P1 se reserva para los problemas que le impiden directamente operar: que su frontal no cargue, o que el checkout falle de modo que los clientes no puedan completar un pedido. Estos son los eventos de máxima prioridad porque cada minuto importa para una tienda PrestaShop, y son aquello en torno a lo que se construye el objetivo de respuesta.
Cómo funciona la respuesta junto a la monitorización
Store Care Plan incluye todo lo de Monitoring Plan, así que un evento P1 se detecta y se alerta en el momento en que ocurre mediante comprobaciones continuas. El objetivo de respuesta de 3 horas hábiles rige entonces con qué rapidez empezamos a trabajar el incidente durante la franja laboral. La detección es inmediata; el objetivo de respuesta cubre el inicio de la atención práctica.
Una palabra honesta sobre el uptime
El objetivo de uptime monitorizado del 99,5% es exactamente eso — un objetivo frente al que monitorizamos e informamos, no una promesa de cero caídas. Ningún proveedor honesto puede garantizar que una tienda nunca se caiga. A lo que Store Care Plan sí se compromete es a una detección rápida y a una ventana de respuesta definida, además de un registro transparente de los incidentes y de cómo se gestionaron en su informe mensual.
Recuerde que el trabajo de resolución mensual se nutre de sus 2 horas de experto (tope 6h, sin acumulación); una recuperación o un proyecto genuinamente grande más allá de los arreglos rutinarios se acota y se presupuesta por separado. La combinación — monitorización continua, un objetivo de respuesta P1 de 3 horas hábiles y un objetivo de uptime monitorizado del 99,5% — significa que los problemas afloran y se abordan con rapidez en lugar de descubrirse tarde y dejarse enconar.
Las horas mensuales de Store Care Plan cubren las cosas pequeñas que mantienen sana una tienda: configuración, cache, cron, ajustes de módulos y errores de PHP evidentes. Es el mantenimiento constante y poco vistoso que de otro modo se acumula silenciosamente y, si se deja estar, se convierte en un problema mucho mayor.
Trabajo típico que cubren las horas
- Configuración — ajustar los parámetros de PrestaShop y de los módulos, corregir opciones que se han desviado, ordenar los parámetros de la tienda.
- Cache — vaciar y reconstruir la cache cuando provoca páginas obsoletas o un comportamiento extraño, y resolver fallos relacionados con la cache.
- Cron — volver a poner en marcha tareas programadas detenidas o rotas para que los trabajos en segundo plano hagan su labor.
- Ajustes de módulos — corregir módulos mal configurados y los pequeños conflictos que afloran tras las actualizaciones.
- Errores de PHP evidentes — resolver los fatales y avisos inequívocos que degradan una tienda.
Qué queda fuera de las horas mensuales
Cualquier cosa mayor — una nueva función, un módulo personalizado, un cambio de tema, una migración de datos — se acota y se presupuesta por separado. Eso es intencionado: mantiene las horas mensuales enfocadas en mantenerle funcionando con fluidez, y mantiene su factura predecible, con el trabajo mayor presupuestado con transparencia y aprobado antes de empezar.
Cómo se gestiona el tiempo
Usted tiene 2 horas de experto al mes. Las horas no se acumulan, el exceso se factura en incrementos de 15 minutos, y el total tiene un tope de 6 horas al mes — de modo que incluso un mes intenso se mantiene predecible. Cada tarea y las horas que usó se registran en su panel en vivo y se resumen en el informe mensual, de modo que puede ver con precisión qué se hizo y adónde fue el tiempo. Si descubre que llega con regularidad al tope con trabajo rutinario, eso suele ser señal de que merece la pena acotar un encargo dedicado en lugar de estirar un plan de mantenimiento — y se lo diremos con honestidad.
SEO Care Plan mantiene sólidos los cimientos técnicos del SEO de su PrestaShop a medida que su catálogo y su contenido siguen cambiando. Es un plan continuo de higiene técnica: una comprobación periódica, horas para arreglar lo que encuentra, y una visión honesta y priorizada de qué hacer a continuación — incluyendo cuándo no necesita gastar.
Qué incluye
- Auditoría técnica de SEO mensual — indexación, canonicals, metadatos, contenido duplicado, datos estructurados y Core Web Vitals, de modo que las señales técnicas de las que dependen los buscadores se mantienen limpias a medida que su tienda evoluciona.
- Higiene de SEO de categorías/productos — mantener las páginas de categoría y producto técnicamente sólidas, más recomendaciones de enlazado interno para reforzar cómo se conectan las páginas.
- 4 horas al mes (tope 8h) — tiempo para arreglar los pequeños problemas de SEO que la auditoría saca a la luz, antes de que se acumulen.
- Panel de SEO en vivo + informe mensual — la tendencia de su puntuación en el tiempo, los arreglos aplicados, y una lista priorizada de “qué hacer a continuación”.
Qué contienen el panel y el informe
El panel en vivo rastrea la salud técnica de su SEO y cómo va evolucionando. El informe mensual añade el detalle: qué encontró la auditoría, qué problemas se arreglaron con las horas incluidas, y una lista de “qué hacer a continuación” claramente ordenada para que el trabajo más valioso resulte evidente. Y, lo que es crucial, le dice con honestidad cuándo no necesita gastar — no fabricaremos trabajo para llenar las horas.
Cómo funcionan las horas
SEO Care Plan incluye 4 horas al mes para arreglar pequeños problemas de SEO, hasta un tope de 8 horas; las horas no se acumulan. El foco es mantener al día su higiene de SEO en lugar de almacenar tiempo.
Un límite honesto
SEO Care Plan trata sobre la higiene técnica de SEO — no ofrece ninguna garantía de posiciones ni de tráfico, porque ningún proveedor honesto puede prometerlas. Y no es un plan de uptime: para la monitorización de frontal/checkout y la respuesta a caídas, combínelo con Store Care Plan (o elija Complete Care Plan, que incluye ambos). Lo que SEO Care Plan sí hace es detectar pronto las regresiones técnicas, de modo que unos cimientos sólidos sigan siéndolo.
SEO Care Plan incluye 4 horas al mes para arreglar pequeños problemas de SEO, hasta un tope de 8 horas. Las horas no se acumulan — cada mes es una asignación nueva enfocada en mantener al día su higiene de SEO en lugar de almacenar tiempo.
Cómo se estructuran las horas
- 4 horas incluidas cada mes — su asignación fija para arreglar los pequeños problemas técnicos de SEO que la auditoría mensual saca a la luz.
- Sin acumulación — el tiempo no usado no se traslada. El plan trata de mantenerse al día mes a mes, no de acumular un saldo que quizá nunca use.
- Tope de 8 horas — de modo que incluso un mes con más cosas que arreglar tiene un límite predecible.
Para qué son las horas
Las horas están orientadas al trabajo constante y pequeño de higiene de SEO que mantiene limpios sus cimientos técnicos a medida que cambian su catálogo y su contenido: arreglar problemas de indexación y canonicals, ordenar metadatos, abordar contenido duplicado, corregir datos estructurados, actuar sobre las recomendaciones de enlazado interno, y resolver los problemas de las páginas de categoría y producto que la auditoría señala. Están deliberadamente acotadas al mantenimiento en lugar de a grandes campañas.
Dónde encaja el trabajo mayor
Un esfuerzo grande y puntual — un diagnóstico profundo, un proyecto importante de contenido o estructural — queda fuera de las horas mensuales y se gestiona por separado; una Auditoría SEO puntual es la rampa de acceso natural para ese tipo de inmersión profunda. SEO Care Plan mantiene luego los cimientos sanos mes tras mes.
Una nota honesta sobre la regla de “sin acumulación”: no está ahí para hacerle perder tiempo — refleja para qué sirve el plan. Si genuinamente no hay nada urgente que arreglar en un mes dado, el informe mensual lo dirá con claridad. Preferimos decírselo a inventar trabajo para consumir las horas. Y, para dejar las expectativas claras, SEO Care Plan no hace ninguna promesa sobre posiciones ni tráfico; mantiene sólido su SEO técnico, que es el cimiento del que dependen esos resultados.
La respuesta estándar bajo SEO Care Plan es de 1 día hábil; un problema crítico — por ejemplo un noindex accidental en páginas clave — se gestiona en 8 horas hábiles.
Qué cuenta como crítico
Crítico significa un problema técnico de SEO que puede costarle visibilidad activamente si se deja sin abordar — el ejemplo más claro siendo un noindex accidental en páginas importantes, que puede sacarlas silenciosamente de los resultados de búsqueda. Problemas así reciben la gestión más rápida de 8 horas hábiles; los asuntos rutinarios siguen la respuesta estándar de 1 día hábil.
¿Está cubierta la caída? No — y eso es deliberado
SEO Care Plan no es un plan de uptime. Vigila y mantiene su SEO técnico; no monitoriza su frontal ni su checkout en busca de caídas, y no lleva un objetivo de uptime ni un SLA de respuesta a caídas. Mantenemos esa distinción clara para que usted nunca dependa del plan equivocado para la tarea equivocada.
Si necesita monitorización de frontal/checkout y respuesta a caídas, combine SEO Care Plan con Store Care Plan — que añade monitorización continua de uptime, cron y salud del core, un objetivo de uptime monitorizado del 99,5% y una respuesta P1 en 3 horas hábiles. Como alternativa, elija Complete Care Plan, que incluye tanto SEO Care Plan como la parte de uptime en un único plan.
El resumen honesto
SEO Care Plan le da ventanas de respuesta definidas para el trabajo de SEO — 1 día hábil estándar, 8 horas hábiles para problemas críticos como un noindex accidental — y mantiene sano su SEO técnico. Para todo lo que tiene que ver con que su tienda realmente siga en línea, ese es el trabajo de Store Care Plan. Combinar ambos (o usar Complete Care Plan) cubre las dos bases con limpieza.
Los dos trabajan a escalas y horizontes temporales distintos. La Auditoría SEO es un diagnóstico profundo y puntual — un examen minucioso de su tienda en un único momento, que culmina en un plan priorizado. SEO Care Plan es la relación continua: una comprobación técnica mensual, horas para arreglar lo que encuentra, y una lista honesta de “qué hacer a continuación” a medida que su tienda sigue cambiando.
La Auditoría SEO puntual
Una Auditoría SEO es un diagnóstico profundo y puntual. Examina su SEO técnico en detalle y le entrega un plan priorizado de qué abordar. Es la forma ideal de entender en qué punto se encuentra y qué importa más — una instantánea completa y una hoja de ruta en ese momento. Lo que no hace es seguir vigilando después; una vez entregada, es una imagen fija de una tienda que inevitablemente seguirá evolucionando.
SEO Care Plan, el plan continuo
SEO Care Plan convierte eso en una disciplina continua. Cada mes ejecuta una auditoría técnica de SEO (indexación, canonicals, metadatos, contenido duplicado, datos estructurados, Core Web Vitals), le da 4 horas al mes (tope 8h, sin acumulación) para arreglar los pequeños problemas que saca a la luz, y proporciona un panel en vivo más un informe mensual con una lista priorizada de “qué hacer a continuación”. Como su catálogo y su contenido cambian constantemente, esto es lo que detecta las regresiones técnicas antes de que deshagan silenciosamente el trabajo anterior.
Cómo encajan
Son complementarios, no competidores. Una Auditoría SEO puntual es la rampa de acceso perfecta — la inmersión profunda que establece su línea base y sus prioridades. SEO Care Plan mantiene luego esos cimientos sólidos mes tras mes, arreglando pronto las cosas pequeñas y diciéndole con honestidad cuándo no hay nada urgente que hacer.
Una salvedad honesta se aplica a ambos: ninguno promete posiciones ni tráfico. La Auditoría diagnostica y el plan Care mantiene su SEO técnico — el cimiento del que dependen esos resultados — en lugar de garantizar un resultado que ningún proveedor honesto puede prometer.
Growth Care Plan es una iguala mensual que aporta disciplina a la parte de su tienda PrestaShop que la mayoría de los equipos dejan silenciosamente a la deriva: la capa de datos de la que depende cada decisión de marketing. Está construida en torno a una idea sencilla — antes de gastar más en anuncios o de perseguir más tráfico, los números frente a los que mide tienen que ser fiables. Growth Care Plan mantiene honestos el tracking, los feeds y la medición de conversiones, y le da una segunda opinión recurrente sobre dónde se está malgastando el presupuesto.
Qué incluye cada mes
- Salud de GA4 y del tracking de eventos — comprobamos que GA4 se dispara correctamente, que los eventos clave de e-commerce (vista, añadir al carrito, checkout, compra) están presentes y no se cuentan por duplicado, y que la validación del tracking de conversiones confirma que los valores que registran sus plataformas publicitarias coinciden realmente con pedidos reales.
- Revisión del feed de productos — revisamos el feed en busca de errores y desaprobaciones, señalamos atributos ausentes o mal formados, y ejecutamos una comprobación de sensatez de los anuncios de Google y sociales para que su catálogo sea elegible y esté representado correctamente.
- Recomendaciones de campañas y páginas de aterrizaje — consejo honesto y priorizado sobre estructura, segmentación y páginas de aterrizaje, incluyendo consejo de encaje de módulos cuando un módulo de PrestaShop resolvería un problema mejor que un trabajo a medida.
- 4 horas al mes de tiempo práctico (tope 8h, sin acumulación) para pequeños arreglos de tracking y feeds — el tipo de correcciones que de otro modo se quedan en una lista pendiente durante meses.
Cómo funciona
Todo se reporta en un panel de marketing en vivo más un informe mensual. El panel muestra el estado del tracking y del feed de un vistazo; el informe resume qué comprobamos, qué cambiamos dentro de las horas incluidas, y las recomendaciones que más importan. Incluye deliberadamente una sección de “dejar de hacer esto” — el gasto, los segmentos o las tácticas que los datos sugieren que debería recortar — porque eliminar el desperdicio suele ser la victoria más rápida.
Es importante: Growth Care Plan trata del cimiento, no de la gestión diaria de campañas o pujas, y nunca garantiza el ROAS ni las aprobaciones de las plataformas publicitarias. Nos aseguramos de que la medición esté limpia y el feed esté sano para que usted — o su comprador de medios — pueda tomar decisiones a partir de datos en los que realmente puede confiar. Las tiendas que quieren que las operaciones y el SEO se gestionen en la misma relación pueden subir a Complete Care Plan, que combina Store Care Plan, SEO Care Plan y Growth Care Plan bajo un único equipo responsable.
No — Growth Care Plan no gestiona sus campañas y nunca garantiza el ROAS ni las aprobaciones de las plataformas publicitarias. Está deliberadamente acotado en torno al cimiento en lugar de a la gestión diaria de campañas o pujas, y mantenemos esa frontera honesta porque es la única forma responsable de hablar de medios pagados.
Por qué no prometemos resultados
El retorno de la inversión publicitaria depende de factores que ninguna agencia controla: sus márgenes, sus precios frente a los competidores, la estacionalidad, la dinámica de la subasta, la creatividad y los propios sistemas de aprobación y revisión de las plataformas publicitarias. Cualquiera que garantice una cifra de ROAS o aprobaciones garantizadas o bien está apostando con su presupuesto o bien está absorbiendo silenciosamente el riesgo en su precio. Preferimos ser francos con usted. Lo mismo se aplica a las aprobaciones de las plataformas — Google y las redes sociales deciden la elegibilidad, y no podemos anular su revisión.
Qué entrega realmente Growth Care Plan
- Revisión de la salud del tracking — integridad de GA4 y de los eventos, más validación del tracking de conversiones para que los números hacia los que sus campañas optimizan sean reales, no conversiones fantasma o duplicadas.
- Revisión del feed de productos — detectar errores y desaprobaciones antes de que estrangulen silenciosamente el alcance, y una comprobación de sensatez de los anuncios de Google/sociales.
- Recomendaciones honestas — incluyendo una visión de “dejar de hacer esto” sobre dónde se está fugando el presupuesto, y consejo de encaje de módulos donde un módulo de PrestaShop es la mejor respuesta.
El valor es simple: cuando su medición está limpia, cada decisión que toma — presupuesto, pujas, audiencias, páginas de aterrizaje — descansa sobre datos en los que puede confiar en lugar de sobre conjeturas. Ese cimiento es lo que hace que la gestión de campañas (ya la haga internamente o con un comprador de medios) funcione de verdad. Si quiere un único equipo responsable de las operaciones, el SEO y el cimiento del tracking a la vez, Complete Care Plan combina los tres, con sus horas dedicadas a operaciones, SEO, tracking y feeds — no a gestionar campañas.
Growth Care Plan lleva un compromiso de respuesta claro en dos niveles para que siempre sepa qué esperar.
- Respuesta estándar: 1 día hábil. Para solicitudes rutinarias — una pregunta sobre tracking, un retoque de feed, una recomendación que comentar, o un pequeño arreglo dentro de sus horas incluidas — acusamos recibo y empezamos a trabajar en un día hábil.
- Fallo de tracking en campaña de pago activa: en 8 horas hábiles. Cuando el tracking se rompe en una campaña de pago en directo, cada hora de datos rotos cuesta dinero real — el presupuesto sigue gastándose mientras su medición está a ciegas. Estos casos se escalan y se gestionan en 8 horas hábiles.
Por qué importa el nivel más rápido
Una etiqueta de GA4 rota, un píxel de conversión que se dispara mal o una desaprobación de feed durante una campaña activa no solo pierde un día de informes — puede sesgar silenciosamente la optimización de la plataforma, desorientar sus pujas y malgastar gasto hasta que se detecta. El nivel de 8 horas hábiles existe específicamente para ese escenario: los momentos en los que la integridad de la medición está sangrando dinero y esperar un día entero no es aceptable.
Estos son compromisos de respuesta — con qué rapidez intervenimos y empezamos a trabajar — no promesas de que cada problema se resuelva al instante, ya que algunos arreglos dependen de plataformas de terceros (Google, Meta, GA4) y de sus propios plazos de revisión. Las 4 horas al mes (tope 8h, sin acumulación) incluidas cubren la remediación práctica de los pequeños arreglos de tracking y feeds. Si su tienda también necesita respuesta a incidentes operativos, Complete Care Plan añade un nivel de 3 horas hábiles para incidentes de frontal y checkout y un complemento opcional de emergencia 24/7.
Growth Care Plan está hecho para tiendas que gastan activamente en anuncios — Google, Shopping o sociales — y quieren mantener honesta la capa de datos que sostiene ese gasto. Si está invirtiendo presupuesto real en adquisición de pago, el coste de un mal tracking o de un feed silenciosamente desaprobado se multiplica rápido, y este plan existe para detener esa deriva.
Encaja bien si…
- Ejecuta campañas de pago y necesita un tracking de conversiones preciso y validado para que sus informes y la optimización de las plataformas trabajen a partir de números reales.
- Quiere un feed de productos limpio — errores y desaprobaciones detectados pronto en lugar de descubiertos cuando cae el alcance.
- Valora una segunda opinión mensual sobre dónde se está malgastando el presupuesto, incluyendo una visión explícita de “dejar de hacer esto”, más consejo de encaje de módulos para su configuración de PrestaShop.
- Usted (o su comprador de medios) gestiona la campaña y las pujas en sí, y solo necesita que el cimiento se mantenga sólido — porque Growth Care Plan no gestiona campañas ni garantiza el ROAS.
Quizá quiera más si…
Si además quiere que las operaciones (monitorización, comprobaciones de salud del core y pequeños arreglos como configuración, cache, cron y ajustes de módulos) y el SEO técnico se gestionen en la misma relación, Complete Care Plan combina Store Care Plan, SEO Care Plan y Growth Care Plan en un único equipo responsable con 10 horas al mes, una revisión estratégica trimestral y un único informe ejecutivo — en lugar de ejecutar tres planes en paralelo. Growth Care Plan le permite empezar de forma acotada con solo el cimiento de datos de marketing; Complete Care Plan es el paso hacia arriba cuando quiere toda la tienda bajo un mismo techo. Las 4 horas al mes (tope 8h, sin acumulación) incluidas mantienen los pequeños arreglos en marcha sin un presupuesto aparte cada vez.
Complete Care Plan combina Store Care Plan, SEO Care Plan y Growth Care Plan en una única relación responsable, de modo que un solo equipo es responsable de toda la tienda en lugar de tres proveedores que poseen cada uno una parte. Está diseñado para tiendas que han superado el soporte fragmentado y quieren que las operaciones, el SEO técnico y el cimiento de datos de marketing se mantengan bajo una revisión periódica y coordinada.
Qué incluye
- Todo lo de Store Care Plan — monitorización, comprobaciones de salud del core y pequeños arreglos operativos como configuración, cache, cron, ajustes de módulos y errores de PHP evidentes.
- Todo lo de SEO Care Plan — salud técnica del SEO bajo revisión para que la tienda siga siendo rastreable, indexable y estructuralmente sólida.
- Todo lo de Growth Care Plan — salud de GA4 y del tracking de eventos, validación del tracking de conversiones, revisión del feed de productos y recomendaciones honestas.
- 10 horas al mes (tope 18h, sin acumulación) compartidas en todo ello — las horas van a operaciones, SEO, tracking y feeds, no a gestionar campañas publicitarias.
- Revisión estratégica trimestral, más orientación de encaje de módulos y de tema para su stack de PrestaShop.
Cómo funciona
En lugar de tres informes desconectados, recibe un panel ejecutivo más un informe mensual que lo reúne todo: cada puntuación de salud, el libro de horas que muestra exactamente adónde fue el tiempo, las acciones realizadas, los riesgos abiertos y una hoja de ruta para el mes siguiente. Eso significa una única lista de prioridades — el equipo decide dónde crean más valor las horas de este mes entre operaciones, SEO y tracking, en lugar de tres planes compitiendo por la atención.
Conviene tener claro lo que Complete Care Plan no es: no gestiona campañas, no administra pujas, ni garantiza posiciones, tráfico o ROAS. Como en los planes Care individuales, el tono es mesurado y honesto — mantiene fuertes los cimientos y le dice con claridad qué merece la pena hacer a continuación. Si solo necesita una de estas áreas, los planes individuales (Store Care Plan, SEO Care Plan, Growth Care Plan) le permiten empezar de forma más acotada y subir de nivel más tarde.
Complete Care Plan incluye 10 horas al mes (sin acumulación, tope 18h) de tiempo práctico, compartidas y distribuidas entre operaciones, SEO, tracking y feeds. Como es un único bloque compartido en lugar de tres asignaciones separadas, el equipo puede dirigir las horas allá donde creen más valor en un mes dado — un arreglo de SEO técnico un mes, una reparación de tracking o una limpieza de feed al siguiente — sin malabares con tres presupuestos. Las horas van a trabajo operativo, de SEO, de tracking y de feeds; no se gastan en gestionar campañas publicitarias.
SLA de respuesta
- Incidentes P1 de frontal / checkout — en 3 horas hábiles. Cuando la tienda está caída o los clientes no pueden completar el pago, los ingresos sangran por minutos, así que estos reciben la intervención más rápida.
- Problemas de SEO / marketing — en 1 día hábil. El trabajo importante pero no crítico-por-hora para los ingresos — señales de posicionamiento, preguntas de tracking, ajustes de feed — se acusa y se inicia en un día hábil.
Uptime y cobertura ininterrumpida
Complete Care Plan apunta a un uptime monitorizado del 99,7%. Eso es un objetivo de monitorización y respuesta — vigilamos la disponibilidad de forma continua y respondemos frente a los SLA anteriores — no una garantía de cero caídas, ya que el hosting, las redes y los servicios de terceros pueden fallar todos fuera de nuestro control. Para tiendas que necesitan cobertura fuera del horario laboral, hay un complemento opcional de emergencia 24/7 que extiende la respuesta a incidentes a un servicio ininterrumpido.
Estos son compromisos de respuesta — con qué rapidez intervenimos y empezamos a trabajar — con la remediación real nutriéndose de las horas mensuales (y del tope de 18h para meses inusualmente intensos). Es el mismo encuadre honesto que los planes Care individuales: niveles claros, un objetivo de uptime mesurado y ninguna promesa de resultados.
Las áreas de servicio son los mismos componentes básicos en ambos casos — la diferencia es la responsabilidad y la coordinación. Compre Store Care Plan, SEO Care Plan y Growth Care Plan por separado y obtiene tres relaciones, tres listas pendientes y tres informes, cada uno optimizando su propio rincón. Con Complete Care Plan obtiene un único equipo responsable de toda la tienda, lo que cambia cómo se desarrolla realmente el trabajo.
Una lista de prioridades, no tres
En lugar de tres planes compitiendo por la atención, Complete Care Plan produce una única lista de prioridades y un informe ejecutivo — cada puntuación, el libro de horas, las acciones realizadas, los riesgos abiertos y la hoja de ruta del mes siguiente en un mismo lugar. Cuando algo importa más este mes que el anterior, el equipo simplemente dirige allí el esfuerzo compartido, en lugar de que sea usted quien arbitre entre proveedores separados.
Un bloque de horas combinado y más flexible
Las 10 horas al mes de Complete Care Plan (tope 18h, sin acumulación) están en un único bloque entre operaciones, SEO, tracking y feeds. Eso es más flexible que tres asignaciones fijas: un mes intenso en SEO técnico y ligero en tracking simplemente usa las horas donde hacen falta, en lugar de dejar tiempo varado en un plan mientras otro se queda corto.
Estrategia que lo une todo
La revisión estratégica trimestral conecta operaciones, SEO y marketing en una única dirección de marcha — por ejemplo, asegurándose de que un cambio de SEO, un arreglo de tracking y una actualización operativa se refuercen entre sí en lugar de tirar en direcciones distintas. Comprando los planes por separado, nadie posee esa visión transversal.
En resumen: por separado, obtiene tres servicios competentes pero aislados; combinados, obtiene un único equipo responsable, un informe, un bloque de horas compartido y flexible y una visión estratégica trimestral. Complete Care Plan sigue sin ofrecer garantías de resultados — ni posiciones, ni tráfico, ni ROAS prometidos — simplemente hace que todo el conjunto sea más fácil de gestionar desde un único lugar. Si genuinamente solo necesita un área, empezar con el plan individual es perfectamente sensato.
Complete Care Plan es para tiendas serias que quieren un único equipo responsable de mantener bajo revisión periódica los cimientos de operaciones, SEO técnico, tracking y feeds — y una voz honesta sobre qué merece la pena hacer a continuación entre operaciones, SEO y marketing. Si ha llegado al punto en que hacer malabares con proveedores separados (o hacerlo todo usted mismo) le cuesta más en coordinación de lo que ahorra, este es el plan que lo reúne.
Encaja bien si…
- Gestiona una tienda PrestaShop de ingresos significativos donde una caída, un checkout roto o un fallo de tracking tienen un coste real, y quiere unos SLA de respuesta claros que lo respalden.
- Quiere un único equipo responsable en operaciones, SEO técnico y la capa de datos de marketing — una única lista de prioridades y un informe ejecutivo en lugar de tres desconectados.
- Valora una revisión estratégica trimestral que una operaciones, SEO y marketing, más orientación de encaje de módulos y de tema para su stack.
- Aprecia un socio honesto y mesurado — uno que mantiene fuertes los cimientos, señala los riesgos con claridad, y no hace ninguna promesa sobre posiciones, tráfico o ROAS.
Quizá prefiera empezar de forma más acotada si…
Si ahora mismo solo necesita una de estas áreas, los planes Care individuales le permiten empezar donde está el dolor: Store Care Plan para la estabilidad operativa, SEO Care Plan para la salud técnica del SEO, o Growth Care Plan para el cimiento de datos de marketing. Siempre puede subir a Complete Care Plan más tarde, cuando quiera todo bajo un mismo techo. Las 10 horas al mes del plan combinado (tope 18h, sin acumulación), compartidas entre todas las áreas, y su único panel ejecutivo son lo que lo convierte en el hogar natural para tiendas que han superado el ocuparse de estas cosas de una en una — con las horas dedicadas a operaciones, SEO, tracking y feeds en lugar de a gestionar campañas.
hide a las referencias de transportista seleccionadas.hide elimina el transportista objetivo cuando su regla coincide. show_only conserva solo los transportistas objetivo cuando al menos uno de ellos está disponible en ese momento; las reglas coincidentes se ordenan por prioridad y gana la acción show-only válida con mayor prioridad.actionCartGetPackageShippingCost. En PrestaShop 1.7 y 8, el módulo expone los resultados de recargos y envío gratis en etiquetas, datos del frontend y salida del simulador, pero no modifica el coste de envío nativo cobrado.free_over compara su umbral con el subtotal del carrito sin impuestos. Los importes de recargo fijo también se configuran sin impuestos y pueden convertirse de la moneda predeterminada de la tienda a la moneda del carrito durante la evaluación.EvaluationRequest y ejecuta el RuleEngine compartido; después muestra decisiones de transportista, reglas coincidentes, trazas de condiciones, líneas de recargo, etiquetas finales, valores ETA y avisos de ausencia de transportistas.NO CARRIER LEFT. En los datos del checkout, el módulo expone has_no_carrier_left; la capa frontend 1.7 puede mostrar un aviso de ausencia de transportistas, y la protección de selección de transportista borra el transportista seleccionado si ha pasado a estar oculto.match_priority del feed, como ean,sku,supplier_id. Los mapas existentes del módulo se reutilizan cuando son coherentes, las claves de feed duplicadas se bloquean y las coincidencias solo por referencia de proveedor se tratan por defecto como de baja confianza.create_missing y las opciones de sincronización correspondientes están activadas. La creación sigue limitada por ajustes de seguridad como el máximo de creación de productos, el máximo de creación de combinaciones y los topes porcentuales de creación.location_quantities; cuando sync_location_stock está activado, el módulo registra el stock por ubicación y actualiza el agregado de la tienda con la estrategia seleccionada. Las ubicaciones pueden permanecer virtuales o mapearse a almacenes de PrestaShop Advanced Stock Management.porcentaje, un importe fijo de descuento o un precio objetivo fijo dentro de un intervalo de fechas de inicio y fin definido.prioridad. Cuando varias campañas coinciden en el mismo producto al mismo tiempo, gana la de mayor prioridad, de modo que los precios se mantienen predecibles.Puedes actualizar el precio de venta al público o el precio de compra (coste). Cada ejecución trabaja sobre un único campo de precio, de modo que un lote nunca modifica ambos a la vez. Así los ajustes de venta y de coste se mantienen separados y predecibles.
Una vez que inician sesión, los clientes ven en su área Mi cuenta un enlace a la cuenta profesional que abre una página de solicitud. Allí indican el nombre de la empresa, el número de IVA, las referencias comerciales, el tipo de negocio y un mensaje opcional. La solicitud pasa después a una cola en tu back office para su revisión.
Cada ejecución está delimitada. Puedes abarcar todos los productos activos o restringir la selección a una sola categoría, fabricante o proveedor antes de aplicar. El ámbito elegido se registra con la ejecución, así siempre sabes qué productos se vieron afectados.
Sí. Puedes mantener el flujo manual predeterminado, en el que tu equipo aprueba o rechaza cada solicitud desde la cola del back office, o activar la aprobación automática para que las nuevas solicitudes obtengan el estado profesional de inmediato. Es un único ajuste, así que puedes empezar en manual y automatizar más adelante.
Sí. La vista previa muestra cada producto afectado con su ID, nombre, precio actual, precio nuevo y la diferencia, para que revises el resultado exacto antes de confirmar. No se escribe nada en el catálogo hasta que confirmas el lote.
Cuando apruebas una solicitud, el grupo de clientes que configuraste como grupo profesional se añade a ese cliente y se establece como su grupo predeterminado. A partir de ahí ve los precios mayoristas o el acceso B2B que ya gestionas mediante los grupos de clientes de PrestaShop, sin edición manual de grupos por tu parte.
Puedes aplicar un aumento porcentual, una reducción porcentual, un aumento fijo o una reducción fija. Las reducciones se limitan a cero, de modo que un precio nunca puede quedar negativo. Los valores se procesan con precisión decimal.
Puedes exigir de forma independiente el nombre de la empresa, el número de IVA y las referencias comerciales, para que el formulario refleje el rigor con el que verificas a los compradores. El tipo de negocio y un mensaje libre también se recogen como contexto, y el formulario de la tienda valida los campos obligatorios antes de enviar la solicitud.
Sí. Un cliente que ya tiene una solicitud pendiente o aprobada no puede enviar otra, de modo que tu cola de revisión no se llena de repeticiones. En su lugar, su área Mi cuenta muestra el estado actual: solicitar, pendiente, activo o rechazado.
Las actualizaciones se ejecutan como tareas con una hora de ejecución programada, y el módulo incluye un punto de acceso cron para procesar los lotes automáticamente en segundo plano. Las tareas se bloquean mientras se ejecutan para evitar que dos procesos se solapen sobre el mismo catálogo.
Correos opcionales mantienen informadas a ambas partes: tu equipo puede recibir aviso cuando se envía una nueva solicitud, y el cliente puede recibir un correo cuando cambia su estado. Cada notificación es un ajuste independiente, así que activas solo las que tu flujo de trabajo necesita.
Cada ejecución correcta se registra con la fórmula, el ámbito, el campo de precio, el número de productos afectados, el empleado que la aplicó y la fecha. Esto ofrece a tu equipo un registro de auditoría claro para los cambios de precio sensibles.
Sí. Crea una cuenta en chatra.io, luego abre Ajustes > General > Código del widget y copia el Widget ID del fragmento de instalación. Pega ese identificador en el campo Widget ID del módulo. Mientras no se guarde un Widget ID, el módulo permanece inactivo y el back-office muestra un aviso, por lo que el widget nunca se carga sin un identificador válido.
Sí. Un interruptor de visibilidad móvil permite ocultar el widget en pantallas móviles mientras se mantiene en escritorio. Cuando está desactivado, el módulo omite por completo el script de Chatra en móvil, por lo que no se añade ningún botón de chat en los teléfonos ni se carga script adicional.
No. El modulo cambia las reglas de enrutamiento de URL integradas de PrestaShop a patrones limpios y sin ID desde el back-office y gestiona las redirecciones de las direcciones antiguas a las nuevas mediante su propio controlador front-office. No tienes que tocar la configuracion del servidor, el archivo .htaccess ni los archivos del tema. La desinstalacion restaura las reglas de enrutamiento originales de PrestaShop.
Support Revolution funciona en PrestaShop 1.7, 8.x y 9.x. Una capa de compatibilidad interna mantiene operativos los modelos de datos de tickets, departamentos y base de conocimientos en las tres versiones, de modo que el mismo ZIP se instala en cualquiera de ellas.
La única función con un requisito adicional es la recepción opcional de correos como tickets mediante IMAP: necesita la extensión PHP imap en el servidor. Si falta esa extensión, el resto del helpdesk funciona con normalidad — solo queda no disponible esa recepción por correo.
Filter Revolution se conecta a través del proveedor de búsqueda de productos de PrestaShop y solo toma el control de una página de listado cuando has creado una plantilla de filtro para ese contexto. Admite las páginas de categoría, búsqueda, fabricante, proveedor, más vendidos, novedades y ofertas.
Si a la página que se está viendo no se le ha asignado ninguna plantilla, el módulo devuelve el control a PrestaShop, de modo que tu navegación por facetas existente o nativa sigue funcionando allí sin cambios. Así puedes implementarlo de forma gradual, categoría por categoría, en lugar de cambiar toda la tienda de golpe. Funciona en PrestaShop 1.7.6 y posteriores, incluidas las versiones 8.x y 9.x.
No. Cuando nuestro modulo SEO Revolution esta instalado y activado, Friendly URL Manager le cede automaticamente la gestion de las URL, de modo que ambos no compiten por las mismas rutas. Usado por si solo, asume la logica de URL limpias y redirecciones. Como norma, manten activo un unico motor de URL para evitar reescrituras en conflicto.
Sí. La opción Permitir tickets de invitado está activada por defecto, así que un visitante que no ha iniciado sesión puede enviar un ticket con su nombre, correo, asunto y mensaje.
Cada ticket de invitado recibe un enlace privado y seguro respaldado por un token de 64 caracteres, que permite al visitante seguir y responder a ese ticket concreto sin cuenta. Si prefieres exigir inicio de sesión, desactiva la opción en los ajustes del módulo: entonces solo los clientes registrados podrán abrir tickets.
Cada grupo de filtros puede mostrarse con el control que mejor se ajuste a sus valores: casillas de verificación y botones de opción para listas cortas, un desplegable para listas largas, un control deslizante de rango para el precio y los valores numéricos, muestras de color y muestras de imagen.
Los clientes pueden filtrar por atributos del producto (como talla o color), características, rango de precio, fabricante o marca, y disponibilidad en stock. Las muestras de color e imagen se asignan automáticamente a partir de las imágenes presentes para cada valor de atributo, y cada etiqueta de faceta se lee en el idioma del visitante, de modo que una sola plantilla muestra el texto correcto en cada idioma de la tienda.
Si. Los patrones de URL, los enlaces en cache, las redirecciones guardadas y las anulaciones manuales se almacenan por idioma y por tienda. Asi, en una instalacion multitienda, cada tienda y cada idioma conserva sus propias direcciones limpias y su propio historial de redirecciones.
Por defecto, cada adjunto está limitado a 10 MB y las extensiones permitidas son jpg, jpeg, png, gif, pdf, doc, docx, xls, xlsx, txt, zip, rar.
Tanto el tamaño máximo como la lista de extensiones se pueden editar en los ajustes del módulo. Antes de guardar un archivo, el módulo comprueba su extensión frente a tu lista, de modo que se rechaza todo lo que quede fuera de ella. Reduce la lista si quieres aceptar menos tipos de archivo.
Creas una plantilla de filtro reutilizable en el back office, añades los grupos de filtros que quieras (atributos, características, precio, marca, stock), los ordenas como prefieras y luego asignas esa plantilla a una o varias categorías con el selector de categorías.
Las plantillas se guardan por tienda, de modo que distintas tiendas de una instalación multitienda pueden usar configuraciones de filtros diferentes, y cada plantilla está vinculada a un tipo de controlador de listado como categoría, búsqueda o fabricante. Como las plantillas son reutilizables, puedes aplicar la misma disposición de filtros a muchas categorías en lugar de configurar cada una a mano.
Si. Puedes fijar una URL personalizada a un producto, categoria, pagina CMS, marca o proveedor concreto, o hacer que una direccion apunte a otra entidad o a una URL de destino personalizada. Cada anulacion te permite elegir el tipo de redireccion - 301 permanente o 302/307 temporal - limitada al idioma y la tienda que elijas.
De forma opcional sí, mediante la recepción IMAP — pero está desactivada por defecto. Cuando la activas e introduces el host del buzón, el usuario y la contraseña, un sondeo programado lee los mensajes no leídos del buzón.
Si el asunto de un mensaje contiene una referencia de ticket existente (tu prefijo configurado, p. ej. SR-00001), el correo se añade como respuesta a ese ticket; de lo contrario se crea uno nuevo a partir de él. Requiere la extensión PHP imap y una tarea cron que llame al punto de cron del módulo con tu token.
No. El módulo responde al hook de exportación de datos RGPD de PrestaShop indicando que no almacena datos personales en el servidor, porque el filtrado se basa en tus datos existentes de catálogo e índice, no en perfiles de clientes.
El limitador anti-abuso opcional, que solo se activa cuando un bot satura las URL de filtros, funciona con contadores de Redis de corta duración y no conserva datos personales. Por eso la ficha marca este módulo como no relevante para el RGPD.
Lo decides por cada tipo de entidad. Una pagina eliminada o desactivada puede redirigir a su categoria superior, redirigir a la pagina de inicio, devolver un 410 Gone o no hacer nada; su direccion antigua queda registrada en el historial de redirecciones para que los enlaces entrantes sigan resolviendose en lugar de caer en un error 404 real.
Un ticket almacena la identidad del cliente, todo el hilo de mensajes, el departamento, la prioridad y el estado, la tienda a la que pertenece y la dirección IP de quien lo envía, ofreciendo al personal un historial de soporte real dentro de PrestaShop.
El formulario de la tienda exige una casilla de consentimiento RGPD explícita; si no está marcada, el ticket no se crea. Las notas internas del personal se guardan por separado y nunca se muestran en la conversación visible para el cliente.
El módulo está diseñado para mantener rápidas las páginas de listado con mucho tráfico sin inflar tu base de datos. Lee de las tablas de índice existentes de PrestaShop y mantiene agregados de recuento de facetas compactos y precalculados, de modo que la tienda no ejecuta consultas pesadas en vivo para cada filtro en cada petición.
Puedes reconstruir estos agregados y comprobar el estado del índice desde el panel del back office, y las combinaciones de filtros sin productos pueden ocultarse para que los clientes y los rastreadores no lleguen a páginas vacías. Así los tiempos de respuesta de los filtros se mantienen estables a medida que crece el catálogo.
El módulo declara compatibilidad desde PrestaShop 1.6.1.0 hasta la línea 9.x actual y requiere PHP 7.1 o superior. Mantiene rutas de código separadas para PS 1.6 y 1.7+ (por ejemplo, la página de pedido del back office y el tratamiento de direcciones), de modo que las herramientas financieras funcionan tanto en una tienda antigua 1.6 como en PrestaShop 8 o 9.
Pueden hacerlo, si lo deseas. El ajuste Cerrar automáticamente tras es de 14 días por defecto: una tarea programada cierra los tickets resueltos que no han tenido actividad durante ese número de días. Pon el valor en 0 para desactivar por completo el cierre automático.
La tarea se ejecuta a través del punto de cron del módulo — el comando CLI cron.php --token=TU_TOKEN o una llamada por URL con el mismo token — es decir, el mismo planificador que sondea el IMAP.
Funciona junto a ellas. La pantalla Documentos enumera tus facturas de pedido de PrestaShop existentes — referencia del pedido, cliente, correo, totales, envío, estado del pedido, fecha y la descarga del PDF nativo — en lugar de sustituir la facturación del núcleo. Además añade flujos de corrección (abono) y proforma, incluida la conversión de proforma a factura cuando el pedido lo permite. Tus facturas nativas de PrestaShop siguen siendo la fuente de verdad.
Para los números de IVA de la UE, el módulo llama al servicio oficial VIES de la UE (el punto SOAP checkVatService) para obtener una respuesta autorizada de válido/no válido. Si VIES no está accesible o se agota el tiempo, no te bloquea: recurre a una comprobación solo de formato y registra el resultado con su origen (vies o format), de modo que siempre ves si un número se confirmó de forma autorizada o solo se validó por formato. Los números fuera de la UE solo se comprueban por formato, ya que VIES no los cubre.
Para la declaración de IVA, el módulo almacena los números de IVA de los clientes junto con el origen de la validación, los datos devueltos por la comprobación, los mensajes y las marcas de tiempo en sus propias tablas. Son datos comerciales/fiscales que tú, como comerciante, controlas y que normalmente debes conservar con fines contables. No envía estos datos a terceros más allá de la propia consulta a VIES de la UE ni registra hooks RGPD automáticos de exportación/borrado de PrestaShop, así que si un cliente solicita el borrado, eliminas su registro de IVA directamente en el back office.
Sí. Las tablas del módulo —registros financieros, costes, documentos, datos de IVA y ajustes— incluyen todas una columna id_shop, de modo que las entradas quedan asignadas a la tienda a la que pertenecen. Cada tienda mantiene sus propias cifras, numeración de documentos y configuración, en lugar de compartir un único libro mayor común en toda la multitienda.
Ambas cosas, según el tipo de registro. Los registros del lado de los ingresos se crean automáticamente: el módulo se engancha a la validación del pedido y a los cambios de estado del pedido y garantiza que exista un registro financiero para cada pedido. Los costes y gastos los introduces tú — cada coste lleva una referencia, un socio, una categoría, importes sin impuestos y con impuestos, importes reembolsados/descontados, estado de pago, fecha de vencimiento, adjuntos y una asignación opcional a un producto o categoría, de modo que las cifras de beneficio e IVA reflejen el gasto real con proveedores.
Este módulo carga el script de seguimiento de terceros de ActiveCampaign (diffuser.js desde diffuser-cdn.app-us1.com) directamente en el navegador del visitante. Se muestra cuando el módulo está activado y se ha guardado un ID de cuenta — el código no incluye ninguna barrera de consentimiento de cookies, por lo que la gestión del consentimiento es responsabilidad tuya.
El único dato personal que transmite el propio módulo es la dirección de correo de un cliente conectado, enviada con vgo('setEmail', ...) para vincular las visitas al contacto correcto. Los invitados se rastrean sin correo. El módulo solo guarda dos ajustes en PrestaShop (ENABLED y ACCOUNT_ID) y no almacena datos de visitantes.
Como es un seguimiento de marketing/analítica que puede transmitir un identificador personal, cárgalo tras tu mecanismo de consentimiento donde lo exija la ley y menciona ActiveCampaign en tu política de privacidad.
No. Esta integración utiliza únicamente el seguimiento de sitio del lado del cliente de ActiveCampaign. El único valor obligatorio es el ID de cuenta numérico, que copias en Ajustes > Seguimiento > Seguimiento de sitio en ActiveCampaign.
El módulo solo guarda ENABLED y ACCOUNT_ID e inserta el rastreador oficial diffuser.js en el navegador. En esta ruta de código no hay clave API, URL API ni sincronización servidor a servidor, por lo que no se almacenan credenciales de API en tu servidor ni se envían desde él — todos los datos van del navegador del visitante a ActiveCampaign.
Recuerda activar también el seguimiento de sitio en tu cuenta de ActiveCampaign; de lo contrario, las visitas recogidas por el script no aparecerán.
El módulo está diseñado para PrestaShop 1.6 hasta 9.x y no edita ningún archivo del tema. Registra un único hook de front-office, displayBeforeBodyClosingTag, e inserta el script de seguimiento justo antes de la etiqueta de cierre </body> — no en la cabecera de la página.
Como depende de ese hook, el script solo aparece si tu tema realmente renderiza displayBeforeBodyClosingTag, cosa que hacen los temas estándar de PrestaShop. No se copia nada en una plantilla, por lo que un cambio o actualización del tema no hará perder la integración.
Si el seguimiento nunca aparece en el código fuente, comprueba que el módulo esté activado, que el ID de cuenta esté rellenado y que tu tema personalizado llame a displayBeforeBodyClosingTag cerca del final de la página.
El módulo declara compatibilidad desde PrestaShop 1.6.1.0 hasta la versión actual, por lo que funciona en 1.6, 1.7, 8.x y 9.x. La protección de la tienda solo se aplica mientras el módulo está activo, y las pantallas del Back Office siguen siendo accesibles incluso con la protección desactivada, así que activarlo no te dejará fuera de tu propia tienda.
No. El cortafuegos arranca en modo monitorización: al instalarlo registra las solicitudes que se bloquearían sin detenerlas realmente. Primero revisas esos registros de intentos bloqueados y los datos de seguridad, y solo después pasas al modo de aplicación cuando confías en que las reglas son seguras. Los límites de frecuencia se configuran por tipo de acción (registro, contacto, comentarios, carrito) en lugar de un único umbral general.
El módulo incluye una salida de emergencia por línea de comandos que se ejecuta en el servidor, por lo que funciona incluso cuando no puedes iniciar sesión: php bin/console mprsecurityrevolution:admin-security:escape. Usa --disable-enforcement para desactivar el bloqueo de acceso, la barrera 2FA, la obligación de 2FA, el bloqueo sesión-IP y las comprobaciones step-up; --clear-lockouts para borrar los bloqueos; --trust-ip para añadir una IP o CIDR de administrador de confianza; o --all para hacer ambas cosas.
Las comprobaciones de protección y monitorización se ejecutan en las peticiones de página normales, así que la defensa principal no depende del cron. Se necesita una tarea cron para el mantenimiento programado y las copias de seguridad: cron.php (llamado con un token de seguridad que se muestra en el panel de administración) ejecuta tareas de limpieza que purgan registros de seguridad antiguos, registros de límite caducados, intentos bloqueados, registros de peticiones y datos de sesión/páginas vistas, y gestiona las copias programadas. Sin cron, estas tareas no se ejecutan y las tablas de registros siguen creciendo.
El registro, los formularios de contacto y los comentarios de producto están protegidos por una comprobación en capas: un campo honeypot invisible, límites de frecuencia por acción, el rechazo de dominios de correo desechables o bloqueados y un análisis de contenido que detecta texto sin sentido, exceso de enlaces y entradas arriesgadas o abusivas. Cada tipo de acción (registro, contacto, comentario, carrito) tiene sus propios límites, así que puedes ser estricto con los registros sin ralentizar la navegación normal. Todos los datos de seguimiento y seguridad permanecen en la base de datos de tu propia tienda — nada se envía a servicios de terceros — y las tareas de limpieza integradas los purgan de forma programada.
En los ajustes del módulo eliges uno de tres proveedores: Google reCAPTCHA v2 (la conocida casilla "No soy un robot"), Google reCAPTCHA v3 (invisible, basado en puntuación) o hCaptcha (una alternativa con casilla respetuosa con la privacidad). Solo hay un proveedor activo a la vez y se aplica a todos los formularios protegidos.
reCAPTCHA v2 y hCaptcha muestran un widget al visitante, mientras que reCAPTCHA v3 se ejecuta de forma discreta en segundo plano y devuelve una puntuación de 0 a 1. Con la v3 también defines un umbral de puntuación (0,5 por defecto) para ajustar la severidad del control invisible sin cambiar de proveedor.
Sí. El módulo no ejecuta su propio servicio CAPTCHA: se conecta con Google o hCaptcha. Por eso creas una cuenta gratuita con el proveedor elegido, generas una clave de sitio y una clave secreta, y pegas ambas en los ajustes del módulo.
La protección permanece totalmente inactiva hasta que el módulo esté activado y ambas claves estén rellenadas. Antes de eso no se muestra ningún widget ni se comprueba ningún envío, de modo que una configuración incompleta nunca puede bloquear ni romper los formularios de tus clientes. El back office también muestra un aviso de qué claves faltan aún.
Al enviar un formulario protegido, el módulo transmite el token de respuesta CAPTCHA, tu clave secreta y la dirección IP del visitante al servicio de verificación del proveedor (el servicio siteverify de Google o hCaptcha) para confirmar la respuesta. El widget JavaScript del proveedor también se carga en el navegador del visitante, igual que en cualquier sitio que use reCAPTCHA o hCaptcha.
El módulo en sí no almacena el token, ni la puntuación, ni los datos del visitante en tu base de datos. Como interviene un servicio de terceros, el uso de CAPTCHA es relevante para el RGPD: menciona por tanto el proveedor elegido en tu política de privacidad. Por ese motivo, en la página de contacto el widget se muestra a través del área de consentimiento RGPD.
reCAPTCHA v3 devuelve una puntuación de 0 a 1 en cada envío. El módulo la compara con el umbral que definas (0,5 por defecto): los envíos que lo alcanzan o superan pasan, y los más bajos se tratan como automatizados y se detienen. Un umbral más alto es más estricto; uno más bajo, más permisivo.
Como la puntuación invisible puede a veces juzgar mal a un cliente real, puedes activar un respaldo con casilla opcional. Cuando un envío v3 queda por debajo del umbral, se pide al visitante que complete una casilla reCAPTCHA v2 (con un par de claves v2 aparte) para demostrar que es humano y continuar, de modo que los clientes legítimos no se queden sin salida.
No. El módulo detecta cuándo el módulo nativo contactform de PrestaShop está activo y ya se muestra en el área de contacto y, en ese caso, no añade un segundo widget allí. En su lugar coloca el CAPTCHA a través del área de consentimiento RGPD de la página de contacto, de modo que obtienes un solo CAPTCHA en el lugar correcto en vez de dos widgets superpuestos.
Este manejo es específico del formulario de contacto. Los formularios de inicio de sesión, registro y newsletter muestran cada uno su propio CAPTCHA mediante su hook dedicado, y cada formulario tiene su propio interruptor para proteger solo los que quieras.
Está pensado para PrestaShop 1.6, 1.7, 8.x y 9.x — el módulo declara compatibilidad desde la versión 1.6.0.0 hasta la versión que tengas instalada, y funciona con PHP 7.1+. El recurso alternativo de iframe GTM en
Sí. Si el módulo de consentimiento mprcookiesrevolution está instalado y activado, este módulo reordena automáticamente su hook de cabecera para que se cargue en último lugar, de modo que los valores predeterminados del modo de consentimiento de la CMP se establezcan antes de que se cargue el contenedor GTM (gtm.js). Si no hay ninguna CMP y la opción de reserva de consentimiento está activada, el módulo emite un valor predeterminado de Google Consent Mode v2 denied para ad_storage, ad_user_data, ad_personalization y analytics_storage antes de iniciar GTM, de modo que tus etiquetas de modo de consentimiento siempre tengan un estado definido.
Sí. Cuando la opción de exclusión de empleados está activada, los miembros del personal con sesión iniciada en el back office no reciben seguimiento. Los rastreadores y herramientas de auditoría conocidos (Googlebot, Bingbot, SemrushBot, AhrefsBot, Lighthouse/PageSpeed, Pingdom y otros) se detectan por el user-agent y se omiten, y todo visitante que lleve la cookie de exclusión mpr_notrack queda excluido. El seguimiento solo se ejecuta en las páginas del front office, no en la administración ni en las llamadas AJAX/API.
No, si el respaldo de Measurement Protocol está activado. Al validar el pedido, el módulo puede enviar la compra del lado del servidor directamente a GA4 (Measurement Protocol), de modo que la venta se registra aunque el comprador nunca llegue a la página de confirmación, bloquee la etiqueta o rechace el consentimiento del lado del cliente. Google deduplica por transaction_id, así que si el evento del navegador también se dispara, el pedido no se cuenta dos veces. Esto requiere un ID de medición de GA4 (G-XXXXXX) y un secreto de API en la configuración.
Enhanced Conversions solo se ejecuta cuando la opción está activada y el cliente ha iniciado sesión. El módulo envía el correo electrónico, el nombre y los apellidos, el teléfono, la ciudad, el código postal y la región del cliente al dataLayer como hashes SHA256 — nunca en texto plano — en un evento enhanced_conversions_data. Con este envío, ningún dato personal sin procesar sale del navegador; solo los valores con hash que Google espera para la coincidencia de conversiones.
No. El boton se entrega como una unica plantilla inline: su CSS y JavaScript estan incrustados directamente en la salida del pie de pagina, por lo que en el front office no se cargan archivos .css o .js adicionales ni se anaden peticiones HTTP.
No carga jQuery ni ninguna biblioteca externa. El desplazamiento hacia arriba usa la funcion nativa del navegador window.scrollTo({ top: 0, behavior: 'smooth' }), y el listener de scroll se registra con { passive: true } para no bloquear nunca el desplazamiento. El modulo tambien establece un indicador buttonRendered para que el boton se genere una sola vez por pagina, aunque tu tema dispare varios hooks compatibles.
El marcado generado es un unico <button> de 48x48 pixeles con un icono de flecha SVG inline, por lo que el impacto en el peso de la pagina es minimo.
No. El boton es un comportamiento visual puramente del lado del cliente. No instala cookies, no escribe nada en localStorage, no envia peticiones AJAX ni de analitica y no llama a ningun servicio externo o de terceros.
La plantilla generada contiene solo un bloque <style>, un <button> y un pequeno <script> autonomo que alterna una clase CSS al desplazarse y sube al principio al hacer clic. Como no se lee, almacena ni transmite ningun dato personal, el boton no anade obligaciones propias de RGPD ni de consentimiento de cookies.
Esta disenado para una amplia compatibilidad. El modulo declara compatibilidad con PrestaShop 1.6.0.0 hasta tu version instalada, y se muestra mediante los hooks estandar displayFooter, displayFooterAfter y displayBeforeBodyClosingTag - por lo que cualquier tema que ejecute al menos uno de ellos mostrara el boton, y se usa el que se dispare primero.
El boton usa position: fixed con un z-index alto, de modo que flota sobre el contenido de la pagina tanto en disenos de escritorio como moviles/tactiles, y aparece en cuanto el visitante supera el umbral de pixeles configurado. No se requiere editar archivos del tema - basta con instalar y activar el modulo.
El motor es autoalojado. Las consultas se comparan con tu propio índice en la base de datos, y todas las estadísticas — términos buscados, clics y búsquedas sin resultados — se almacenan en las tablas propias del módulo dentro de tu base de datos de PrestaShop. Por defecto no se envía nada a una nube de búsqueda de terceros.
El historial de búsqueda de los clientes registrados se guarda por cliente y el comprador puede borrarlo. La atribución de clic a pedido usa una cookie propia con una duración predeterminada de 30 días. Una función opcional de búsqueda con IA puede llamar a un proveedor de IA externo, pero está desactivada por defecto y solo se activa si la habilitas y añades tu propia clave API.
El módulo declara compatibilidad desde PrestaShop 1.6 hasta la versión en ejecución (ps_versions_compliancy mín 1.6.0.0) y requiere PHP 7.2 o posterior.
La carga de recursos se adapta a la plataforma: en PrestaShop 1.7 y posteriores registra su CSS y JavaScript mediante actionFrontControllerSetMedia, mientras que en 1.6 los carga desde displayHeader con addCSS/addJS. El mismo hook displayHeader inyecta los ajustes en window.mprcustomerpassword_config.
El script de front gestiona ambas generaciones de formularios: apunta al campo password de PrestaShop 1.7+ y a los campos passwd y confirmation de 1.6. La ruta de correo con enlace de configuración usa reset_password_token en los objetos de cliente 1.7+ y una actualización SQL heredada en 1.6. El módulo registra tres hooks: displayHeader, actionFrontControllerSetMedia y actionCustomerAccountAdd.
Sí. Los sinónimos, los impulsos de productos, las redirecciones de búsqueda, las páginas de destino SEO, las estadísticas de consultas y el historial de cliente guardado están todos delimitados por tienda, de modo que cada tienda de una instalación multitienda conserva su propia configuración y sus propios datos.
Así puedes definir sinónimos distintos o impulsar productos diferentes para una tienda sin afectar a las demás, y los informes de búsqueda de cada tienda se mantienen separados.
La longitud es configurable y por defecto es 12, pero el generador impone un mínimo estricto de 8 caracteres aunque establezca un valor inferior (Math.max(8, length)).
Las minúsculas siempre se incluyen como conjunto base. Tres interruptores independientes añaden después mayúsculas, números y caracteres especiales (!@#$%^&*_+-=); de forma predeterminada los tres están activados. Cuando un conjunto está activo, el generador garantiza al menos un carácter de él, completa la longitud restante a partir del grupo combinado y baraja el resultado con Fisher-Yates para que los caracteres requeridos no queden en una posición previsible.
La generación se realiza por completo en el navegador en front.js usando los valores inyectados mediante window.mprcustomerpassword_config (PWD_LENGTH, PWD_UPPERCASE, PWD_NUMBERS, PWD_SPECIAL). Se crea una contraseña por página y el mismo valor se escribe en cada campo de contraseña y confirmación coincidente.
Está diseñado para PrestaShop 1.7, 8 y 9 — la compatibilidad declarada va desde 1.7.0 hasta la versión actual de PrestaShop — y funciona con PHP 7.1 o superior.
El módulo crea y mantiene sus propias tablas de base de datos automáticamente durante la instalación y mantiene el esquema actualizado, así que no necesitas ejecutar ningún SQL manual al instalar o actualizar dentro del rango compatible.
No. El módulo no tiene una tabla de base de datos propia para contraseñas; su configuración de integridad no incluye tablas críticas. La contraseña se genera del lado del cliente en el navegador y se envía con el formulario de cuenta normal, y PrestaShop la cifra y la almacena exactamente igual que cualquier contraseña de cliente.
Lo que se conserva después depende del modo de correo. Con send_password (predeterminado) la contraseña en texto plano se envía una sola vez al cliente. Con setup_link el módulo almacena únicamente un token de restablecimiento con tiempo limitado — random_bytes(32) en PrestaShop 1.7+ o un token MD5 en 1.6 — con validez de 24 horas en el registro del cliente, y envía un enlace de configuración en lugar de la contraseña. Con silent no se almacena nada adicional y no se envía ningún correo con la contraseña.
Como la generación es JavaScript del lado del cliente, los clientes con JavaScript desactivado simplemente ven el campo de contraseña normal sin autocompletado, por lo que el registro estándar de PrestaShop sigue funcionando.
La búsqueda se ejecuta en tu propio servidor en lugar de en una API remota, por lo que no hay ida y vuelta externa. Además, las peticiones se limitan mientras el visitante escribe: un umbral de caracteres mínimos (2 por defecto) impide consultar con una sola letra, y un retardo de rebote (150 ms por defecto) agrupa las pulsaciones rápidas en una sola petición.
Las vistas previas de autocompletado y el número de resultados están limitados por valores configurables, de modo que un desplegable nunca carga más filas de las necesarias. Todos estos umbrales pueden ajustarse en el Back Office según el tamaño de tu catálogo y tu servidor.
No. Tras la instalación funciona con valores predeterminados sensatos — mejora el cuadro de búsqueda existente de tu tema y devuelve productos, categorías, páginas CMS, fabricantes y proveedores mientras el comprador escribe, con la tolerancia a errores tipográficos ya activada.
Las herramientas avanzadas — sinónimos, impulsos de productos, reescrituras y redirecciones de consultas, páginas de destino SEO y el simulador de posicionamiento — son todas opcionales y se gestionan desde el Back Office sin escribir código, de modo que puedes empezar de forma sencilla y ajustar la búsqueda con el tiempo usando las estadísticas integradas.
El módulo es compatible con PrestaShop 1.6, 1.7, 8.x y 9.x. Añade el script de Microsoft Clarity mediante el hook de cabecera de la tienda, por lo que Clarity funciona con su propio código de seguimiento asíncrono y tus grabaciones y mapas de calor se procesan en tu cuenta de Microsoft Clarity, no en tu servidor. El módulo no crea tablas de base de datos adicionales para los datos de seguimiento.
El módulo declara compatibilidad desde PrestaShop 1.6.0.0 hasta tu versión instalada, por lo que funciona en 1.6, 1.7, 8 y 9. Registra dos hooks en la página del pedido — displayAdminOrder para la pantalla de pedido de PrestaShop 1.6 y displayAdminOrderMain para la pantalla de pedido desde la 1.7 — de modo que la acción de eliminación aparece en el lugar correcto en cada versión.
Puedes excluir las sesiones del back-office de Clarity. Cuando la opción «Excluir la navegación de empleados» está activada, que es el valor predeterminado, el módulo no carga el script de Clarity mientras un empleado con la sesión iniciada navega por la tienda, por lo que las visitas de tu equipo no se registran. Las sesiones normales de los clientes se siguen registrando con normalidad.
Sí. El módulo incluye dos ajustes, ambos activados de forma predeterminada: ENABLED, que controla si la acción de eliminación aparece en la página del pedido, y REQUIRE_CONFIRMATION, que hace que el botón muestre una confirmación del navegador antes de ejecutarse. Cuando ENABLED está desactivado, el hook no muestra nada y el personal nunca ve el botón. Ambos se ajustan desde la página de Ajustes del módulo en el back office.
El módulo adjunta el contexto de compra como etiquetas de sesión y eventos de Clarity: tipo de página y controlador, nombre del producto, categoría e identificadores, valor del carrito y del pedido, moneda, número de artículos, referencia del pedido y el término de búsqueda. No envía nombres de clientes, direcciones de correo electrónico, contraseñas ni datos de pago. El seguimiento solo funciona cuando el módulo está activado con un ID de proyecto válido y, si está configurado, tras conceder el consentimiento de marketing.
Sí. El módulo llama al método nativo Order::delete() de PrestaShop, que elimina el pedido junto con los registros relacionados que el núcleo elimina en cascada — facturas, detalles del pedido, movimientos de stock y líneas de pago. La papelera no guarda una copia completa: almacena solo un pequeño resumen JSON (id de pedido, referencia, id de cliente, total pagado, fecha de creación y estado actual), por lo que es un registro de lo eliminado, no una copia de seguridad con la que reconstruir el pedido. Considera la eliminación como definitiva y úsala para pedidos de prueba, duplicados o no deseados.
No. Automatic Internal SEO Linker solo actúa dentro de las zonas de contenido que configuras — descripciones de productos y categorías, contenidos CMS y textos de blog, fabricantes o proveedores. Antes de insertar nada extrae el <body> de la página y deja intencionadamente intactos el <head>, los bloques <script> y los datos estructurados JSON-LD, de modo que tus rich snippets y etiquetas meta nunca se reescriben.
Además cuenta los enlaces existentes solo dentro de esas zonas de contenido, no en tu menú, cabecera o migas de pan. Por eso los enlaces de navegación nunca consumen el presupuesto de enlaces de un grupo, y el módulo no convierte los elementos del menú ni el rastro de migas en anclas adicionales. Por defecto también omite los encabezados, evita el texto ya enlazado y nunca enlaza una página consigo misma.
El módulo está hecho para PrestaShop 1.6, 1.7, 8.x y 9.x (compatibilidad declarada de 1.6.1.0 a 9.x) y funciona con las versiones de PHP estándar de esas ediciones. No depende de una plantilla concreta.
Funciona a través del hook de salida actionOutputHTMLBefore: lee el HTML final de la tienda e inyecta los enlaces en la respuesta en el momento de enviarla. Nunca edita los archivos de plantilla de tu tema ni reescribe las descripciones guardadas en tu base de datos. Desactivar un grupo de enlaces o desinstalar el módulo elimina de inmediato los enlaces generados, porque solo se añadieron a la salida y nunca se guardaron en tu contenido.
Sí. Cada grupo de enlaces puede definir sus propios atributos: un valor rel (por ejemplo nofollow o noopener), un destino (como _self, o _blank para abrir en una pestaña nueva) y una clase CSS. También hay una opción para envolver el ancla en <strong> para resaltarla en negrita.
Cuando un grupo deja estos campos vacíos se aplican los valores por defecto de toda la tienda: los enlaces se abren en la misma pestaña (_self), el atributo rel está vacío y la clase CSS por defecto es mpr-autolink, que puedes estilizar en tu plantilla. Los límites por página y por grupo (por defecto 5 enlaces por página y 3 por grupo) mantienen un enlazado natural en lugar de spam.
No. Automatic Internal SEO Linker trabaja completamente en el lado del servidor: en cada página del front-office lee tus grupos de enlaces guardados, examina el HTML que PrestaShop ya ha generado e inserta las anclas antes de enviar la respuesta. Solo almacena tu propia configuración — los grupos de enlaces, palabras clave y ajustes que creas en el Back Office.
No establece cookies, no rastrea ni perfila a los visitantes, no almacena ningún dato personal y no realiza llamadas a API externas para generar los enlaces. Como no se recopila ni comparte ningún dato de visitantes, el módulo no es relevante para el RGPD en el lado de la tienda.
No. El buscador de duplicados solo detecta y enumera los duplicados: nunca fusiona ni elimina nada por su cuenta. Busca productos duplicados (agrupados por nombre, o por referencia, EAN-13, UPC o ISBN), categorías duplicadas (mismo nombre bajo el mismo padre), características y valores de características duplicados, y grupos de atributos duplicados con sus valores, mostrando cada grupo junto con los identificadores coincidentes para que puedas compararlos.
A partir de ahí, revisas los resultados y decides tú mismo qué hacer en tu catálogo. Es intencionado: fusionar productos o atributos afecta a las combinaciones, el stock, los precios y los pedidos anteriores, por eso el módulo te deja a ti esos cambios irreversibles en lugar de adivinar qué registro conservar.
Sí, y el módulo actúa con cuidado. Enumera las carpetas de módulos que existen en el disco pero no están instaladas en PrestaShop, y solo ofrece eliminar una carpeta cuando se trata de un módulo realmente desinstalado. No eliminará una carpeta cuyo nombre coincida, sin distinguir mayúsculas y minúsculas, con un módulo instalado (una carpeta foo nunca se elimina mientras Foo esté instalado), y nunca sigue enlaces simbólicos: ambos son casos habituales en los que una carpeta "desinstalada" en realidad pertenece a código activo.
Por separado, detecta tablas de base de datos huérfanas y claves de configuración sobrantes cuyo módulo propietario ya no está instalado, pero se muestran solo para revisión: el módulo no elimina tablas ni configuración por ti. Como en cada tarea, ejecuta primero la vista previa y haz una copia de seguridad antes de eliminar nada.
La optimización de tablas ejecuta el comando OPTIMIZE TABLE de MySQL para recuperar el espacio libre que queda tras grandes eliminaciones. El módulo mide primero la fragmentación de cada tabla (espacio libre frente al tamaño de los datos, leído desde information_schema) y solo optimiza las tablas que superan el umbral de fragmentación que has configurado y que realmente tienen espacio que recuperar, de modo que omite las que no se beneficiarían. Cada ejecución registra el espacio liberado y cuánto tardó en el registro de auditoría.
Un aspecto que conviene planificar: en InnoDB, OPTIMIZE TABLE reconstruye la tabla y la bloquea durante toda la operación, por lo que las tablas grandes deben optimizarse fuera de las horas punta. Por eso la programación integrada sitúa la optimización de tablas en una ventana nocturna semanal (04:00), separada de las limpiezas diarias de base de datos y archivos que se ejecutan a las 03:00 y 03:30.
No. La lista de comparación se almacena por completo en el localStorage del navegador del visitante, bajo la clave mprcompare, y el módulo no establece ninguna cookie para ello. No se escribe nada en la base de datos ni en una sesión del servidor, por lo que la función de comparación no contiene datos personales ni añade ningún requisito de consentimiento propio.
De ese diseño se deriva una limitación: una selección solo existe en el navegador que la creó, no se comparte entre un teléfono y un ordenador y desaparece cuando el visitante borra los datos del sitio.
No, no de forma predeterminada. Facebook Pixel incluye una opción excluir a los empleados conectados que viene activada de fábrica, así que cuando alguien que ha iniciado sesión en el back office de tu PrestaShop navega por la tienda, no se envía ningún evento del Pixel ni de la Conversions API por su parte. Para evitar que una página en caché sirva después ese marcado sin eventos a clientes reales, el módulo también añade cabeceras de caché no-store (incluidas CDN y Cloudflare) en esas visitas de empleados. Desactiva la opción si prefieres contar las sesiones de tu propio equipo.
El módulo declara compatibilidad desde PrestaShop 1.7.0.0 hasta la línea 9.x, y su código incluye dos conjuntos de hooks distintos. En 1.7, 8 y 9 utiliza actionFrontControllerSetMedia, displayAfterProductAddCartBtn, displayNav2 y displayBeforeBodyClosingTag, mientras que los temas 1.6 más antiguos recurren a displayHeader, displayProductButtons, displayNav y displayFooter con una plantilla de comparación específica para 1.6.
Los precios de la página de comparación se formatean mediante un envoltorio que tiene en cuenta la versión, de modo que la función sigue funcionando en PrestaShop 9, donde se eliminó el antiguo asistente de visualización de precios.
La Conversions API es opcional. El Pixel del navegador funciona por sí solo: introduce tu ID de Pixel, activa el seguimiento y disparará PageView, ViewContent, AddToCart, InitiateCheckout, Purchase, Search, AddToWishlist y CompleteRegistration directamente desde el navegador del visitante. La Conversions API es una capa aparte, del lado del servidor, que activas solo si además quieres enviar el evento Purchase desde tu servidor, lo que ayuda a recuperar conversiones que el seguimiento del navegador pierde por los bloqueadores de anuncios o los ajustes de privacidad. Necesita su propio token de acceso de Meta y, una vez activada, el módulo envía cada compra tanto desde el navegador como desde el servidor con un ID de evento compartido, de modo que Meta las fusiona en una única conversión sin duplicados.
Sí. Cuando la página de comparación solicita los datos de los productos, el módulo carga cada producto según la tienda y el idioma actuales del contexto de PrestaShop, de modo que los nombres, las descripciones cortas, los precios y las características se muestran para la tienda y el idioma que está consultando el visitante.
Los productos desactivados, o que ya no se pueden cargar, se omiten automáticamente y sencillamente no aparecen en la tabla, aunque su ID siga guardado en el navegador. La comparación se realiza a nivel de producto, por lo que la tabla no crea una columna independiente para cada combinación de un producto.
El Pixel del navegador se ejecuta por completo del lado del cliente y no necesita ningún dato personal de tu base de datos. Solo cuando además activas la Conversions API el módulo crea eventos Purchase del lado del servidor a partir del pedido: estos datos de coincidencia pueden incluir los datos del cliente y su dirección de facturación o de envío, además de las cookies de navegador _fbp/_fbc propias de Facebook cuando están presentes. Esos eventos se ponen en cola y se envían desde tu servidor a la versión de la API Graph de Meta que hayas configurado mediante una tarea en segundo plano; puedes validarlos con un código de evento de prueba de Meta antes de que cuenten en real. Como implica datos del cliente, mantén activada la opción de consentimiento para que los eventos solo se disparen después de que un visitante otorgue el consentimiento de marketing.
No. Database Cleanup solo elimina el desorden operativo. Sus siete tareas afectan únicamente a estas tablas: carritos abandonados, estadísticas de búsqueda, precios específicos caducados, registros (logs), conexiones, invitados huérfanos y registros antiguos de correo. Nunca ejecuta un DELETE sobre tus clientes, pedidos, facturas o direcciones.
Dos reglas protegen en especial tu historial: un carrito solo se elimina si un LEFT JOIN con la tabla de pedidos muestra que nunca llegó a ser un pedido, y un registro de invitado solo se elimina si ya no tiene ninguna conexión asociada. Por tanto, los carritos convertidos, el historial real de pedidos y las cuentas de clientes permanecen intactos — la herramienta borra datos sin valor de negocio, no tus registros comerciales.
No. Las consultas de limpieza se ejecutan sobre las tablas compartidas de PrestaShop (cart, log, statssearch, mail, etc.) en toda la base de datos y no están limitadas por el contexto de la tienda. En una instalación multitienda, una ejecución borra por tanto todos los registros antiguos coincidentes de todas las tiendas a la vez, no solo la que estás viendo en el Back Office.
Es intencionado para una herramienta de mantenimiento — los datos afectados (carritos caducados, registros antiguos, conexiones obsoletas) son datos de mantenimiento, no datos de catálogo o de clientes propios de una tienda. Si necesitas más control, revisa los recuentos antes de ejecutar y limpia en un periodo de baja actividad.
No hay deshacer. Cada tarea ejecuta un DELETE SQL real, por lo que las filas eliminadas desaparecen de forma permanente — el módulo no mantiene papelera ni punto de restauración. La acción de ejecutar todo se muestra precisamente con una confirmación de acción irreversible por este motivo.
Haz siempre una copia de seguridad de la base de datos antes de tu primera limpieza. La pantalla muestra el recuento exacto de cada tarea antes de ejecutarla, así que el flujo seguro es: revisar los recuentos, hacer la copia y luego limpiar una categoría cada vez o lanzar la pasada completa cuando tengas confianza.
El módulo declara compatibilidad con PrestaShop 1.6 hasta 9.x (ps_versions_compliancy min 1.6.0.0, max 9.99.99) y se usa en 1.7, 8.x y 9.x. Tus clientes nunca tienen que iniciar sesión en Facebook para ver el feed.
Para conectar el feed necesitas tres cosas de Facebook: una app de Facebook Developer con la Pages API, un Page Access Token de larga duración (la ayuda del panel pide los permisos pages_read_engagement y pages_read_user_content) y tu Page ID numérico. El nombre de la página es opcional y solo define el encabezado.
- Las publicaciones se obtienen del lado del servidor desde la Facebook Graph API
v21.0, por lo que el servidor necesita HTTPS saliente. El módulo usa cURL cuando está disponible y recurre a un streamfile_get_contentsen caso contrario. - El tiempo de espera de la petición es de 15 segundos; si Facebook devuelve un error o ningún dato, el bloque no muestra nada en lugar de romper la página.
- Hasta que guardes tanto el Page Access Token como el Page ID, un aviso del panel mantiene el feed independiente inactivo.
Como el token te pertenece a ti como propietario de la página y la obtención se ejecuta en el servidor, los visitantes nunca tienen que autenticarse con Facebook.
El feed se representa con la plantilla y el CSS propios del módulo en lugar de un embed oficial de Facebook, por lo que se adapta a tu tema en vez de ser un widget rígido. Eliges el diseño y ajustas el espaciado y el comportamiento desde los ajustes del módulo.
- Modo de diseño:
grid,slider(carrusel) olist. - Columnas: de 2 a 6 en escritorio y 1 o 2 en móvil.
- Número de publicaciones: de 1 a 25, por defecto
6. - Tema: claro u oscuro. Efecto al pasar el cursor: elevación (sombra), resplandor, resaltado de borde o ninguno.
- Espaciado: separación de la cuadrícula (por defecto
16px) y radio de las tarjetas (por defecto8px). - Slider: desplazamiento automático opcional a una velocidad de 2s a 10s, más el deslizamiento táctil en móvil.
- Imágenes: la carga diferida está activada por defecto para proteger la velocidad de las páginas.
También puedes definir un título de sección, mostrar u ocultar un botón Seguir con texto personalizado y ocultar todo el bloque en móvil con el interruptor Mostrar en móvil.
No. El módulo no inyecta el SDK ni el píxel de Facebook (connect.facebook.net / fbevents) en tu tienda. En el hook de visualización solo añade su propio CSS y JavaScript, por lo que no instala cookies de terceros de Facebook ni informa a Facebook de tus visitantes al cargar la página.
Las publicaciones se obtienen del lado del servidor: tu servidor llama a la Facebook Graph API y el resultado normalizado se escribe en un archivo de caché JSON (mprfb_feed_cache.json). Solo se almacena contenido público de la página – texto de las publicaciones, URL de imágenes, enlaces permanentes y los recuentos públicos de reacciones, comentarios y veces compartido. El módulo no recopila ni envía a Facebook ningún dato personal de los clientes.
- El token de acceso se guarda en la configuración de tu tienda y se usa solo para la obtención del lado del servidor; nunca se expone al navegador.
- Las imágenes de las publicaciones y los enlaces "ver en Facebook" apuntan a URL de Facebook / fbcdn, por lo que el navegador de un visitante carga esas imágenes desde el CDN de Facebook igual que cualquier otra imagen remota – el módulo en sí no envía nada que identifique al cliente.
Si lo prefieres, aumenta la duración de la caché (hasta 24 horas) para reducir aún más la frecuencia con la que tu servidor contacta con Facebook.
No. La fecha se calcula igual para todo el catálogo a partir de los ajustes globales — días de preparación, hora de corte, regla de fines de semana y formato de fecha. No tiene en cuenta el stock, el peso o el proveedor de un producto, ni el país o la dirección del cliente. El cálculo usa el reloj de tu servidor y no la zona horaria local del visitante, por lo que cada ficha de producto muestra la misma estimación en un momento dado. Si necesitas reglas de transporte por producto o transportista, eso es otra tarea — consulta la pregunta sobre los tiempos de tránsito más arriba.
No. El bloque de entrega se genera mientras se muestra la ficha de producto; no se escribe nada en la base de datos, no se instala ninguna cookie y no se recopila ningún dato personal como dirección IP, nombre o ubicación. La fecha se calcula al vuelo a partir de tus ajustes y del reloj del servidor, por lo que no hay nada sobre un visitante que guardar, exportar o borrar, lo que lo mantiene al margen de las obligaciones del RGPD del lado del visitante.
El módulo está creado para PrestaShop 1.6 hasta 9.x. La estimación se añade mediante el hook displayProductAdditionalInfo; en las plantillas que usan ese hook, el bloque aparece en la zona de información adicional de la ficha de producto, cerca del botón de añadir al carrito. Las etiquetas (“Entrega estimada”, “Pide en las próximas … horas”) son traducibles en los seis idiomas de la tienda, pero los nombres de días y meses de la fecha en sí los genera PHP y aparecen en inglés independientemente del idioma activo.
No. El módulo funciona por completo a través de dos hooks de PrestaShop: filterCmsContent para los encabezados de las páginas CMS y actionOutputHTMLBefore para el texto de los enlaces renderizado en pies de página y menús. Ambos se registran durante la instalación y no se crea ningún override de plantilla .tpl ni ningún override de clases del núcleo, por lo que sigue siendo compatible con tu tema y sobrevive a las actualizaciones del tema. Como actionOutputHTMLBefore reescribe el HTML final, las etiquetas de tus enlaces CMS se sustituyen allí donde aparezcan los anclajes estándar cms-page-link de PrestaShop, sin tocar un solo archivo de plantilla.
No. La única tabla del módulo (mprcmsnames) almacena cuatro columnas: id_cms, id_lang, id_shop y el texto display_name que escribes, y nada sobre clientes, pedidos o visitantes. No lee ni escribe ningún dato personal, por lo que no tiene incidencia en tus obligaciones del RGPD ni en tu política de privacidad. Es puramente una herramienta editorial de etiquetado para tus páginas CMS.
La desinstalación elimina la tabla propia del módulo mprcmsnames, por lo que cada nombre visible personalizado que hayas guardado se borra. Tus páginas CMS nativas de PrestaShop quedan intactas: sus nombres originales y meta títulos nunca se modificaron, así que el front office simplemente vuelve a mostrar los títulos CMS estándar. Nada en las tablas ps_cms o ps_cms_lang se cambia en ningún momento.
No. Es un módulo de botones de pago exprés, no un sustituto del checkout en una página. Tu checkout habitual de PrestaShop, los flujos de invitado y de cuenta y la confirmación del pedido se mantienen, y los métodos de pago estándar de PrestaShop siguen disponibles al pagar. El módulo solo añade accesos directos más rápidos de Apple Pay, Google Pay, PayPal, Link y tarjeta en las páginas que elijas (producto, carrito, listado de productos o una ubicación personalizada), de modo que mejoras la velocidad de pago sin reconstruir el proceso de compra.
Sí, si activas el guardado de tarjetas en los ajustes del módulo. Cuando está activo, el módulo añade un enlace en el área de cuenta del cliente y una página dedicada de tarjetas guardadas donde los clientes que han iniciado sesión pueden ver y eliminar sus métodos de pago guardados para compras futuras más rápidas. Los datos de la tarjeta los conserva Stripe y no se almacenan en tu base de datos de PrestaShop. Si dejas el guardado de tarjetas desactivado, no se guarda ninguna tarjeta y el enlace de la cuenta no se muestra.
Para la recuperación de carritos abandonados y el diagnóstico, el módulo registra el contexto de sesión como la identidad del cliente o invitado, la fuente de tráfico y los detalles de la campaña, el tipo de dispositivo, el navegador y las carteras disponibles en él, junto con los datos de la primera visita. Los números de tarjeta reales los procesa Stripe y no se almacenan en PrestaShop. Opcionalmente puedes activar una casilla de consentimiento de privacidad con tu propia etiqueta en el flujo de pago exprés, que enlaza a la página de política de privacidad de tu tienda, para que los compradores acepten antes de pagar.
FAQ Manager declara compatibilidad desde PrestaShop 1.6.1.0 hasta tu versión 9.x instalada, e incluye una capa ObjectModel segura para PrestaShop 1.6 para que los mismos modelos funcionen en todas esas versiones.
Cada categoría de FAQ, pregunta, respuesta, URL amigable, meta título y meta descripción se almacena por idioma en las tablas _lang del módulo, por lo que la FAQ es totalmente multilingüe: cada idioma conserva su propio texto y su propio slug.
El multitienda se admite mediante la tabla de asociación pregunta-tienda, de modo que una pregunta puede limitarse a las tiendas que elijas en lugar de imponerse a todas las tiendas del grupo.
La pestaña de FAQ de producto solo carga las preguntas asignadas directamente a ese producto; si no hay ninguna asignada, la pestaña no muestra nada en lugar de incorporar contenido de categoría no relacionado.
Para mantener ligeras las páginas de producto, el módulo trata las respuestas según su alcance: una pregunta vinculada a un solo producto puede mostrar su respuesta en el HTML inicial de la página, mientras que una pregunta compartida entre varios productos se considera relacionada y su respuesta se carga de forma diferida (lazy-load) solo cuando un comprador la abre.
El listado también respeta la fecha de publicación, las restricciones por grupo de clientes y la fecha de revelación de la respuesta, y los resultados se ordenan por el balance de votos útiles y la actualidad, de modo que las respuestas más útiles aparecen primero.
Las funciones interactivas almacenan solo lo necesario para funcionar. Un voto útil o no útil se registra en una tabla de votos con el tipo de entidad, el id de la entidad y la dirección IP del visitante, que se usa para aplicar un solo voto por IP en cada pregunta o respuesta; una cookie de PrestaShop se establece únicamente para que la interfaz recuerde cómo votaste.
Cuando un visitante envía una pregunta, el registro pendiente conserva el nombre, el correo, el texto de la pregunta, el idioma, la tienda, el contexto de producto o categoría y la IP con estado pendiente, de modo que nada aparece públicamente hasta que un miembro del personal lo aprueba. Los formularios limitan el texto de preguntas y respuestas a 5000 caracteres y usan un campo honeypot y un límite de preguntas pendientes por correo y por categoría (2 por defecto) para frenar el spam.
En las páginas de FAQ de solo lectura el módulo desactiva la escritura de cookies, por lo que solo navegar por las preguntas no genera escrituras de sesión.
Sí. Las solicitudes se almacenan por tienda y por idioma, y las URL públicas están localizadas para cada idioma de la tienda.
- Aislamiento por tienda: cada solicitud lleva un
id_shop, el slug es único por(slug, id_shop)y la consulta de la hoja de ruta filtra porid_shop, de modo que las ideas de una tienda nunca aparecen en el tablero de otra. - Contenido por idioma: cada solicitud guarda su idioma y hay prefijos de URL localizados para los seis idiomas — inglés
feature-requests, alemánfunktionswuensche, francésdemandes-de-fonctionnalites, polacopropozycje-funkcji, italianorichieste-funzionalita, españolsolicitudes-de-funciones— con reserva afeature-requestspara otros idiomas. - URL amigables: el hub, las páginas por producto, las páginas de solicitud individuales y los listados paginados tienen cada uno su propia URL localizada.
El módulo registra la identidad y la dirección IP de quien envía la solicitud para la moderación y la prevención de abusos, y luego elimina esa información de las respuestas públicas.
- Qué se almacena: para cada solicitud, el ID de cliente o, para invitados, un nombre y un correo validado, además de la dirección IP del visitante mediante
Tools::getRemoteAddr(), junto con el título, la descripción, el estado, el idioma y la tienda. - Por qué la IP: se usa para limitar los envíos a un máximo de 3 por producto por IP al día y para eliminar votos duplicados de invitados, que de forma predeterminada no requieren iniciar sesión.
- No se muestra públicamente: antes de devolver una lista al navegador, el módulo elimina
customer_email,ip_addresseid_customerde la respuesta, de modo que otros clientes nunca ven quién envió una idea ni su correo o IP.
Como almacena correo e IP, conviene mencionar estos datos en la política de privacidad de tu tienda.
El módulo está pensado para PrestaShop 1.7.6.0 y posteriores, cubriendo 1.7, 8.x y 9.x. Su compatibilidad declarada es min 1.7.6.0 hasta la versión de PrestaShop en ejecución.
Es un módulo de back-office bootstrap que se configura por completo desde el Back Office, sin programar. La pestaña de la página de producto se añade mediante un hook de visualización, por lo que no hace falta sobrescribir plantillas ni editar el tema — solo aparece cuando ENABLED y SHOW_ON_PRODUCT están activados y el producto puede identificarse. La hoja de ruta pública y las páginas de solicitud usan las rutas amigables del propio módulo en lugar de archivos del tema.
Solo el nombre del evento. La Events API de Hotjar funciona en el navegador y acepta únicamente un nombre de evento, no sus propiedades. Por eso el módulo envía a Hotjar nombres limpios como product_view, add_to_cart y purchase mediante hj('event', '...').
Los detalles como el valor del pedido, la moneda y los ID de producto los prepara el módulo, pero por transparencia se muestran en el monitor de eventos de la demo y no se envían a Hotjar. Usas los nombres de evento para filtrar grabaciones, mapas de calor, embudos y encuestas en torno a los momentos de compra relevantes.
Cada evento tiene su propio interruptor en el back office, así envías solo lo que necesitas. Los eventos integrados son: vista de página, vista de producto, vista de categoría, añadir al carrito, añadir a la lista de deseos, inicio del pago, búsqueda, compra y registro de cliente.
Las reglas de eventos personalizados son un ajuste aparte y están desactivadas de forma predeterminada, por lo que no se dispara nada adicional hasta que añades tus propias reglas.
Sí. Además de los eventos de comercio electrónico integrados, en el back office puedes definir reglas de eventos personalizados en formato JSON. Una regla puede dispararse con un clic que coincida con un selector CSS, cuando la URL contenga un fragmento, en un controlador o módulo de PrestaShop concreto, o con un evento DOM que tú emitas.
Las reglas se ejecutan desde el script de front-office del módulo, así que no tocas los archivos del tema. Los eventos personalizados permanecen desactivados hasta que los actives y añadas al menos una regla.
Cada nivel de fidelidad está vinculado a un grupo de clientes nativo de PrestaShop. Cuando un cliente alcanza un nivel, el módulo lo añade a ese grupo y elimina el grupo del nivel anterior, conservando siempre el grupo de clientes predeterminado de tu tienda. La reducción de precio real la aplica la tarificación por grupo nativa de PrestaShop y las reglas de precios de catálogo que asocies a ese grupo, de modo que tus descuentos de grupo, reglas de impuestos y restricciones existentes siguen funcionando. El porcentaje que se muestra en la cuenta del cliente es el valor informativo del nivel, así que el descuento real se configura en el grupo de clientes vinculado.
El gasto se registra por tienda. Cada registro de fidelidad es único por cliente y tienda, y tanto la acumulación en el momento del pedido como el recálculo solo suman los pedidos que pertenecen a esa tienda. Un cliente que compra en dos tiendas de la misma instalación construye, por tanto, un total de gasto y un nivel separados en cada tienda. El grupo de clientes vinculado se añade en la cuenta del cliente, y el grupo de clientes predeterminado de la tienda se conserva siempre.
La instalación no recupera el historial automáticamente; el nuevo gasto se acumula a partir del siguiente pedido validado. Para inicializar a los clientes existentes, ejecuta el recálculo, que suma para cada cliente los pedidos anteriores que están en los estados de pedido válidos configurados (por tienda) y asigna el nivel correspondiente. El mismo recálculo se ejecuta automáticamente cuando un pedido pasa después a un estado de cancelación o reembolso configurado, de modo que el total de un cliente siempre refleja el gasto realmente conservado y no un simple contador que nunca baja.
El módulo declara ps_versions_compliancy desde 1.6.0.0 hasta la versión de PrestaShop en ejecución, y su cabecera indica PS 1.6 a 9.x. composer.json requiere PHP 7.2 o superior. Solo registra el hook displayHeader, por lo que no depende de las API del controlador de front-office que cambiaron entre versiones principales.
No. Registra únicamente hooks del back-office — displayBackOfficeHeader, displayAdminOrder, displayAdminOrderMainBottom y actionOrderStatusPostUpdate — y no incluye ningún controlador de front-office. Equipos, estados de workflow, comentarios, recordatorios y notificaciones son herramientas internas del personal, así que los clientes no ven nada añadido en la tienda.
Sí. La pantalla de configuración tiene una pestaña de Permisos con interruptores independientes: permitir cambio de cliente, cambio de dirección, cambio de transportista, gestión de descuentos y añadir productos. Cada interruptor se guarda como valor booleano, de modo que puede, por ejemplo, mantener activada la edición de productos y cantidades mientras desactiva la reasignación del cliente. Tras la instalación, todos los interruptores están activados de forma predeterminada.
En la pantalla Pagos pendientes, la acción Marcar como pagado llama a markAsPaid(), que establece is_paid en 1, registra la fecha de pago y guarda el ID del empleado que lo confirmó. Si el pedido de PrestaShop vinculado sigue en el estado Esperando pago aplazado, el módulo también lo cambia a Pago aceptado (PS_OS_PAYMENT); un pedido que ya esté en otro estado permanece sin cambios. Como el importe deja de contar como pendiente, también se libera el crédito disponible del cliente para nuevos pedidos aplazados.
No. Blog Revolution determina la visibilidad en cada carga de página, por lo que no hay ninguna tarea cron ni tarea programada que configurar.
Antes de que un artículo aparezca en la tienda se comprueban dos condiciones:
- El estado debe ser Publicado — los borradores y los artículos archivados nunca se muestran a los visitantes.
- La fecha de publicación debe haberse alcanzado — cada consulta del front-office filtra por
date_published <= NOW().
Para difundir un artículo en una fecha concreta, ponlo como Publicado e indica una fecha futura. Permanecerá oculto hasta ese momento y luego aparecerá automáticamente en la siguiente carga de cualquier página del blog, sin ningún proceso en segundo plano. Esa misma comprobación de fecha mantiene los artículos con fecha futura fuera de los listados, categorías, etiquetas, archivos, el feed RSS y el sitemap XML hasta que llega su momento.
Como la comprobación se evalúa en directo y no mediante un planificador, no necesitas acceso shell ni cron en tu alojamiento, algo útil en entornos PrestaShop restringidos o compartidos.
En cada página de la tienda, la cabecera envía un evento $pageViewed a la cola omnisend y carga el launcher-v2.js externo de Omnisend desde omnisnippet1.com. Cuando un cliente ha iniciado sesión, hookDisplayHeader() también pasa su correo electrónico en una llamada identify; los invitados no envían ningún correo. El módulo no envía datos de carrito, pedido ni pago. Dado que el correo de un cliente identificado sale de tu tienda hacia un tercero, sigues siendo responsable del consentimiento y de la información de privacidad adecuados.
Sí. Cada equipo almacena un id_shop y usa por defecto el contexto de la tienda actual (Shop::getContextShopID()), y las búsquedas de equipos se filtran por tienda. Cuando un empleado abre el panel de workflow de un pedido o publica un comentario, el módulo comprueba primero con hasAuthOnShop() que esté autorizado en la tienda a la que pertenece el pedido antes de mostrar o guardar nada.
Antes de aplicar los cambios, el editor comprueba si el pedido tiene una factura y se advierte al personal de que puede ser necesaria una corrección. Un ajuste de documento de corrección automático, activado de forma predeterminada, genera un documento de corrección (abono) por la diferencia cuando se edita un pedido facturado. Puede desactivarlo si prefiere crear los documentos de corrección manualmente.
Sí. Cada pedido aplazado se guarda con el id_shop en el que se realizó, y la comprobación del saldo pendiente (getOutstandingByCustomer()) se calcula por tienda: el total impago de un cliente en una tienda no se descuenta de los pedidos realizados en otra. La lista de la cuenta del cliente también se filtra por la tienda actual. Los límites de crédito, en cambio, se almacenan por grupo de clientes en mpr_pt_credit_limit, indexada únicamente por id_group sin columna de tienda, por lo que el mismo valor de límite se aplica a ese grupo en todas las tiendas donde exista.
Sí. Blog Revolution guarda el contenido del blog por idioma y por tienda, de modo que un PrestaShop multitienda o multilingüe puede gestionar blogs distintos (o compartidos) sin que el contenido se filtre entre tiendas.
Cómo funciona en el modelo de datos:
- Los artículos, categorías y autores conservan sus campos traducibles — título, extracto, contenido, meta title/description y el slug
link_rewrite— en tablas específicas por idioma, una fila por idioma. - Cada consulta del front-office une la traducción del artículo según el idioma actual y su asociación de tienda según la tienda actual, de forma que cada tienda solo lista los artículos asignados a ella, cada uno en el idioma del visitante.
- El importador de WordPress y el exportador XML/JSON también operan para la tienda y el idioma con los que los ejecutes.
Una nota honesta: multilingüe significa que los campos son traducibles, no traducidos automáticamente. Tú redactas cada versión de idioma (o la importas); además, un artículo debe estar asociado a una tienda para aparecer en ella. Si durante una importación masiva el slug de una traducción queda vacío, el módulo puede regenerar los valores link_rewrite que falten para que los listados no se reduzcan a la URL del índice del blog.
Sí. El ajuste Alcance de la protección tiene dos modos: Toda la tienda y Páginas CMS, categorías y productos seleccionados. En el modo seleccionado, la barrera solo intercepta las páginas de producto, categoría y CMS cuyos ID coinciden con tu selección guardada (almacenada en PROTECTED_ENTITIES); todas las demás páginas se cargan con normalidad. El modo predeterminado protege toda la tienda.
Cuando la opción Disuadir a los motores de búsqueda está activada (por defecto), la página de contraseña responde con HTTP 503 Service Temporarily Unavailable, una cabecera Retry-After: 86400 y X-Robots-Tag: noindex, nofollow. Esto indica a los rastreadores que el bloqueo es temporal y les pide que no indexen la tienda protegida. Desactiva la opción si necesitas que la barrera devuelva una respuesta 200 normal.
No. La única tabla de base de datos que crea es mpr_pack_content, con tres enteros por fila: id_pack, id_product y position. No establece cookies, no usa almacenamiento local ni lee datos de clientes. Los scripts del front-office solo añaden una insignia Bundle a las fichas de producto y muestran la lista de productos incluidos, por lo que no hay nada personal que exportar o borrar para las solicitudes de RGPD.
Sí. El script del front-office observa el contenedor #js-product-list con un MutationObserver y vuelve a aplicar la insignia Bundle cada vez que la lista se actualiza por AJAX, por ejemplo con la búsqueda por facetas o el scroll infinito, de modo que las fichas de packs recién cargadas también se decoran.
El exportador llama a Shop::isFeatureActive(). Cuando el modo multitienda está activo, la consulta se limita a la tienda del contexto actual (o.id_shop = current shop), por lo que el archivo contiene solo los pedidos de esa tienda. Cuando el multitienda está desactivado, no se añade ninguna condición de tienda y se exportan todos los pedidos.
Sí. El archivo se envía como text/csv; charset=utf-8 con un BOM UTF-8 (EF BB BF) al inicio, de modo que Excel detecta UTF-8 y muestra los acentos correctamente. Cada valor va entre comillas dobles, por lo que un separador o un salto de línea dentro de un campo no rompe las columnas.
Sí. RESPECT_CONSENT está activado de forma predeterminada: cuando mprcookiesrevolution o mprcookiebanner está activo, el seguimiento espera el consentimiento de marketing. Lee la cookie mprcr_consent o mprcookie_consent y solo se activa una vez que se ha aceptado el marketing. EXCLUDE_EMPLOYEES también está activado de forma predeterminada, por lo que un empleado con sesión iniciada que navega por la tienda no es rastreado. Ambas opciones pueden desactivarse en los ajustes del módulo.
En cada página, el script de la cabecera lee ob_click_id (también acepta outbrain_click_id o dicbo) desde la URL de destino y lo guarda durante 90 días en una cookie propia mproutbr_ob_click_id. Cuando el S2S está activado, un evento en cola solo se envía a Outbrain si incluye un ID de clic válido (letras, números, puntos, guiones bajos, dos puntos y guiones, hasta 500 caracteres); los eventos sin él se omiten. La opción S2S_SEND_IP_UA controla si se conservan los metadatos de IP y user-agent.
Sí. Al instalarse, Lightweight Cookie Banner lee las hojas de estilo de tu tema activo y deduce una paleta de colores inicial, para que el banner parezca parte de tu tienda y no una superposición genérica.
La detección lee los archivos custom.css y theme.css del tema y, si faltan, la caché CCC compilada, y toma los colores de:
- las variables CSS de Bootstrap 5 / Hummingbird —
--bs-primarypasa a ser el botón Aceptar y--bs-darkel fondo del banner. - la regla
.btn-primary, que tiene prioridad sobre las variables cuando está presente, para el fondo y el texto del botón Aceptar. - el fondo de
.header-top, reutilizado como fondo del banner.
También comprueba la luminancia de cada color para que el texto siga siendo legible: un banner oscuro recibe texto claro y una etiqueta Rechazar más clara, y un banner claro recibe texto oscuro. Si no encuentra CSS del tema, aplica una alternativa razonable: banner oscuro, texto blanco y botón Aceptar azul.
Un detalle honesto: esta paleta se calcula una sola vez, durante la instalación, como punto de partida. No se vuelve a detectar automáticamente si más adelante cambias de tema. Cada color — fondo y texto del banner, colores de los botones Aceptar y Rechazar — es un ajuste normal que puedes sobrescribir manualmente en cualquier momento en la configuración del módulo.
Lightweight Cookie Banner está desarrollado para PrestaShop 1.6, 1.7, 8.x y 9.x. Su compatibilidad de versión se declara desde 1.6.0.0 hasta la versión de PrestaShop instalada, por lo que se instala en todo ese rango.
El módulo carga su CSS y JavaScript de front-office según la versión. En PrestaShop 1.7 y posteriores registra la hoja de estilos y el script mediante actionFrontControllerSetMedia, con el script cargado al final de la página; en PrestaShop 1.6 recurre a addCSS y addJS desde el hook de cabecera. El marcado del banner se genera desde los hooks del pie de página y está protegido para mostrarse una sola vez, aunque esté enganchado a la vez a displayFooter y displayFooterAfter.
Es un banner de front-office con una pantalla de configuración en el back-office y no necesita ninguna cuenta ni servicio externo — la elección del visitante se guarda en una cookie propia en tu propio dominio. Una regla que conviene conocer al instalar: no se instala mientras Cookies Revolution está activo, porque solo un módulo de consentimiento debe controlar la tienda.
Desde PrestaShop 8.2 en adelante, el módulo se engancha al hook actionGenerateDocumentReference (tipo order) y devuelve la referencia formateada. En PrestaShop 1.7.x, donde ese hook no existe, usa una sobrescritura de Order::generateReference() que delega en el módulo. Si la numeración está desactivada o no devuelve nada, PrestaShop vuelve a su referencia aleatoria predeterminada.
El módulo declara compatibilidad con PrestaShop 1.6, 1.7, 8.x y 9.x. Su compatibilidad de versión está fijada con un mínimo de 1.6.0.0 y un máximo acorde con el PrestaShop en ejecución, por lo que se instala en las tiendas actuales sin forzarlo manualmente.
No. El ajuste del hook de visualización es una única elección: el widget se muestra bajo el producto (displayFooterProduct) o en la página de inicio (displayHome), no en ambos lugares a la vez. Elige la ubicación que mejor se adapte a tu flujo de navegación. El script de seguimiento sigue registrando las vistas en cada página de producto, independientemente de dónde se muestre el bloque.
El módulo detecta y aplica reglas en cinco tipos de página del front-office: páginas de producto, páginas de categoría, páginas CMS, páginas de fabricante y páginas de proveedor. Cuando un visitante abre una de estas páginas, Product Canonical Manager identifica la entidad a partir del controlador y busca una regla que coincida para ese product, category, cms, manufacturer o supplier.
Las páginas que no están vinculadas a una de estas entidades — como la página de inicio, los resultados de búsqueda, el carrito o las páginas de cuenta — no son objetivo de las reglas, porque el módulo no tiene ninguna entidad con la que emparejarlas. Su función es controlar las señales canonical, robots y hreflang en las páginas de catálogo y contenido que los motores de búsqueda realmente indexan.
Sí. Los contadores se almacenan por tienda: la tabla mprordernumber_counter tiene una clave única en (id_shop, scope_type, scope_id) y el generador lee el ID de la tienda del contexto actual. Cada tienda incrementa su propio contador, por lo que los pedidos de una tienda no consumen los números de otra.
No. Cuando ambas vías están activas, el módulo genera un único ID de evento para la compra y pasa ese mismo ID tanto al píxel del navegador como al evento de la Conversions API en cola. Quora usa el ID de evento compartido para reconocer el evento del navegador y el del servidor como una sola conversión y deduplicarlos.
La lista conserva hasta el número definido en Máximo de productos a mostrar (8 por defecto), y la cookie del navegador que guarda los identificadores se renueva a una duración de 30 días con cada visita a un producto. El producto que se está viendo se elimina de la lista, y la consulta del lado del servidor limita además la petición a 20 identificadores antes de cargarlos. Solo se devuelven productos válidos y activos, de modo que los artículos eliminados o desactivados desaparecen automáticamente del bloque.
No. Product Canonical Manager nunca edita tus registros de producto, categoría o CMS, y no modifica los archivos del tema. Funciona por completo en el momento de la salida, mediante el hook actionOutputHTMLBefore, reescribiendo el <head> HTML final justo antes de enviar la página al navegador — reemplaza o inserta la etiqueta canonical, añade las directivas robots y reconstruye los enlaces hreflang según tus reglas.
Como no se escribe nada en tu catálogo ni en tus plantillas, el cambio es totalmente reversible: desactiva una regla y la página vuelve a la salida predeterminada de PrestaShop; desinstala el módulo y su tabla de reglas se elimina. El módulo solo almacena tus reglas SEO — ningún dato de clientes ni personal — por lo que no aumenta tu alcance del RGPD.
Sí. Además de los eventos estándar, puedes definir reglas de eventos de navegador personalizadas que se activan al hacer clic en elementos, en URL concretas, en controladores o páginas coincidentes, o en acciones del DOM. El nombre del evento, el selector, la URL y las claves de parámetros de cada regla se validan y depuran antes de guardarse, de modo que solo se almacenan reglas bien formadas.
Sí, JavaScript debe estar activado: la cookie se lee y se escribe, y las fichas de producto se obtienen mediante AJAX, todo en el navegador del visitante. Como la lista personalizada se carga en el lado del cliente después de renderizar la página, el bloque sigue siendo correcto para cada visitante incluso cuando la página que lo rodea se sirve desde la caché de página completa o la caché CDN — nada específico del visitante queda incrustado en el HTML almacenado en caché. Si JavaScript está desactivado, el bloque simplemente permanece oculto.
Sí. Cada regla tiene un ámbito de tienda: puede aplicarse a una tienda concreta o a todas las tiendas cuando su id_shop es 0. En una instalación multitienda, el resolver solo carga las reglas cuya tienda coincide con la tienda actual o con el valor de todas las tiendas, de modo que cada tienda puede tener su propia política de canonical e indexación a la vez que comparte reglas globales.
Cuando varias reglas coinciden con la misma página, el módulo las ordena por priority (la más alta primero) y la primera regla con una acción canonical determina la URL canonical de la página. Los indicadores noindex y nofollow son acumulativos — si cualquier regla coincidente los establece, se aplican — de forma que una regla amplia de noindex para todo un grupo y una regla canonical específica funcionan juntas sin conflicto.
Sí. Cada vista se guarda con la tienda en la que se produjo, y cada recuento — vistas, ventas, visitantes en directo y lista de compras recientes — se filtra por la tienda actual. Las ventas se leen únicamente de los pedidos válidos de esa tienda. Así, cada tienda de un multitienda PrestaShop muestra sus propios números y nada se mezcla entre tiendas.
Sí. Una regla de subtítulo puede contener comodines que el módulo rellena en cada página a partir de los datos de tu catálogo, de modo que un mismo texto sigue siendo específico en toda una categoría o marca. Cuando un subtítulo contiene marcadores, el resolver los procesa mediante el motor de sustitución usando la entidad, el idioma y la tienda actuales antes de mostrar el texto.
Los tokens admitidos son {name} (nombre de producto, categoría, página CMS, fabricante o proveedor), {reference} y {ean13} para productos, {price} (el precio de producto formateado), {manufacturer} y {category} (nombre de la categoría predeterminada), además de {feature:X} para el valor de una característica y {attribute:X} para el valor de un atributo de combinación.
Como los marcadores se resuelven en el momento de renderizar en el idioma actual, una sola regla masiva asignada por categoría, marca o proveedor mantiene cada página correcta sin editar los productos uno a uno. El texto de subtítulo sin marcadores se muestra exactamente como se escribió.
No. Antes de guardar una vista, el módulo comprueba si el visitante parece humano. Cuando los datos de sesión compartidos están disponibles, omite todo lo marcado como bot, centro de datos o tráfico interno; de lo contrario, recurre a una comprobación del user-agent frente a una larga lista de rastreadores y herramientas de automatización conocidos (Googlebot, Bingbot, AhrefsBot, SemrushBot, GPTBot, navegadores headless, curl/wget y similares). Las visitas de bots no se guardan, y las visitas repetidas del mismo cliente se ignoran durante 30 minutos, de modo que una persona que recargue la página no puede inflar el contador.
El subtítulo lo imprime el hook displayMprSubtitle, que debe situarse justo después del encabezado en tu tema. El Gestor de Colocación de Plantillas analiza los archivos .tpl del tema activo para localizar el h1 (o el h2/h3 de las tarjetas de listado) de cada tipo de página y luego inserta la llamada al hook después.
La colocación no sobrescribe tu tema padre. Cuando el encabezado está en un tema padre, el módulo crea una sobrescritura mínima de tema hijo con {extends} más una sobrescritura de {block}, copiando solo el bloque que contiene el encabezado en lugar de todo el archivo.
Si prefieres el control total, puedes omitir el escáner y añadir {hook h='displayMprSubtitle'} a mano en cualquier parte de tus plantillas; los temas que ya usan displayProductSubtitle pueden llamar a ese alias. Como la salida siempre pasa por un hook estándar, los subtítulos se muestran sin incrustar el marcado del módulo en los archivos del núcleo.
El rastreador de vistas guarda solo cuatro cosas por visita: el ID del producto, el ID de la tienda, el ID de invitado anónimo de PrestaShop y una marca de tiempo — sin nombres, correos electrónicos ni direcciones IP. La ventana emergente de compras recientes lee los pedidos y clientes existentes directamente de tu propia base de datos en lugar de copiarlos a una tabla nueva, y los nombres de los compradores pueden reducirse a una inicial. Las filas de vistas antiguas se depuran automáticamente a aproximadamente el doble del periodo configurado, y desinstalar el módulo elimina por completo su tabla.
Sí. Advanced SEO Sitemap Builder está diseñado para la generación programada, así que diriges el cron de tu servidor (o un servicio cron externo) a una URL de cron dedicada. El módulo no reconstruye silenciosamente todos los archivos en cada carga de página — ejecutarse de forma programada mantiene ese trabajo fuera de las peticiones de tus visitantes.
El punto de acceso cron está protegido por un token de acceso privado, que se crea automáticamente al instalar el módulo y puede regenerarse en cualquier momento desde el Back Office. Una petición sin el token correcto se rechaza con un 403, de modo que la URL de generación no queda abierta al público.
Dos salvaguardas evitan ejecuciones solapadas o excesivas: si ya hay una generación en curso, una segunda llamada se omite (una ejecución bloqueada se libera automáticamente tras unos 30 minutos), y un intervalo mínimo — una hora de forma predeterminada — impide reconstruir la sitemap con demasiada frecuencia. Puedes llamar al cron con la frecuencia que quieras; hasta que pase el intervalo, simplemente informa de que la generación se ejecutó hace poco.
Sí. Advanced SEO Sitemap Builder funciona por tienda. Cada tienda obtiene su propio archivo de índice de sitemap y sus propios archivos secundarios, y la generación se ejecuta en el contexto de tienda de la petición, de modo que las URL se detectan y se escriben para esa tienda concreta en lugar de mezclarse.
La salvaguarda que impide que dos generaciones se solapen se controla por tienda, así que una ejecución larga en una tienda no altera los archivos de otra. El enlace de sitemap que el módulo añade a la cabecera de la página también apunta al índice de sitemap de la tienda que el visitante está consultando.
Sí. En los ajustes del módulo puedes limitar el widget a todas las páginas, solo a las páginas de producto, solo a las de categoría o solo a las de compra (carrito y pedido), y un interruptor aparte "Mostrar en móvil" evita que se cargue en dispositivos móviles. La regla de página se comprueba en el servidor antes de insertar el loader de Smartsupp, así que en las páginas excluidas no se añade ningún script de chat.
No. La función de este módulo es cargar el widget de Smartsupp en tu tienda a partir de tu Website Key. Funciones como los chatbots, las grabaciones de vídeo de sesión y la mensajería multicanal se configuran en tu cuenta de Smartsupp y dependen de tu plan de Smartsupp, no de PrestaShop. Una vez conectado el widget, todo lo que actives en Smartsupp se ofrece a través de él.
No. El nombre y el correo del cliente solo se envían a Smartsupp cuando la opción "Enviar datos del cliente" está activada y el cliente ha iniciado sesión. Para invitados o visitantes sin sesión no se rellena nada: el chat sigue funcionando, solo que empieza sin ese contexto. También puedes desactivar por completo "Enviar datos del cliente" si prefieres no enviar ningún dato personal.
mpr_tax_display, y esa petición de cambio evita deliberadamente escribir la cookie de sesión privada de PrestaShop y está marcada como no-store y noindex. Como las reglas de clave de caché y de cookies varían, prueba el comportamiento en tu propia configuración de CDN / caché de página completa.No se pierde nada, porque el modulo nunca almacena el texto alternativo en su base de datos. Automatic SEO Images Alt Tags establece el valor del campo legend (alt) de la imagen en memoria, mientras se prepara cada pagina de producto, de listado o de categoria; no escribe en sus registros de imagenes. El texto alternativo generado solo existe mientras el modulo esta activo.
Si desactiva el modulo con el interruptor enabled o lo desinstala por completo, los hooks del presentador dejan de ejecutarse y las paginas vuelven al texto alternativo guardado en PrestaShop. Las leyendas que escribio a mano permanecen intactas; solo deja de aparecer el texto generado por las plantillas. De forma predeterminada (con override_existing desactivado), el modulo solo rellena los campos vacios, por lo que nunca reemplazo su texto manual.
La desinstalacion elimina unicamente los ajustes y el menu de administracion propios del modulo, y nada mas. No analiza, reescribe ni borra ningun dato de imagenes, productos o categorias, de modo que el modulo se puede probar y quitar con total seguridad.
El modulo esta orientado a PrestaShop 1.7, 8.x y 9.x (compatibilidad declarada hasta 9.99.99). Registra tres hooks del presentador: actionPresentProduct para las paginas de producto, actionPresentProductListing para los listados de categoria, busqueda y pagina de inicio, y actionPresentCategory para las imagenes de portada de categoria.
El texto alternativo de las imagenes de producto y de listado funciona en todo el rango compatible. Sin embargo, la leyenda de la imagen de categoria depende del hook actionPresentCategory, que solo existe a partir de PrestaShop 9.1. En versiones anteriores, las plantillas de producto y de listado se aplican con normalidad; solo la plantilla independiente de la portada de categoria necesita la 9.1 o superior.
Como todo se realiza en la capa del presentador y no analizando el tema ni reescribiendo el HTML, el modulo no depende de un tema concreto y sigue siendo compatible mientras su tema utilice los presentadores estandar de producto y categoria de PrestaShop.
No. El modulo es deliberadamente ligero y compatible con la cache. No ejecuta consultas a la base de datos al construir el texto alternativo, no analiza ni reescribe el HTML renderizado y nunca toca los archivos de imagen. El texto alternativo se produce mediante una simple sustitucion de cadenas sobre datos que PrestaShop ya ha cargado para la pagina.
Sus ajustes se leen una sola vez y se mantienen en una cache en memoria durante la peticion, y el generador de texto solo se crea la primera vez que se necesita. Cada leyenda se genera sustituyendo variables de plantilla como {product_name} o {category}, limpiando espacios y separadores y recortando a la longitud maxima (125 caracteres de forma predeterminada).
Como trabaja sobre los datos presentados de producto y categoria, el resultado queda capturado por la cache de pagina completa que utilice, de modo que las paginas en cache conservan el texto alternativo generado sin trabajo adicional en cada visita. No hay ninguna tarea cron, proceso en segundo plano ni proceso masivo que programar.
Ambas opciones funcionan. Puedes introducir un nombre de usuario personal de Telegram o el nombre de usuario de un bot, con o sin el prefijo @; debe tener entre 5 y 64 caracteres formados por letras, números y guiones bajos. El módulo crea un enlace https://t.me/… a esa cuenta, y eso es todo lo que hace en el lado de Telegram.
El módulo no envía respuestas automáticas, saludos ni menús de bot por sí mismo. Si deseas respuestas automatizadas, crea un bot con @BotFather en Telegram y apunta el módulo a ese bot; la automatización reside entonces en Telegram, no en este módulo.
ORDER BY RAND() sobre los productos con active = 1) y excluye cualquier producto ya promocionado dentro de la ventana de protección contra repeticiones que configures (12 semanas de forma predeterminada). No hay filtro de categoría, precio ni stock, por lo que cualquier producto activo de la tienda puede salir elegido. Para ver qué producto, código y precios se generarían antes de crear nada, usa el botón Dry Run del Back Office: devuelve la selección sin crear una regla de carrito ni publicar en redes sociales. Volver a ejecutar Dry Run o Run Now vuelve a sortear la selección.Si. En el Back Office el boton puede mostrarse en todas las paginas, solo en las paginas de producto, solo en las paginas de categoria o solo en las paginas de pago (carrito, pedido y pago en una pagina). Un interruptor independiente controla si aparece en dispositivos moviles.
Tambien puedes definir un retardo de aparicion en segundos para que el boton se muestre despues de la primera carga, y un margen para que no tape los botones de producto ni los elementos del pago. El boton solo se muestra cuando el widget esta activado y se ha guardado un numero de telefono valido.
Warehouse Revolution es compatible desde PrestaShop 1.6.1.0 hasta la línea 9.x actual, y una capa de compatibilidad integrada permite que sus clases de datos funcionen tanto en la antigua rama 1.6 como en 1.7, 8 y 9. Requiere PHP 7.1 o posterior. Todas las pantallas de gestión utilizan la interfaz nativa del back office, por lo que no se necesita software de servidor adicional.
El mensaje predefinido es opcional. Cuando estableces uno, el módulo lo añade al enlace de Telegram como texto codificado para la URL, de modo que el cliente lo ve ya escrito en Telegram y puede editarlo antes de enviarlo. Es una frase inicial, no un mensaje enviado automáticamente en nombre del cliente.
Puedes incluir el marcador de posición {url} en ese texto. El módulo lo sustituye por la dirección de la página en la que se encuentra el cliente antes de abrir el chat, lo que ofrece a tu equipo el contexto de lo que el cliente estaba viendo. Deja el campo vacío si prefieres que los clientes escriban ellos mismos el primer mensaje.
No. El modulo no incorpora el SDK de WhatsApp Business ni ningun JavaScript de terceros. En la tienda solo registra su propio archivo CSS y muestra un enlace simple a https://wa.me/<numero>. El unico script en linea es un temporizador opcional que se anade cuando configuras un retardo de aparicion.
El modulo en si no establece ninguna cookie. Cuando un visitante hace clic en el boton, se abre WhatsApp (o WhatsApp Web en escritorio) en una pestana nueva y la conversacion tiene lugar alli, en el servicio de WhatsApp.
Warehouse Revolution no descarta el stock nativo. Mantiene su propio registro —almacenes, ubicaciones y movimientos de stock— como fuente de verdad y luego vuelve a escribir la cantidad resultante en el stock_available de PrestaShop, de modo que la tienda, el catálogo y otros módulos siempre vean la disponibilidad correcta. Para los productos ensamblados a partir de componentes con una lista de materiales (BOM), la cantidad vendible se deduce del cuello de botella de la receta y se actualiza de forma programada (una tarea cron que se ejecuta aproximadamente cada 15 minutos), por lo que el front office se mantiene exacto sin intervención manual.
El módulo guarda sus ajustes en su propia tabla de configuración en lugar de mezclarlos con la configuración estándar de PrestaShop. Esos ajustes son globales: el mismo nombre de usuario de Telegram, la misma apariencia y el mismo comportamiento de visualización se aplican a todas las tiendas de una instalación multitienda.
Esta versión no ofrece un destino de Telegram independiente por tienda, por lo que si necesitas cuentas de Telegram diferentes para tiendas diferentes, actualmente no es compatible. Al desinstalar el módulo se eliminan sus ajustes guardados.
cron.php del módulo con el token de seguridad que se muestra en el Back Office — por ejemplo * * * * * php .../modules/mprweeklysale/cron.php --token=YOUR_TOKEN (también sirve una URL HTTP con el mismo token). PrestaShop no ejecuta tareas en segundo plano por sí solo, así que sin ese cron la venta no se activará en el día y la hora programados. Puedes iniciar una venta en cualquier momento con el botón Run Now de la página de configuración, que además muestra la programación, la próxima y la última ejecución y el comando cron exacto para copiar.No. Para funcionar con distintas plantillas, el modulo se registra tanto en el hook del pie de pagina como en el de antes del cierre de la etiqueta body, pero una proteccion interna garantiza que el widget se muestre una sola vez por pagina, aunque la plantilla invoque mas de uno de esos hooks.
Asi siempre obtienes un unico boton de WhatsApp, sin importar cuantas ubicaciones compatibles ofrezca tu plantilla. Si un boton parece mal colocado, ajusta la posicion, el margen y los ajustes de pagina en el Back Office en lugar de editar la plantilla.
Sí. Warehouse Revolution añade una página de devoluciones para el cliente que requiere iniciar sesión, de modo que cada solicitud de devolución queda vinculada a su propia cuenta y a sus pedidos. En el back office procesas cada RMA mediante un flujo definido —solicitado, aprobado, a la espera de la devolución, recibido, inspeccionado y, por último, resuelto o rechazado— y clasificas los artículos devueltos desde la clase A (como nuevo, crédito total al stock) hasta la clase F (invendible, baja), lo que determina si un artículo vuelve al stock vendible. Los clientes también disponen de una página de envío para seguir su pedido.
Sí. Warehouse Revolution está diseñado para operaciones multi-almacén: puedes definir varios almacenes y mantener una cantidad de stock independiente por producto en cada uno, de modo que el módulo siempre sabe cuánto tienes y dónde. Dentro de cada almacén puedes organizar el almacenamiento físico en estanterías y celdas o contenedores individuales, y adjuntar una nota de ubicación al stock de un producto, para que los preparadores vayan directos a la estantería correcta en lugar de buscar por la nave. Los movimientos de stock, los traslados entre almacenes, las órdenes de compra y las devoluciones se registran en el almacén correspondiente, lo que te da una visión precisa y por ubicación del inventario en toda la operación.
Otras categorías
¿Todavía tienes preguntas?
¿No encuentras lo que buscas? Envíanos tu pregunta y te responderemos.