Как я могу получить все категории и подкатегории?
Как я могу получить все категории и подкатегории, если категория активна, но для параметра "Включить в меню навигации" установлено значение "Нет"?
Я пытаюсь использовать это:
<?php
$_categories = Mage::getBlockSingleton('catalog/navigation');
foreach ($_categories->getStoreCategories() as $_category) {
$category = Mage::getModel('catalog/category');
$category->load($_category->getId());
$subcategories = explode(',', $category->getChildren());
?>
<dl>
<dt><?php echo $this->htmlEscape($_category->getName()); ?></dt>
<dd>
<ol>
<?php
foreach ($subcategories as $subcategoryId) {
$category->load($subcategoryId);
echo '<li><a href="' . $category->getURL() . '">' . $category->getName() . '</a></li>';
}
?>
</ol>
</dd>
</dl>
<?php
}
?>
Но если категория "Включить в меню Nav" - "Нет", она не будет отображаться на первой странице!
Ответы
Ответ 1
Вам нужно только изменить одну вещь! Когда вы вызываете $_categories = Mage::getBlockSingleton('catalog/navigation')
, вы на самом деле захватываете категории из модели catalog/navigation
- фильтрация из категорий "без навигации" уже завершена. Вместо этого мы можем собрать коллекцию из модели catalog/category
, чтобы убедиться, что все категории доступны на сайте:
$categories = Mage::getModel('catalog/category')
->getCollection()
->addAttributeToSelect('*')
->addIsActiveFilter();
Обратите внимание, что я использую addIsActiveFilter()
, чтобы убедиться, что мы только получаем категории, которые в настоящее время активны/включены.
Ответ 2
Я предпочитаю использовать вспомогательный каталог/категорию
$helper = Mage::helper('catalog/category');
$categories = $helper->getStoreCategories();