Productos configurables y conjunto de atributos

18

TL; DR : ¿Hay alguna razón por la cual los productos simples asociados a un producto configurable tienen que estar en el mismo conjunto de atributos que el producto configurable en sí? Quiero decir, ¿hay alguna razón técnica ? Sé la razón del "sentido común". Si vende un par de zapatos , todas las versiones según el color y el tamaño también deben ser zapatos .
Versión larga : tuve la tarea de "fusionar" algunos productos configurables. Quiero decir de 2 o más para hacer solo uno. No quería hacerlo manualmente debido a la cantidad de productos y no quería pasar por$product->load(..)->set...()->save()debido a la cantidad de tiempo que llevó ejecutar el script. Así que cortocircuité el proceso porque estaba seguro de que ninguno de los productos simples se superponía. Había una combinación única de tamaño y color. Hice esto:

Mage::getResourceSingleton('catalog/product_type_configurable')
    ->saveProducts($mainConfigrableProduct, $simpleProductIds);

donde $simpleProductIdshay una matriz de todos los identificadores de productos simples asociados a todos los productos configurables que deben fusionarse.
Esto funcionó perfectamente para la mayoría de los productos, pero había algunos que tenían problemas.
Si llamara

$productIds = $product->getTypeInstance()->getUsedProductIds() 

Obtendría todos los identificadores de productos simples, pero en el backend aparecieron solo algunos. Después de excavar por un tiempo descubrí que los únicos que se mostraban eran los del mismo conjunto de atributos que el producto configurable. El otro conjunto de atributos es muy similar al primero, solo algunas diferencias menores, pero contiene los atributos configurables (tamaño y color).
Y ahora lo extraño. En la interfaz, esperaba ver todos los productos ($ productIds en el código anterior) o solo los productos en el mismo conjunto de atributos. Bueno, había algo en medio.

  • 20 identificadores de producto asociados: 5 tamaños, 4 colores
  • 10 productos asociados en el backend - 5 tamaños, 2 colores - los otros 2 colores (10 productos) estaban en un conjunto de atributos diferente
  • 15 combinaciones en la interfaz - 5 tamaños 3 colores (???)

Pude resolver el problema cambiando el conjunto de atributos para los productos que no aparecían, pero todavía estoy desconcertado.

Nota : No intentes esto en casa. O puede probarlo en casa pero no en un servidor en vivo.

Marius
fuente

Respuestas:

13

Después de preguntar por esto, son las razones que tengo. Espero que sea satisfactorio para ti, aunque probablemente sea lo que esperabas.

  1. La interfaz adminhtml se creó con la intención de dificultar que los comerciantes se equivoquen por completo.

Por esa razón, muchas funciones que proporciona Magento como Framework no son posibles a través de la interfaz de usuario.
La razón por la cual solo los productos en el mismo conjunto de atributos son seleccionables como productos simples asociados para configurables es porque eso es lo que estaba en las especificaciones.
Como dijiste, tiene sentido de esa manera.

  1. Otra razón es pensar en el propósito de los conjuntos de atributos. Una de las razones por las que existen es para reducir la cantidad de atributos y opciones que deben cargarse y procesarse durante una solicitud. Aplicar este pensamiento a los configurables tiene sentido, ya que es un tipo de producto relativamente costoso en recursos.

Debido a que el backend se construyó de esa manera, nunca se esperaba que la lógica frontend para configurable tratara con productos simples de diferentes conjuntos de atributos.
Es por eso que las restricciones no se implementan completamente allí.

Probablemente sería fácil hacer que los configurables funcionen con simples de diferentes conjuntos de atributos. Simplemente no fue pensado de esa manera.

No pregunté más y no miré para ver qué interacción de código producía exactamente el extraño resultado en la interfaz. Probablemente no sea importante, ya que si entendí correctamente, usted está pidiendo el razonamiento detrás de la decisión de excluir productos simples de conjuntos de atributos diferentes a los configurables, no la explicación del código.

Vinaí
fuente
Gracias vinai Esperaba profundamente en mi mente por una razón "alucinante". Hubiera sido divertido :). Esta es una explicación satisfactoria. En cuanto al "resultado extraño", no hay necesidad de cavar en el código. Lo haré cuando me aburra. Todavía tengo el volcado de DB y la forma de reproducir el mismo resultado. Lo más probable es porque estaba jodiendo directamente en la base de datos. Publicaré un resultado cuando / si encuentro uno.
Marius
2
Tsk tsk, @Marius - no toques el db;)
philwinkle
44
@philwinkle. Lo sé, lo sé, el universo explotará si lo haces. ¿Qué puedo decir? Me gusta vivir peligrosamente. En mi defensa, dije "no intentes esto en un servidor en vivo".
Marius
1
Todavía estoy esperando que me sorprendan también ... :)
Vinai
2

Utilizamos una extensión llamada RapidFlow de Unirgy (que no puedo recomendar lo suficiente) para importar y exportar. Una de las características de la versión Pro permite cambiar los conjuntos de atributos. Otra es la creación de productos a través de la importación CSV. Ocasionalmente creamos nuevos productos simples para configurables, y a veces, por accidente, esos productos simples tienen diferentes conjuntos de atributos que sus padres.

Rapidflow importará felizmente estos productos y cambiará los conjuntos de atributos. Tendemos a no estar contentos con los resultados. Los productos configurables que están configurados por atributos fuera de su conjunto de atributos no se procesan en el administrador del producto y deben repararse. Si no cambiamos el conjunto de atributos del padre, como usted ha notado, los hijos simplemente no se asocian correctamente con su padre. Existen como entidades de Magento, se pueden editar, pero no aparecerán como elementos secundarios en la página de productos front-end o en la lista de productos asociados configurables de los padres.

Entonces, desde un punto de vista puramente técnico, es posible que los productos simples estén en un conjunto de atributos diferente al de sus padres. Pero como este comportamiento no es compatible, incluso en EE, y la Navaja de Occam dice que cuando diseñaron Magento, los desarrolladores de Varien no vieron la necesidad.

Programación programada regularmente
fuente
1
Gracias por la respuesta (y la recomendación de extensión) pero esto no responde a mi pregunta. Dije que he logrado resolver mi problema cambiando la base de datos directamente. Sé que no debería hacer eso, pero tenía un buen conocimiento de lo que estaba haciendo, y una copia de seguridad de la base de datos :). Tenía curiosidad por saber por qué existe esta restricción. En cuanto a que "los desarrolladores de Varien no vieron la necesidad" tengo la sensación de que estás equivocado. Si implementa una restricción, debe ser una razón para ello.
Marius