Вопрос

Я наткнулся на этот блок кода в расширении, которое перебирает дочерние продукты и пытается вернуть их текущее количество на складе и название дочерних продуктов:

<?php foreach ($this->getChildProducts() as $childProduct) : ?>
        <?php $childProductStockQty = $this-> getProductStockQty($childProduct);?>
        <?php if ($childProductStockQty > 0) : ?>
            <tr>
                <td><?php echo $childProduct->getName() ?></td>
                <td class="a-center"><?php echo $childProductStockQty ?></td>
            </tr>
        <?php endif ?>
    <?php endforeach ?>

В CE 1.9.0.1 это сработало идеально, вернув как названия продуктов, так и количество на складе, как ожидалось.В CE 1.9.1, он вернет правильные количества на складе, но имя возвращает null.

Мой вопрос не столько в том, "что не так с этим расширением?", я также отправил вопрос разработчику.Мне интересно, знает ли кто-нибудь из вас, есть ли изменения в CE 1.9.1 в разделе "как получить дочернее название продукта".

Считывание кода вниз по Mage/CatalogInventory/Block/Stockqty кроличья нора не пролила никакого света, который я мог бы обнаружить.

Мы ценим любые советы.

Это было полезно?

Решение

Интересно, что name возвращает значение null.Просматривая код, в котором он оказывается getUsedProducts это должно Retrieve array of "subproducts" и возвращает коллекцию продуктов.

Нет никаких изменений, которые я мог бы увидеть при сравнении локального репозитория с 1.9.0.1 до 1.9.1, так что это небольшая загадка.Еще более странно, что вам возвращают товар, но имя равно null..Оба должны присутствовать в модели, поскольку они являются обязательными полями.Возможно, модуль вносит какие-то дополнительные изменения в коллекцию, которые влияют на поведение ядра.

Но чтобы ответить на вопрос.Я не вижу ничего, что изменилось бы между этими двумя версиями.

Другие советы

Я решаю это с помощью этой строки

<?php $childProduct = Mage::getModel('catalog/product')->load($childProduct->getId()); ?>

Итак, я получаю всю информацию о дочернем продукте, и теперь getName получает то, что мы ожидаем.

Я надеюсь, что это поможет!не самый лучший способ, но работает.

Во-первых, есть ли у вас вообще допустимые объекты product в цикле?т.е.Является $childProduct->getId() повторная настройка идентификатора или null?Если это так, то при обновлении что-то сломалось.Пожалуйста, обратите внимание, что $this->getProductStockQty() и $childProduct->getName() являются нет тот же метод.Таким образом, им необязательно работать сообща или терпеть неудачу вместе.

Во-вторых, вам нужно было бы изучить содержимое соответствующего блока getChildProducts() метод.Оттуда вы можете проследить, как собирается коллекция.Возможно, это связано с тем, что коллекция (по какой-либо причине после вашего обновления) не включает в себя name поле в его addAttributeToFilter() фильтр.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top