# Cambiar la Combinación en el Carrito PrestaShop: instalación y configuración

> Presentación El módulo permite al cliente cambiar la combinación de un producto (talla, color o cualquier otro atributo) directamente desde la página del carrito, sin eliminar la línea. La nueva…

- Página: <https://www.datafirefly.com/es/documentation/dfcartcombination/>
- Idioma: es
- Actualizado el: 2026-10-13
- Otros idiomas: [fr](https://www.datafirefly.com/documentation/dfcartcombination/index.md), [en](https://www.datafirefly.com/en/documentation/dfcartcombination/index.md), [de](https://www.datafirefly.com/de/documentation/dfcartcombination/index.md), [it](https://www.datafirefly.com/it/documentation/dfcartcombination/index.md), [pl](https://www.datafirefly.com/pl/documentation/dfcartcombination/index.md), [nl](https://www.datafirefly.com/nl/documentation/dfcartcombination/index.md), [pt](https://www.datafirefly.com/pt/documentation/dfcartcombination/index.md)
- Índice: <https://www.datafirefly.com/es/documentation/llms.txt>

## Presentación

El módulo permite al cliente cambiar la combinación de un producto (talla, color o cualquier otro atributo) directamente desde la página del carrito, sin eliminar la línea. La nueva combinación conserva la cantidad, la dirección de entrega y la posición de la línea. El servidor comprueba el stock y la cantidad mínima antes del cambio.

## Instalación

1. En **Módulos > Gestor de módulos**, haga clic en **Subir un módulo** y envíe el archivo `dfcartcombination-1.0.0.zip`.
2. El módulo se engancha a los hooks `displayCartExtraProductActions` y `actionFrontControllerSetMedia`, y crea la tabla `ps_dfcartcombination_log` para el historial.
3. Abra la configuración del módulo. Todo está activo por defecto, en modo botón con ventana.
4. Añada al carrito un producto con al menos dos combinaciones y abra la página del carrito para comprobar la visualización. Si no aparece nada, vacíe la caché en **Parámetros avanzados > Rendimiento**.

## Ajustes

- **Activar el módulo**: desactivado, no se carga nada en la página del carrito.
- **Modo de visualización**: _Botón con ventana de selección_ (un enlace «Modificar» por línea) o _Listas desplegables en la línea del carrito_ (una lista por grupo de atributos, cambio aplicado al seleccionar).
- **Colocar bajo los atributos del producto**: mueve el selector bajo los atributos de la línea. Desactívelo para dejarlo donde su plantilla llama al hook, normalmente en la columna de acciones junto a la papelera.
- **Mostrar el precio por combinación**: precio de la combinación elegida, precio tachado si hay descuento y diferencia respecto a la línea actual. El precio sigue la visualización con o sin IVA del grupo del cliente.
- **Mostrar el estado del stock**: En stock, Solo quedan X, Disponible bajo pedido o Agotado. El mensaje «Solo quedan X» usa el umbral de cantidad restante definido en PrestaShop. No se muestra nada si la gestión de stock está desactivada.
- **Mostrar la imagen de la combinación**: primera imagen asociada a la combinación, si no la imagen de portada del producto.
- **Combinaciones no disponibles**: _Mostrar desactivadas_ u _Ocultar_. El valor de la línea actual siempre queda visible.
- **Productos excluidos**: ID de productos separados por comas. El selector no aparece para estos productos y el servidor rechaza cualquier cambio sobre ellos.
- **Color de acento**: color del botón principal y de los valores seleccionados.
- **Registrar el historial de cambios**: alimenta las estadísticas mostradas bajo el formulario.

## Lado cliente

### Modo ventana

El botón **Modificar** abre una ventana con la imagen de la combinación, el nombre del producto y la cantidad de la línea. Los grupos de atributos siguen el orden del catálogo:

- grupos de tipo color: muestras, con la textura del atributo si existe;
- grupos de tipo radio o lista: botones, o una lista desplegable a partir de 8 valores.

Abajo, el precio, la diferencia de precio y el estado del stock de la selección se actualizan con cada clic. El botón **Actualizar carrito** permanece inactivo mientras la selección sea igual a la línea o no esté disponible. La ventana se cierra con Escape, la cruz o un clic fuera, y se maneja con el teclado (flechas entre los valores de un grupo). En móvil se abre desde la parte inferior de la pantalla.

### Modo listas desplegables

Cada grupo de atributos se convierte en una lista dentro de la línea. El cambio se envía en cuanto se elige un valor. Las filas de atributos que la plantilla ya muestra (por ejemplo «Talla: S») se ocultan para no duplicarlas. Un mensaje bajo las listas indica la actualización en curso o el error.

### Combinación inexistente

Si el valor elegido no existe con los demás atributos seleccionados (M Azul ausente del catálogo, por ejemplo), el módulo pasa a la combinación existente que contiene ese valor y conserva más atributos actuales, priorizando una combinación que se pueda pedir.

## Controles antes del cambio

El navegador envía el producto, la combinación actual y la elegida. El servidor comprueba entonces:

- el token de la sesión;
- que el producto está activo y disponible para pedido, y que el modo catálogo está desactivado;
- que la combinación elegida pertenece al producto y a la tienda;
- que la línea original sigue en el carrito, sin personalización;
- que el producto no está vinculado a una regla de carrito con regalo del carrito;
- que la cantidad final alcanza la cantidad mínima de la combinación;
- que el stock cubre la cantidad final, salvo si la venta sin stock está permitida para el producto.

La nueva combinación se añade con el método nativo `updateQty` y después se retira la antigua con `deleteProduct`. Si la retirada falla, el añadido se anula. Si la combinación elegida ya está en el carrito, las cantidades se suman en una sola línea. Si no, la nueva línea recupera la fecha de añadido de la antigua para conservar su lugar en el carrito.

Tras el cambio, el módulo lanza el evento `updateCart` de PrestaShop. La plantilla recarga entonces la lista, los totales y el minicarrito. Si la plantilla no reacciona en 3 segundos, la página se recarga.

## Líneas no afectadas

- productos sin combinaciones o con una sola combinación;
- líneas con personalización (texto, archivo);
- productos regalados por una regla de carrito;
- productos excluidos en la configuración.

## Historial y estadísticas

Bajo el formulario de configuración, el bloque **Historial de cambios** muestra:

- el número de cambios y de carritos afectados en 30 días;
- el número de carritos modificados convertidos en pedidos, con la tasa;
- los 10 productos más modificados;
- los 20 últimos cambios, con la combinación de partida y la elegida.

El botón **Borrar historial** elimina los datos de la tienda actual. Un producto que se cambia a menudo a la talla superior indica una guía de tallas o una ficha que conviene revisar.

## Plantillas y personalización

La plantilla Classic y la mayoría de plantillas derivadas llaman a `displayCartExtraProductActions` en cada línea del carrito. Si su plantilla no lo llama, el script crea el selector a partir de los enlaces de eliminación de las líneas (`data-id-product` y `data-id-product-attribute`). El archivo JavaScript solo se carga en la página del carrito.

Para ajustar el estilo, sobrescriba en el CSS de su plantilla las variables `--dfcc-accent`, `--dfcc-text` y `--dfcc-border`, o las clases `.dfcc-edit`, `.dfcc-modal__dialog` y `.dfcc-option`.

Con una plantilla muy personalizada o un módulo de carrito lateral, pruebe el cambio de combinación en una copia de la tienda, como invitado y como cliente conectado.

## Para desarrolladores

Tras cada cambio correcto, el módulo ejecuta el hook `actionDfCartCombinationChange` con los parámetros `cart`, `id_product`, `id_product_attribute_from`, `id_product_attribute_to` y `quantity`. Un módulo de terceros puede engancharse para sincronizar un CRM o una herramienta de analítica.

## Limitaciones conocidas

- Las líneas personalizadas conservan su combinación en la versión 1.0.0.
- El cambio se hace desde la página del carrito, no desde el resumen del proceso de compra ni desde el minicarrito.
- Un módulo de carrito lateral que no use el evento `updateCart` solo se actualiza al recargar la página.
