How I can get all categories and subcategories if the category is active, but "Include in Navigation Menu" is set to "No"?
I try to use this:
<?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
}
?>
But if a category's “Include in Nav menu" is "No”, it won't show on the front page!
You only need to change one thing! When you call $_categories = Mage::getBlockSingleton('catalog/navigation')
you're actually grabbing the categories from the catalog/navigation
model specifically - the filtering out of "non navigation" categories is already complete. Instead, we can grab a collection from the catalog/category
model to make sure we get all categories available on the site:
$categories = Mage::getModel('catalog/category')
->getCollection()
->addAttributeToSelect('*')
->addIsActiveFilter();
Note that I am using addIsActiveFilter()
to make sure we only get categories that are currently active / enabled.