Подтвердить что ты не робот

Как я могу получить все категории и подкатегории?

Как я могу получить все категории и подкатегории, если категория активна, но для параметра "Включить в меню навигации" установлено значение "Нет"?

Я пытаюсь использовать это:

<?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" - "Нет", она не будет отображаться на первой странице!

4b9b3361

Ответ 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();