Todo lo que querrías saber antes de instalar.
Una mirada detallada a cómo funciona Dynamic Product Groups Subcategorías Shopware 6 — DfStreamCategoryTree: filtro de categoría recursivo que incluye las categorías hijas, por qué lo construimos así y la lógica detrás de las características anteriores.
Por qué el filtro de categoría nativo no desciende por el árbol
El constructor de condiciones de los grupos dinámicos expone un campo Categories que consulta la asociación product.categoriesRo. Esa asociación solo lista las categorías a las que un producto está explícitamente vinculado en su pestaña Categories. Un catálogo bien organizado ubica sus productos en las categorías hoja: un modelo de zapatillas está en Hombre, Calzado, Zapatillas, no en Hombre. La consecuencia es mecánica: un filtro sobre Hombre devuelve solo los escasos productos asignados directamente a ese nivel. No es un error, es el comportamiento documentado de la asociación, pero sorprende sistemáticamente al crear un stream de merchandising sobre una familia entera.
Qué hace product.categoryTree
Shopware ya mantiene en cada producto un campo JSON llamado categoryTree que contiene el identificador de todas las categorías de la ruta, desde la raíz hasta la categoría de asignación. El CategoryIndexer lo recalcula en cada desplazamiento de categoría y en cada cambio de asignación de producto. El storefront lo utiliza internamente para los listados de categoría. Un filtro equalsAny sobre este campo con el identificador de una categoría padre recupera por tanto todos los productos cuya ruta pasa por ella, sea cual sea la profundidad. El campo existe y funciona en el DAL, pero la administración no lo ofrece en el selector del constructor de condiciones: no figura en la lista de autorización del servicio productStreamConditionService.
El papel exacto del plugin
DfStreamCategoryTree añade una línea a esa lista de autorización y aporta las etiquetas traducidas correspondientes. Eso es todo, y es deliberado. No introduce ningún decorador de servicio, ningún listener de eventos de producto, ninguna tabla, ninguna migración. El filtro construido en la interfaz es un filtro DAL perfectamente estándar, evaluado por el mismo motor que las demás condiciones del stream. También significa que un stream configurado con este plugin sigue siendo legible y utilizable aunque el plugin se desactive más adelante: el filtro sigue funcionando a nivel DAL, solo desaparece la visualización del campo en la interfaz.
Casos de uso típicos
Una página de categoría de navegación alimentada por un grupo dinámico sobre toda una familia de productos, sin listar las subcategorías a mano. Una regla de promoción que aplica un descuento a toda una sección, subsecciones incluidas. Un bloque de cross-selling automático construido sobre la sección a la que pertenece el producto consultado. Un feed de exportación o un bloque de Shopping Experience alimentado por un stream que debe reflejar una rama completa del catálogo. En todos estos casos, la versión nativa obliga a reabrir la configuración con cada nueva subcategoría. La versión categoryTree no exige mantenimiento alguno.
Instalación y recompilación de la administración
El plugin se instala subiendo un ZIP en Extensions, My extensions, o depositando la carpeta en custom barra plugins y ejecutando después plugin:refresh y plugin:install --activate. Como modifica el comportamiento de la administración, es necesaria una recompilación del bundle admin una vez tras la instalación mediante el comando build-administration o bin barra console bundle:dump seguido de la compilación. En un entorno de producción gestionado por un pipeline de despliegue, esa recompilación suele formar parte ya de los pasos estándar. Una vez recompilada la administración, el campo aparece de inmediato en el selector de condiciones, sin configuración de plugin que rellenar.
Lo que el plugin no hace
No sustituye al filtro Categories nativo, se añade junto a él. No modifica el algoritmo de indexación de categorías ni el cálculo de categoryTree, consume lo que Shopware ya produce. No se aplica a los filtros de listado del storefront ni a la navegación por facetas, que dependen de otro mecanismo. No funciona en Shopware Cloud, ya que la versión SaaS alojada por Shopware no permite instalar plugins de servidor. Y no pretende acelerar la evaluación de los streams: al ser el campo nativo e indexado, el coste de evaluación es el de un filtro estándar, ni más ni menos.
No hay valoraciones aún.