sistema de programación orientada a objetos de Magento es muy buena, y esta bondad a veces crea problemas para los que todavía no han profundizado en su estructura.
Si usted sigue de cerca el método "getUsedProducts()
" en la clase "Mage_Catalog_Model_Product_Type_Configurable
", se verá que hay algunos "if
" lógicas proporcionan, junto con el uso de sus propiedades (como "_usedProducts
", "_configurableAttributes
") . Esto le impide obtener el resultado real, pero la falla no es de Magento, sino que la falla se debe a la falta de documentación de Magento.
Déjeme claro acerca de las primeras líneas de este método: -
Varien_Profiler::start('CONFIGURABLE:'.__METHOD__);
if (!$this->getProduct($product)->hasData($this->_usedProducts)) {
if (is_null($requiredAttributeIds) and is_null($this->getProduct($product)->getData($this->_configurableAttributes))) {
// If used products load before attributes, we will load attributes.
$this->getConfigurableAttributes($product);
// After attributes loading products loaded too.
Varien_Profiler::stop('CONFIGURABLE:'.__METHOD__);
return $this->getProduct($product)->getData($this->_usedProducts);
}
....
Este método tiene 2 argumentos - "$requiredAttributeIds
" (configurable Atributo IDS) & "$product
" (configurable producto objeto).
Al llamar a este método, está pasando "null
" para el parámetro "$requiredAttributeIds
", pero está proporcionando el objeto de producto configurable correcto "$product
".
Esta clase tiene una propiedad "_usedProducts
" (para mantener los datos de productos simples para niños), que se establece para cada objeto de producto configurable. Si este valor se estableció anteriormente, Magento le devolverá los valores ya disponibles. Esta es la razón principal por la que obtiene los productos secundarios antes de que se actualizara el producto configurable.
Por lo tanto, lo que puede hacer es que se puede borrar la caché de almacenamiento completa, junto con refrescante todos los procesos de caché. Puede ser que su resultado funcione, porque internamente Magento almacena todos estos datos de productos usados en el caché.
Espero que ayude.
Gracias por la respuesta detallada, creo que esto tiene, al menos, me puso en el camino correcto. Intenté borrar el caché (es decir, borrar todo en var/cache) pero sigo teniendo el mismo problema. Lo extraño es que si guardo el producto configurable de nuevo, puedo ver los productos simples correctos asociados. Así que tengo que guardar dos veces para obtener el efecto que estaba buscando después de guardar una vez. También probé en busca de la clase Mage_Catalog_Model_Product_Type_Configurable como usted sugiere, pero no pudo encontrarlo en app/código/core/Mago/Catálogo/modelo/producto/Tipo/configurable. ¿Cómo lo encontraste? – Epicurus
¿Qué versión de Magento estás usando? –
Estoy usando Magento CE 1.5.1.0. Logré encontrar el archivo (app/code/core/Mage/Catalog/Model/Product/Type/Configurable.php). Y tenías razón, el caché era realmente el problema.Sin embargo, simplemente borrar el caché no fue suficiente. Tuve que deshacer el atributo '_cache_instance_products' explícitamente antes de llamar a' getUsedProducts() '. Hice esto usando 'Mage :: getModel ('catalog/product_type_configurable') -> getProduct ($ product) -> unsetData ('_ cache_instance_products');' – Epicurus