getName() возвращает значение null
-
12-12-2019 - |
Вопрос
Я наткнулся на этот блок кода в расширении, которое перебирает дочерние продукты и пытается вернуть их текущее количество на складе и название дочерних продуктов:
<?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()
фильтр.