Получите простые продукты, относящиеся к конфигурируемому продукту, ПОСЛЕ конфигурируемого сохранения продукта - PullRequest
9 голосов
/ 05 июля 2011

В magento можно получить простые продукты, связанные с конфигурируемым продуктом, используя следующий вызов:

$childProducts = Mage::getModel('catalog/product_type_configurable')->getUsedProducts(null, $product);

Я пытаюсь вызвать эту функцию после сохранения конфигурируемого продукта, чтобыЯ могу получить новый список простых продуктов, которые он использует.Поэтому я выполняю приведенный выше вызов из метода, который запускается событием catalog_product_save_after.Однако после вызова $childProducts сохраняет простые продукты, которые были связаны с $product ДО операции сохранения, а не после нее.

Как можно получить простые продукты, связанные с $product после операции сохранения?

Заранее благодарим за любые предложения.

1 Ответ

7 голосов
/ 05 июля 2011

Система ООП 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 хранит все данные об используемых продуктах в кеше.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...