Magento: отображение всех категорий, но не может связывать изображения

У меня странная, но, вероятно, легко разрешаемая ситуация.

У меня есть следующий код в блоке:

<div class="home-categories"> <?php $_helper = Mage::helper('catalog/category') ?> <?php $_categories = $_helper->getStoreCategories() ?> <?php foreach($_categories as $_category): ?> <a href="<?php echo $_helper->getCategoryUrl($_category) ?>"> <img src="<?php echo $_category->getStoreIds(); ?>"/> <div class="category-title"> <p><?php echo $_category->getName(); ?></p> </div> </a> <?php endforeach; ?> </div> 

Полученный HTML-код возвращает мне все правильные данные, но img src. Я делаю это правильно?

Причина, по которой вы не получаете URL-адрес изображения, состоит в том, что по умолчанию модели Magento не загружаются со всеми атрибутами. Это значит, что вы загружаете только нужные атрибуты, и ваши запросы к БД не так дороги. Следующее сделает трюк.

 $_helper = Mage::helper('catalog/category'); $_categories = $_helper->getStoreCategories(false, true, false); $_categories->addAttributeToSelect('image'); 

Посмотрите на определение метода для getStoreCategories:

 getStoreCategories($sorted=false, $asCollection=false, $toLoad=true) 

Вы хотите, чтобы метод возвращал коллекцию, которая еще не была загружена, таким образом, ложные, истинные, ложные аргументы. Прежде чем прокручивать категории, вы хотите, чтобы атрибут изображения загружался, это то, что для вызова addAttributeToSelect ('image').

Это было более эффективно, чем $ _category-> load ($ _category-> getId ()); потому что мы не загружаем весь объект. Теперь, когда вы просматриваете категории, вы можете сделать следующее, и вы должны иметь URL-адрес изображения в теге изображения.

 <img src="<?php echo $_category->getImageUrl(); ?>"/> 

Причина в том, что загруженная категория категорий не содержит атрибутов категории, а только данных базовой категории. Вы должны загрузить их самостоятельно или добавить их в коллекцию до того, как она загрузится (не взглянул на вспомогательную функцию, поэтому я не могу быть уверен, что вы можете сделать это после вызова …).

Самое простое решение – заменить строку

 <img src="<?php echo $_category->getStoreIds(); ?>"/> 

с

 <img src="<?php $_category->load( $_category->getId()); echo $_category->getImageUrl(); ?>"/>