2010-11-11 3 views
4

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

<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> 

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

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

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

Я, по меньшей мере, ошеломлен. Любая помощь будет так высоко оценена, и благодарим вас за это заранее!

+0

Я столкнулся с аналогичной проблемой в Enterprise edition с лаком. Он работал для меня после очистки файлов var/cache и var/full_page_cache. – Muk

ответ

10

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

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

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

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

Вместо:

$this->getStoreCategories() 

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

+0

ОК, я это понимаю. Спасибо за ваш ответ, но теперь я получаю сообщение об ошибке. Я считаю, что проблема drawItem. В своей документации он говорит об отказе от 1.4, и я использую 1.4.1.1. Есть ли альтернативный метод, который я должен использовать? Большое вам спасибо за ваш ответ. Я чувствую, что мне нужно немного вернуться и изучить блоки, так как я немного смущен вашим последним предложением! –

+0

Решение в значительной степени зависит от полученной вами ошибки - в ваших вопросах отсутствует информация: описание ошибки, описание класса блока (имя и предок), структура компоновки для этого блока. Я думаю, что вы пытаетесь скопировать функции вставки из некоторого phtml (например, «catalog/navigation/top.phtml») - это против архитектуры Magento, потому что каждый phtml имеет свой собственный блок и класс ($ это отличается для каждого phtml) , В этом случае вам нужно получить полное представление о системе «layout/block/phtml», используемой Magento. Без этого трудно решить вашу проблему. –

1

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

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

+2

И как нужно настроить html для этой вещи или исключить некоторые категории, например? – jayarjo

Смежные вопросы