
Envía presupuestos y facturas por WhatsApp directamente desde Dolibarr
La comunicación con los clientes ha cambiado. Hoy en día la mayoría de los clientes prefieren recibir sus presupuestos, facturas y documentación mediante WhatsApp antes que por correo electrónico.
WhatsAppIntegration for Dolibarr permite integrar WhatsApp directamente dentro de Dolibarr para enviar documentos con un solo clic, mantener conversaciones con los clientes y registrar automáticamente toda la actividad comercial dentro del ERP.
Entre sus principales ventajas destacan:

Una vez descargado el módulo desde DoliStore o desde el proveedor correspondiente, acceda en Dolibarr a:
Inicio → Configuración → Módulos → Instalar módulo externo
Seleccione el fichero ZIP descargado y pulse Enviar archivo.
Cuando finalice la instalación, Dolibarr mostrará un mensaje indicando que el módulo ha sido instalado correctamente.

A continuación deberá activarlo desde el listado de módulos.

Busque WhatsAppIntegration en el listado de módulos.
Pulse el interruptor para activarlo.
Una vez activado aparecerá el icono de configuración (⚙).
Pulse sobre él para acceder a la configuración del módulo.


Todos los módulos de Dolibarr incluyen documentación en formato Markdown (.md).
En nuestro caso encontrará varios documentos importantes:
Es recomendable leerlos antes de comenzar la configuración, ya que pueden contener información específica de la versión instalada.
Cada nueva versión puede incorporar nuevas funciones o modificar algunos parámetros.
Antes de comenzar a utilizar el módulo es necesario comprobar que Dolibarr permite descargar los documentos mediante enlaces públicos.
Acceda a:
Configuración → Otras configuraciones
Y compruebe que existen los siguientes parámetros:
MAIN_ENABLE_PUBLIC_PDF = 1
INVOICE_ALLOW_EXTERNAL_DOWNLOAD = 1
PROPOSAL_ALLOW_EXTERNAL_DOWNLOAD = 1
ORDER_ALLOW_EXTERNAL_DOWNLOAD = 1

Estos parámetros permiten que el cliente pueda descargar el PDF mediante el enlace seguro enviado por WhatsApp.
No es necesario modificar otros parámetros del sistema.

Una vez activado el módulo accederemos a su página de configuración.
Aquí encontraremos todos los parámetros necesarios.
El módulo puede trabajar de dos formas:
Ideal para pequeñas empresas.
No requiere contratar ninguna API.
El envío se realiza utilizando el navegador web y la sesión abierta de WhatsApp Web.
Recomendada para empresas que realizan muchos envíos.
Actualmente recomendamos Whapi.Cloud, por su excelente relación calidad/precio, estabilidad y facilidad de configuración.
Simplemente deberá introducir:
Todos estos datos son proporcionados por el proveedor de la API.
El módulo genera automáticamente la URL del Webhook.
Esa dirección debe copiarse en el panel del proveedor API para que los mensajes recibidos puedan sincronizarse con Dolibarr.
No es necesario modificar dicha dirección.
El módulo genera automáticamente una clave interna utilizada para validar el envío y recepción de archivos multimedia.
No suele ser necesario modificarla.
Una de las funciones más útiles del módulo es la posibilidad de personalizar completamente los mensajes enviados.
Existen plantillas independientes para:
Dentro del mensaje pueden utilizarse variables como:
__CLIENTE__
__REF__
__TOTAL__
__USUARIO__
__EMPRESA__
__LINK__
Estas variables serán sustituidas automáticamente por los datos reales del documento en el momento del envío.
Por ejemplo:
Hola Javier.
Le enviamos la factura FA2607-00123 por importe de 245,00 €.
Puede descargarla desde el siguiente enlace:
https://...
Si se realizan muchos envíos consecutivos, el módulo puede utilizar una cola asíncrona para evitar bloquear la interfaz de Dolibarr.
Esta opción es especialmente recomendable cuando se utilizan APIs profesionales.

Una vez configurado el módulo, enviar una factura resulta muy sencillo.
Abra cualquier factura validada.
En la parte inferior aparecerá un nuevo botón verde:
Enviar por WhatsApp
Al pulsarlo:
Todo el proceso se realiza en unos pocos segundos.


Otra de las características más potentes del módulo es el envío masivo.
Desde el listado de facturas basta con:
El sistema enviará todas las facturas seleccionadas utilizando la plantilla configurada.
Esta función resulta especialmente útil para empresas que generan un gran volumen de facturación.

