Система ООП Magento очень хороша, и это благо иногда создает проблемы для тех, кто еще не углубился в ее структуру.
Если вы внимательно следите за методом "getUsedProducts()
" в классе "Mage_Catalog_Model_Product_Type_Configurable
", вы увидите, что имеется некоторая логика" if
", а также использование ее свойств (например," _usedProducts
"," _configurableAttributes
").Это мешает вам получить реальный результат, но ошибка не в Magento, а в том, что у вас нет документации на Magento.
Позвольте мне прояснить вам первые несколько строк этого метода: -
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);
}
....
Этот метод имеет 2 аргумента - "$requiredAttributeIds
" (идентификаторы настраиваемых атрибутов) и "$product
" (настраиваемый объект продукта).
При вызове этого метода вы передаете«null
» для параметра «$requiredAttributeIds
», но вы предоставляете правильный объект конфигурируемого продукта «$product
».
Этот класс имеет свойство «_usedProducts
» (для ведения данныхдочерних простых продуктов), который устанавливается для каждого объекта «Конфигурируемый продукт».Если это значение было ранее установлено, то Magento вернет вам уже доступные значения.Это основная причина, по которой вы получаете дочерние продукты до того, как конфигурируемый продукт был обновлен.
Итак, вы можете очистить полное хранилище Cache вместе с обновлением всех процессов Cache.Может быть, тогда ваш результат сработает, потому что внутри Magento хранит все данные об используемых продуктах в кеше.
Надеюсь, это поможет.