getStoreCategories () ничего не возвращает - PullRequest
4 голосов
/ 11 ноября 2010

В настоящее время я изучаю Magento и, кажется, столкнулся с проблемой, которая знакома многим людям на моей должности, но ни одно из предложенных решений не работает для меня. Я ищу заполнить меню навигации всеми категориями, найденными в корневой категории, но фрагмент кода, который я должен сделать, не работает. Вот выдержка из кода, который должен выполнить такую ​​задачу:

<div id="utilities">
    <?php $_menu = ''?>
    <?php foreach ($this->getStoreCategories() as $_category): ?>
        <?php $_menu .= $this->drawItem($_category) ?>
    <?php endforeach ?>
    <?php if ($_menu): ?>
    <div class="nav-container">

        <ul id="nav">

            <?php $_anyActive = false; foreach ($this->getStoreCategories() as $_category) { $_anyActive = $_anyActive || $this->isCategoryActive($_category); } ?>
             <li class="home <?php echo !$_anyActive ? 'active' : '' ?>"><a href="<?php echo $this->getUrl('')?>"><span><?php echo $this->__('Home') ?></span></a></li> 

            <?php echo $_menu; ?>
        </ul>

    </div>
    <?php endif; ?>
</div>

Теперь, я достаточно подробно решил эту проблему и начал с выполнения var_dump () для $ this-? GetStoreCategories (), но это вернуло NULL. Я знаю, что утверждение не идет дальше этого метода, поэтому я могу заключить, что ошибка заключается в этой строке кода:

<?php foreach ($this->getStoreCategories() as $_category): ?>

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

Я поражен, если не сказать больше. Любая помощь будет очень признательна, и большое спасибо заранее!

Ответы [ 2 ]

10 голосов
/ 11 ноября 2010

Ваша проблема в том, что вы используете блок, у которого нет метода getStoreCategories().$this - это ссылка на созданный вручную блок.

Magento имеет высокий уровень абстракции, поэтому каждую проблему здесь можно решить различными способами.

Использование:

Mage::helper('catalog/category')->getStoreCategories()

Вместо:

$this->getStoreCategories()

Когда это работает - лучше создайте getStoreCategories() в своем блоке и переместите этот код в него - как предполагалось Magentoархитектура.

1 голос
/ 11 ноября 2010

Рекомендуемый способ получить меню категорий - с помощью метода Mage_Catalog_Block_Navigation::renderCategoriesMenuHtml().

Таким образом, для любого блока Mage_Catalog_Block_Navigation или из него можно использовать шаблон app/code/design/base/default/template/navigation/top.phtml, который вызывает этот метод.

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