Además del envío de documentos, el módulo incorpora un sistema de conversación integrado.
Desde la ficha del tercero aparecerá el botón:
WhatsApp con el cliente
Desde esta ventana podremos:
De esta forma no será necesario utilizar WhatsApp Web en una ventana independiente.
Toda la conversación queda accesible desde Dolibarr.

Cada envío realizado queda registrado automáticamente.

El módulo crea eventos dentro de Dolibarr para que cualquier usuario autorizado pueda consultar posteriormente:
Esto permite mantener un historial completo de las comunicaciones comerciales.
WhatsAppIntegration ha sido diseñado para integrarse completamente con Dolibarr sin modificar su funcionamiento habitual.
Entre sus principales ventajas destacan:
WhatsAppIntegration for Dolibarr convierte a WhatsApp en un canal de comunicación completamente integrado dentro del ERP. En lugar de alternar entre Dolibarr y el teléfono móvil o WhatsApp Web, los usuarios pueden enviar presupuestos, facturas y mensajes directamente desde la aplicación, manteniendo un historial unificado de todas las interacciones con cada cliente.
Tanto si se trata de un pequeño negocio que utiliza WhatsApp Web como de una empresa que necesita automatizar miles de envíos mediante una API profesional, el módulo ofrece una solución flexible, rápida y sencilla de configurar. Su integración con el sistema documental, el registro automático de eventos y el soporte para envíos individuales y masivos lo convierten en una herramienta que ahorra tiempo, mejora la atención al cliente y profesionaliza las comunicaciones comerciales.
Más información
Disponible en:
Español, Inglés, Francés, Alemán, Italiano y Portugués.
En la actualidad, WhatsApp se ha convertido en el principal canal de comunicación entre empresas y clientes. Cada día se envían millones de mensajes para solicitar presupuestos, confirmar pedidos, resolver incidencias o realizar el seguimiento de compras. Sin embargo, muchas empresas continúan gestionando estas conversaciones de forma manual, copiando documentos, buscando números de teléfono o descargando facturas para volver a enviarlas.
Este proceso no solo consume tiempo, sino que aumenta el riesgo de errores y dificulta el seguimiento de las comunicaciones.
En ExtreHost creemos que un ERP moderno debe facilitar el trabajo diario, no complicarlo. Por ello hemos desarrollado WhatsAppIntegration para Dolibarr, un módulo profesional que integra WhatsApp directamente en el flujo de trabajo del ERP, permitiendo enviar presupuestos y facturas sin abandonar Dolibarr.
WhatsAppIntegration es un módulo diseñado específicamente para Dolibarr ERP/CRM que permite enviar documentación comercial directamente desde la ficha del cliente o mediante acciones masivas desde los listados.
El objetivo es sencillo: reducir el tiempo necesario para comunicarse con los clientes y mejorar la trazabilidad de todas las comunicaciones comerciales.
El usuario ya no necesita descargar un PDF, abrir WhatsApp, buscar el contacto y adjuntar manualmente el documento. Todo el proceso puede realizarse desde el propio ERP.
El módulo incorpora una serie de funciones pensadas para adaptarse tanto a pequeñas empresas como a organizaciones con un elevado volumen de documentos.
Entre sus características destacan:
Uno de los mayores beneficios de esta integración es la automatización.
En muchas empresas, el envío de un presupuesto implica varios pasos:
Con WhatsAppIntegration, este proceso se simplifica enormemente y puede completarse desde la propia interfaz de Dolibarr.
Cuando una empresa envía decenas o incluso cientos de documentos cada semana, el ahorro de tiempo es considerable.
El módulo también ayuda a mantener una imagen más profesional.
Los mensajes pueden personalizarse utilizando plantillas, incorporando automáticamente datos del cliente, referencias del documento o enlaces al PDF correspondiente.
De esta forma todas las comunicaciones mantienen un formato homogéneo y se reduce el riesgo de errores derivados de la edición manual de cada mensaje.
Una de las funciones más apreciadas por nuestros clientes es el envío masivo.
Desde los listados de presupuestos o facturas es posible seleccionar múltiples documentos y enviarlos consecutivamente sin necesidad de abrir cada uno de ellos.
Esta característica resulta especialmente útil para empresas que trabajan diariamente con un elevado volumen de clientes o realizan campañas periódicas de comunicación.
Cada empresa tiene necesidades diferentes.
Por ello WhatsAppIntegration ofrece compatibilidad tanto con WhatsApp Web como con distintos proveedores de API, permitiendo elegir la solución que mejor se adapte al volumen de envíos, al presupuesto disponible o a los requisitos técnicos de cada organización.
A diferencia de soluciones externas que obligan a cambiar constantemente entre aplicaciones, WhatsAppIntegration se integra directamente en Dolibarr respetando la filosofía modular del ERP.
Esto permite mantener toda la información centralizada y facilita el seguimiento histórico de las comunicaciones realizadas con cada cliente.
El módulo resulta especialmente útil para:
Cualquier organización que utilice Dolibarr y mantenga una comunicación frecuente con sus clientes mediante WhatsApp puede beneficiarse de esta integración.
En ExtreHost no solo ofrecemos servicios de alojamiento y administración de servidores. También desarrollamos módulos profesionales para Dolibarr, integraciones a medida y soluciones orientadas a mejorar la productividad de las empresas.
WhatsAppIntegration es el resultado de esa experiencia, con un desarrollo centrado en la facilidad de uso, la estabilidad y la integración con los procesos habituales de trabajo.
Nuestro objetivo es sencillo: que puedas dedicar menos tiempo a tareas repetitivas y más tiempo a atender a tus clientes.
Si utilizas Dolibarr y quieres integrar WhatsApp en tu flujo de trabajo diario, WhatsAppIntegration puede convertirse en una de las herramientas más útiles para aumentar la productividad de tu empresa.
Más información sobre el módulo y sus características está disponible en DoliStore.
Cuando buscamos alojamiento para unos días de descanso o una escapada, normalmente queremos algo más que un simple lugar donde dormir. Queremos un espacio donde sentirnos cómodos, donde todo esté cuidado y donde la estancia resulte agradable desde el primer momento. Precisamente esa es la sensación que transmiten los Apartamentos Bambú, un alojamiento que combina comodidad, buena ubicación y una relación calidad-precio realmente atractiva.
Desde que uno llega, se percibe que se trata de un lugar pensado para el descanso. Los apartamentos están diseñados para ofrecer una experiencia acogedora, con espacios bien organizados y un ambiente tranquilo que invita a desconectar del ritmo cotidiano. No es el típico alojamiento impersonal: aquí se nota que se ha puesto atención en los detalles para que el huésped se sienta cómodo durante toda la estancia.
Uno de los aspectos que más destacan quienes se alojan en Apartamentos Bambú es su excelente ubicación. Esto permite disfrutar de la zona con facilidad, moverse con comodidad y tener a mano servicios, lugares de interés y espacios donde pasear o relajarse. La localización es ideal tanto para quienes quieren explorar el entorno como para quienes simplemente buscan tranquilidad y descanso.
Cuando una actualización automática de PrestaShop falla o una instalación empieza a dar errores inexplicables (como el bucle de redirecciones 302 o errores de Symfony), la solución más robusta no es reparar, sino trasplantar.
Esta técnica, conocida como migración quirúrgica, consiste en instalar un PrestaShop limpio y mover únicamente el "corazón" de tu negocio (productos, categorías y clientes). Es el método definitivo tanto para reparar instalaciones dañadas como para realizar una actualización mayor sin arrastrar errores del pasado.
Antes de tocar la base de datos, prepara el nuevo destino:
Instalación Limpia: Instala la versión de PrestaShop deseada en una carpeta o base de datos nueva.
Verificación: Asegúrate de que el panel de administración (Backoffice) funciona perfectamente.
Copia de archivos: Mueve las carpetas de imágenes y archivos de usuario desde la instalación antigua a la nueva:
En el caso de que sea una actualización NUEVA..
/img/(Fotos de productos y categorías).
/download/y/upload/.
En el caso de que sea una ACTUALIZACIÓN ENTRE IGUALES VERSIONES.
/img/: Contiene todas las fotos de productos, categorías, fabricantes y logos. Es vital.
/download/: Si vendes productos virtuales.
/upload/: Archivos que los clientes hayan subido.
/themes/tu-tema-actual/: La carpeta de tu plantilla.
/modules/: Aquí hay un matiz. Copia solo los módulos que hayas comprado o personalizado. No copies los módulos nativos (ps_...), deja que la instalación limpia de la 8.2 instale sus versiones actualizadas.
/mails/: Si personalizaste los correos de envío, pedidos, etc.
Para evitar el "ruido" de configuraciones corruptas, utilizaremos mysqldump desde la terminal (SSH). Este comando extraerá solo las tablas vitales del catálogo, atributos, clientes y pedidos.
Ejecuta este comando en el servidor de la instalación antigua:
(Servidor de Origen)
mysqldump -u usuario -p base_de_datos \ ps_product ps_product_lang ps_product_shop ps_product_attribute \
ps_product_attribute_combination ps_product_attribute_lang ps_product_attribute_shop \
ps_category ps_category_lang ps_category_shop ps_category_product \
ps_attribute ps_attribute_group ps_attribute_group_lang ps_attribute_lang \
ps_feature ps_feature_lang ps_feature_product ps_feature_value ps_feature_value_lang \
ps_stock_available ps_manufacturer ps_manufacturer_lang ps_manufacturer_shop \
ps_image ps_image_lang ps_image_shop \
ps_customer ps_customer_group ps_address ps_group ps_group_lang \
ps_orders ps_order_detail ps_order_history \
ps_image_type ps_meta ps_shop ps_shop_url ps_shop_group ps_lang ps_lang_shop \
ps_currency ps_country ps_country_lang \
ps_cms ps_cms_lang ps_cms_shop \
ps_linksmenutop ps_linksmenutop_lang \
ps_homeslider ps_homeslider_slides ps_homeslider_slides_lang \
ps_configuration \
> migracion_esencial.sql
sed -i 's/viejo-dominio.com/nuevo-dominio.com/g' migracion_esencial.sql
Nota: Sustituye
usuarioybase_de_datospor tus credenciales reales. El archivo resultantemigracion_esencial.sqlcontendrá toda la inteligencia de tu negocio.
Antes de importar, debemos preparar la base de datos de destino. La nueva instalación ya tiene tablas con datos de ejemplo; si importamos encima, los IDs chocarán.
Crea un archivo llamado limpiar_destino.sql con el siguiente contenido y ejecútalo en la base de datos nueva:
(Servidor de destino)
-- Desactivar revisión de llaves foráneas para poder vaciar tablas SET FOREIGN_KEY_CHECKS = 0; TRUNCATE TABLE ps_product; TRUNCATE TABLE ps_product_lang; TRUNCATE TABLE ps_product_shop; TRUNCATE TABLE ps_product_attribute; TRUNCATE TABLE ps_product_attribute_combination; TRUNCATE TABLE ps_product_attribute_lang; TRUNCATE TABLE ps_product_attribute_shop; TRUNCATE TABLE ps_category; TRUNCATE TABLE ps_category_lang; TRUNCATE TABLE ps_category_shop; TRUNCATE TABLE ps_category_product; TRUNCATE TABLE ps_attribute; TRUNCATE TABLE ps_attribute_group; TRUNCATE TABLE ps_attribute_group_lang; TRUNCATE TABLE ps_attribute_lang; TRUNCATE TABLE ps_feature; TRUNCATE TABLE ps_feature_lang; TRUNCATE TABLE ps_feature_product; TRUNCATE TABLE ps_feature_value; TRUNCATE TABLE ps_feature_value_lang; TRUNCATE TABLE ps_customer; TRUNCATE TABLE ps_address; TRUNCATE TABLE ps_orders; TRUNCATE TABLE ps_order_detail; SET FOREIGN_KEY_CHECKS = 1;
(Servidor de destino)
Ahora, inyecta el archivo que exportamos anteriormente en la base de datos nueva:
# Importar los datos esenciales a la nueva tienda
mysql -u usuario -p base_de_datos_nueva < migracion_esencial.sql
Para que las contraseñas de los clientes importados sigan funcionando, debes sincronizar la clave de cifrado.
Busca en tu instalación antigua el archivo app/config/parameters.php.
Localiza el valor de 'cookie_key'.
Pégalo en el archivo app/config/parameters.php de la nueva instalación.
Una vez completado el trasplante, realiza estas tres acciones en el nuevo panel de administración:
Regenerar .htaccess: Ve a Parámetros de la Tienda > Tráfico & SEO y pulsa "Guardar".
Limpiar Caché: En Parámetros Avanzados > Rendimiento, limpia la caché de Symfony.
Indexar Productos: En Parámetros de la Tienda > Buscar, reconstruye el índice para que el buscador de la web encuentre los productos recién importados.
Una vez que hayas volcado tus carpetas antiguas (/img, /modules, /themes, /mails) sobre la instalación limpia, el sistema está en un estado "híbrido". Sigue este orden exacto para consolidar la migración:
Sincronizar Identidad: Copia el cookie_key del archivo app/config/parameters.php antiguo al nuevo. Sin esto, las contraseñas importadas no funcionarán.
Limpieza e Importación SQL: Ejecuta el script de TRUNCATE y luego importa tu migracion_esencial.sql.
Regenerar el motor de rutas: Ve a Parámetros de la tienda > Tráfico & SEO, desactiva las "URLs amigables", guarda, y vuelve a activarlas. Esto reconstruye el archivo .htaccess.
Reconstruir el índice de búsqueda: Ve a Parámetros de la tienda > Buscar y pulsa en "Añadir los productos que faltan al índice".
Para asegurarte de que la migración ha sido exitosa y no quedan "cabos sueltos", hemos preparado este script de verificación. Puedes ejecutar estas consultas SQL para detectar posibles errores de integridad:
-- 1. Verificar si hay productos sin categorías (Productos huérfanos) SELECT COUNT(*) FROM ps_product p LEFT JOIN ps_category_product cp ON (p.id_product = cp.id_product) WHERE cp.id_category IS NULL; -- 2. Verificar si hay imágenes que no tienen asignado un producto físico SELECT COUNT(*) FROM ps_image i LEFT JOIN ps_product p ON (i.id_product = p.id_product) WHERE p.id_product IS NULL; -- 3. Comprobar que los clientes tienen su dirección asociada SELECT c.email, a.alias FROM ps_customer c LEFT JOIN ps_address a ON (c.id_customer = a.id_customer) WHERE a.id_address IS NULL;
Finalmente, ejecuta este comando para asegurar que PrestaShop tiene permisos de escritura en las carpetas que acabas de mover:
# Comprobar permisos de escritura en carpetas críticas find img/ modules/ themes/ mails/ -type d -not -perm 755 find img/ modules/ themes/ mails/ -type f -not -perm 644
Consejo final de ExtreHost: Si tras la migración ves una pantalla en blanco, activa el Modo Depuración en config/defines.inc.php cambiando PS_MODE_DEV a true. Esto te dirá exactamente qué módulo está causando el conflicto en la nueva versión.
Archivos movidos: OK.
Base de Datos inyectada: OK.
Cookie Key sincronizada: OK.
URLs e Índices regenerados: OK.
¡Tu tienda ahora es una instalación limpia, rápida y libre de errores heredados!
Este método es el más limpio y seguro para dejar atrás errores críticos de sistema. Al tratar los datos como piezas modulares, garantizas que la nueva instalación nazca sana y optimizada.
La tienda original funcionaba correctamente. La tienda clonada también arrancaba, cargaba productos, tema, páginas y estructura general. Sin embargo, al abrir el menú “Productos”, la navegación no coincidía con la original.
A simple vista parecía un problema de categorías no clonadas, pero al revisar la base de datos se comprobó que las categorías sí existían. Es decir: el problema no era la ausencia de datos, sino la forma en la que PrestaShop los estaba utilizando en la tienda clonada.
Ese tipo de incidencia es muy habitual en migraciones reales. La información está en base de datos, pero faltan asociaciones internas o configuraciones complementarias que permiten que el front-end la represente correctamente.
Lo primero fue comprobar si las categorías del menú estaban presentes en la base de datos de la tienda clonada.
Consulta usada:
SELECT c.id_category, cl.name, cs.id_shop FROM ps_category c JOIN ps_category_lang cl ON c.id_category = cl.id_category LEFT JOIN ps_category_shop cs ON c.id_category = cs.id_category WHERE cl.id_lang = 1 ORDER BY c.id_category;
Con esta verificación se confirmó que categorías como:
y muchas otras, ya existían en la base de datos destino.
Conclusión de este paso: las categorías estaban clonadas. El problema no era su ausencia.
Cuando una categoría existe pero no aparece correctamente en el menú, el siguiente paso es revisar el sistema que genera esa navegación.
En este caso se revisó si el módulo responsable era ps_mainmenu o algún sistema de menú propio del tema.
Primero se buscó la configuración del menú en ps_configuration, pero la consulta inicial no devolvió resultados:
SELECT * FROM ps_configuration WHERE name LIKE '%MAINMENU%';
Esto no significaba necesariamente que el menú no existiera, sino que el módulo podía guardar la configuración con otro nombre.
Después se comprobó directamente qué módulos de menú estaban instalados y en qué hook estaban cargados.
Consulta útil:
SELECT id_module, name, active FROM ps_module WHERE name LIKE '%menu%' OR name LIKE '%mega%' OR name LIKE '%nav%' OR name LIKE '%top%' ORDER BY name;
En la tienda origen apareció ps_mainmenu, y además se confirmó que estaba asociado al hook correcto:
SELECT m.name AS modulo, h.name AS hook, hm.position FROM ps_hook_module hm JOIN ps_module m ON hm.id_module = m.id_module JOIN ps_hook h ON hm.id_hook = h.id_hook WHERE h.name IN ('displayTop', 'displayNav1', 'displayNav2', 'displayHeader', 'displayHome') ORDER BY h.name, hm.position;
Resultado relevante:
ps_mainmenu en displayTopEn la tienda destino también existía ps_mainmenu, estaba activo y correctamente enganchado a displayTop.
Conclusión de este paso: el módulo del menú sí estaba presente y cargado correctamente.
El siguiente paso fue revisar la configuración real del módulo. En PrestaShop, ps_mainmenu no siempre guarda sus valores con el nombre “MAINMENU”, sino frecuentemente con claves relacionadas con BLOCKTOPMENU.
Consulta usada:
SELECT id_configuration, id_shop_group, id_shop, name, value FROM ps_configuration WHERE name LIKE '%BLOCKTOPMENU%' ORDER BY name, id_shop_group, id_shop;
Resultado clave:
MOD_BLOCKTOPMENU_ITEMS = CMS_CAT1,CAT2,LNK1,LNK2,LNK3
Esto significaba que el menú sí estaba configurado para incluir:
CAT2 (Productos),Por tanto, el problema no estaba en que ps_mainmenu apuntara a una categoría equivocada. El menú estaba bien configurado para cargar Productos.
Conclusión de este paso: el módulo sí sabía qué categoría debía mostrar.
Cuando el módulo, la categoría principal y la configuración son correctos, el siguiente punto a revisar es el árbol real de categorías: padres, hijos, niveles y profundidad.
Consulta usada:
SELECT c.id_category, c.id_parent, c.level_depth, c.nleft, c.nright, c.active, cl.name FROM ps_category c LEFT JOIN ps_category_lang cl ON c.id_category = cl.id_category AND cl.id_lang = 1 ORDER BY c.id_category;
Después, para centrarse solo en las descendientes de Productos, se utilizó una consulta más precisa:
SELECT c.id_category, c.id_parent, c.level_depth, cl.name FROM ps_category c JOIN ps_category_lang cl ON c.id_category = cl.id_category AND cl.id_lang = 1 WHERE c.nleft > ( SELECT nleft FROM ps_category WHERE id_category = 2 ) AND c.nright < ( SELECT nright FROM ps_category WHERE id_category = 2 ) ORDER BY c.nleft;
Esto permitió confirmar que la jerarquía existía y era coherente. Por ejemplo:
Conclusión de este paso: el árbol de categorías estaba bien definido.
En una clonación de PrestaShop es fundamental comprobar que la tienda mantiene correctamente sus referencias internas a la categoría raíz y a la categoría de inicio.
Consulta usada:
SELECT name, value FROM ps_configuration WHERE name IN ( 'PS_ROOT_CATEGORY', 'PS_HOME_CATEGORY', 'PS_SHOP_DEFAULT' );
Resultado:
PS_HOME_CATEGORY = 2PS_ROOT_CATEGORY = 1PS_SHOP_DEFAULT = 1Estos valores eran coherentes con la estructura existente. Por tanto, el problema tampoco estaba ahí.
Conclusión de este paso: la raíz de catálogo era correcta.
ps_category_groupUna vez descartados los problemas de menú, de árbol, de jerarquía y de configuración base, quedaba revisar una parte que a menudo se pasa por alto: la asociación de categorías con grupos de clientes.
En PrestaShop, una categoría puede existir, tener padre correcto y estar incluida en el menú, pero si no está asociada a los grupos adecuados, el front-end puede no mostrarla correctamente.
Consulta usada sobre las subcategorías:
SELECT cg.id_category, cg.id_group, cl.name FROM ps_category_group cg JOIN ps_category_lang cl ON cg.id_category = cl.id_category AND cl.id_lang = 1 WHERE cg.id_category IN (10,11,12,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33) ORDER BY cg.id_category, cg.id_group;
En destino, esta consulta no devolvió nada.
Eso fue el punto decisivo.
La categoría principal Productos sí tenía grupos asignados, pero todas sus hijas y descendientes carecían de asociaciones en ps_category_group. En consecuencia, el menú principal podía mostrar la categoría padre, pero no construir correctamente toda la navegación secundaria y profunda.
Conclusión de este paso: el fallo real no era el menú, sino la falta de asociaciones de las subcategorías con los grupos de clientes.
En una migración quirúrgica no se cambia todo. Se corrige únicamente lo que falta.
Como la categoría 2 = Productos ya tenía los grupos correctos, lo más limpio era hacer que todas sus descendientes heredaran esos mismos grupos.
Consulta aplicada en destino:
INSERT IGNORE INTO ps_category_group (id_category, id_group) SELECT hijos.id_category, grupos.id_group FROM ps_category AS hijos JOIN ps_category AS padre ON padre.id_category = 2 JOIN ps_category_group AS grupos ON grupos.id_category = 2 WHERE hijos.nleft > padre.nleft AND hijos.nright < padre.nright;
Esta consulta hace exactamente lo necesario:
Productos,Sin sobreescribir nada. Sin tocar categorías ajenas. Sin romper lo que ya funciona.
Ese es el espíritu correcto de una migración quirúrgica.
Tras aplicar la corrección, se volvió a comprobar la relación entre categorías y grupos.
Consulta de validación:
SELECT c.id_category, c.id_parent, cl.name, GROUP_CONCAT(cg.id_group ORDER BY cg.id_group SEPARATOR ',') AS grupos FROM ps_category c JOIN ps_category_lang cl ON c.id_category = cl.id_category AND cl.id_lang = 1 LEFT JOIN ps_category_group cg ON c.id_category = cg.id_category JOIN ps_category p ON p.id_category = 2 WHERE c.nleft > p.nleft AND c.nright < p.nright GROUP BY c.id_category, c.id_parent, cl.name ORDER BY c.nleft;
Después de la corrección, todas las categorías descendientes de Productos pasaron a quedar correctamente asociadas a los grupos requeridos, y el menú recuperó su comportamiento esperado.
En ese momento, tanto la tienda original como la clonada mostraban ya la misma estructura funcional en el menú de categorías.
Como en cualquier intervención de PrestaShop, una vez ajustadas asociaciones o configuraciones internas, es imprescindible vaciar caché.
Dependiendo del entorno, esto puede hacerse desde el panel o directamente sobre el sistema de archivos.
En entornos gestionados por consola, suele ser recomendable limpiar:
rm -rf var/cache/prod/* rm -rf var/cache/dev/*
Después de ello, se verificó el resultado directamente en el front-end comparando ambas tiendas.
El menú Productos de la tienda clonada volvió a mostrar correctamente toda la estructura de categorías y subcategorías, ya no solo las primeras visibles, sino también niveles más profundos como:
Resultado final: el menú quedó alineado con la tienda origen.
Este caso demuestra una lección importante: en PrestaShop, clonar bien no significa únicamente copiar datos visibles.
Una migración profesional exige revisar también:
Muchas incidencias no se deben a que falten productos o categorías, sino a que faltan relaciones internas que hacen posible que la tienda interprete esos datos correctamente.
En este caso, el catálogo existía. El menú también. La estructura jerárquica también. Lo que faltaba era una pieza menos visible, pero decisiva: la tabla ps_category_group.
La diferencia entre una clonación superficial y una migración quirúrgica está precisamente ahí.
Una clonación superficial deja una tienda que “parece funcionar”.
Una migración quirúrgica deja una tienda que funciona de verdad.
El proceso correcto no consiste en tocar módulos al azar ni en rehacer el menú desde cero sin entender qué pasa. Consiste en:
Cuando se trabaja así, incluso incidencias aparentemente complejas, como la pérdida parcial del menú de categorías tras un clonado, pueden resolverse de forma precisa, segura y sin romper nada de lo que ya estaba bien.
Si tu tienda PrestaShop ha sido clonada, migrada o actualizada y detectas fallos como menús incompletos, categorías invisibles, módulos que no cargan igual o comportamientos distintos entre origen y destino, no siempre hace falta rehacer toda la instalación. Ponte en contacto con nosotros.
En muchos casos, una revisión técnica precisa permite localizar el punto exacto del fallo y reconstruir únicamente lo necesario.
Ese es el objetivo de una migración quirúrgica: rescatar la tienda, conservar lo valioso y devolverle un funcionamiento estable, limpio y coherente.
¿Te ha servido esta guía? En ExtreHost recomendamos siempre realizar una copia de seguridad completa antes de ejecutar scripts SQL. ¡Suerte con tu migración!
Durante años, Firefox Nightly ha sido terreno casi exclusivo de desarrolladores inquietos y testers avanzados. Instalaciones manuales, binarios descargados a mano, perfiles separados y actualizaciones poco integradas con el sistema. Todo muy nightly, sí… pero poco práctico en entornos profesionales.
Eso acaba de cambiar.
Mozilla ha dado un paso clave: repositorio RPM oficial para Firefox Nightly, pensado específicamente para distribuciones basadas en RPM como Fedora, RHEL, CentOS Stream u openSUSE. Y esto no es un simple detalle técnico: es una señal clara de hacia dónde quiere moverse Mozilla en Linux.
Firefox Nightly sigue siendo lo que siempre ha sido:
la versión más avanzada del navegador, donde aterrizan primero las nuevas APIs, los cambios en el motor, las mejoras de rendimiento y las herramientas experimentales.
La diferencia ahora está en cómo se integra:
En otras palabras: Nightly deja de ser un experimento aislado y empieza a comportarse como un paquete de sistema serio.
Para quienes administramos servidores, escritorios corporativos o entornos de desarrollo, esto importa (y mucho).
En ExtreHost ayudamos a empresas y organizaciones a renovar su presencia digital con páginas web modernas, accesibles y totalmente funcionales. Si estás pensando en lanzar una nueva web para tu negocio o modernizar la que ya tienes, esta propuesta es para ti.
En cada proyecto, nos comprometemos a ofrecerte un servicio completo y personalizado que te permita centrarte en tu negocio mientras nosotros nos encargamos de lo demás. Esto es lo que puedes esperar al trabajar con nosotros:
Diseño atractivo y moderno, adaptado a tu imagen de marca y fácil de usar para tus visitantes.
Maquetación profesional de todas las páginas necesarias para tu sitio, con especial cuidado en la jerarquía de la información.
Optimización para móviles y tablets, garantizando una experiencia fluida en cualquier dispositivo.
Accesibilidad real, cumpliendo los estándares necesarios para personas con discapacidad visual (WCAG 2.1 AA o superior).
Migración de contenido desde tu web actual o desde otros formatos si es necesario (textos, artículos, imágenes, etc.).
Multilingüe, si lo necesitas, gestionamos sitios en varios idiomas respetando URLs y estructura de navegación.
Velocidad y rendimiento optimizados, para que tu web cargue rápido y sin fallos.
Panel de administración claro y sencillo, para que puedas gestionar tu sitio de forma autónoma si lo deseas.
Asesoramiento continuo, desde el primer contacto hasta después de publicada la web.
Depurar una web no requiere herramientas externas costosas. Los navegadores modernos como Firefox, Chrome y Edge ofrecen potentes suites de desarrollo integradas. Saber usarlas es imprescindible para detectar y solucionar errores de forma rápida, eficaz y profesional.
Cuando una página web no funciona como debería —ya sea por errores de estilo, JavaScript roto o tiempos de carga lentos—, una de las formas más rápidas y potentes de averiguar qué ocurre es usando las herramientas de desarrollo que ofrecen los navegadores modernos. En este artículo te explicamos cómo hacerlo en Firefox, Chrome y Microsoft Edge, comenzando por Firefox, nuestra opción preferida para desarrolladores exigentes.
Firefox es uno de los navegadores más completos a nivel de herramientas de desarrollo. Para abrirlas, pulsa:
Una vez abiertas, verás distintas pestañas. Estas son las más importantes:
Europa está construyendo su propio camino hacia una tecnología más responsable y descentralizada, apoyada por talento freelance de alto nivel. Esta evolución no solo permite innovar con velocidad, sino también con criterio y sostenibilidad. Si estás buscando nuevas oportunidades, el momento de actualizarte es ahora.
El ecosistema tecnológico europeo está cambiando más rápido que nunca. Ya no se trata solo de adoptar inteligencia artificial, sino de reorganizar completamente las bases sobre las que se construyen las soluciones tecnológicas. Así lo revela el reciente informe Tech Trends 2025 publicado por Malt, el mayor marketplace freelance de Europa. En este artículo, desglosamos lo que necesitas saber sobre las nuevas tendencias, herramientas, lenguajes, amenazas y oportunidades que están marcando el camino del desarrollo y la arquitectura de software en los próximos años.
Si tu web ha perdido posicionamiento en buscadores y has notado una drástica reducción de tráfico, es momento de analizar las posibles causas. A continuación, te explicamos algunos de los motivos más comunes y cómo solucionarlos.
Si tu sitio web utilizó anteriormente un CMS antiguo, como por ejemplo PHPNuke o cualquier otro sistema antiguo, es posible que tengas un script de compatibilidad, debes revisarlo por si este hubiera dejado de funcionar debido a actualizaciones en la versión de PHP. Esto puede generar errores en tu web y afectar el rastreo por parte de los motores de búsqueda.
Solución: Revisa los registros de errores de tu servidor y el funcionamiento del script y asegúrate de que todos los scripts sean compatibles con la versión actual de PHP. Si es necesario, actualiza o reescribe el código.
El sitemap.xml es esencial para que los motores de búsqueda indexen correctamente tu sitio. Si ha dejado de funcionar debido a una actualización o cambio en tu plataforma, Google y otros buscadores pueden tener problemas para descubrir e indexar tus páginas.
Solución: Verifica si el mapa del sitio es accesible y válido utilizando herramientas como Google Search Console. Si no es válido, genera uno nuevo y actualiza la configuración en tu archivo robots.txt.
Lunes: 9am - 7:30pm
Martes: 9am - 7:30pm
Miércoles: 9am - 7:30pm
Jueves: 9am - 7:30pm
Viernes: 9am - 1:30pm
(Viernes tarde, cerrado)
Mañanas, 9am-1:30pm
Tardes, 4pm-7:30pm
Sáb y Dom: Cerrado