I want to show all category in the menu and on the mouse-over their subcategories will be shown. Right now it is showing only one subcategory in menu. No category and subcategory are showing inside menu.
Magento – How to show all category and their subcategory in menu in magento2
magento-2.0.2magento2menunavigation
Related Solutions
Try this:
$collection = Mage::getResourceModel('catalog/category_collection')
->addAttributeToSelect('*')
->addAttributeToFilter('is_active', 1) //only active categories
->addAttributeToFilter('include_in_menu', 0) //only categories not included in menu
->addAttributeToFilter('parent_id', 10)//get only subcategories of the category with id 10
->addAttributeToSort('position')//sort by position
;
foreach ($collection as $category) {
//do something with $category
}
To do this you'll first want to (if you haven't already) create a custom template directory within the RWD design package. This avoids re or overwriting your default templates that live in magento/app/design/frontend/rwd/default/template
.
For the sake of example we'll create magento/app/design/frontend/rwd/custom/template
The specific template we're going to be editing is the topmenu renderer.phtml
- which resides at magento/app/design/frontend/rwd/default/template/page/html/topmenu/renderer.phtml
. To extend this file properly, create a matching directory structure within the magento/app/design/frontend/rwd/custom/template
directory we just created - you should end up with a directory that looks like this: magento/app/design/frontend/rwd/custom/template/page/html/topmenu
Once your topmenu template directory has been created, copy the renderer.phtml
file from rwd/default/template/page/html/topmenu
into the rwd/custom/template/page/html/topmenu
directory you just created.
This file should contain the following code at ~ lines 62 - 71:
if (!empty($_hasChildren)) {
$html .= '<ul class="level'. $childLevel .'">';
$html .= '<li class="level'. $nextChildLevel .'">';
$html .= '<a class="level'. $nextChildLevel .'" href="'. $child->getUrl() .'">';
$html .= $this->__('View All ') . $this->escapeHtml($this->__($child->getName()));
$html .= '</a>';
$html .= '</li>';
$html .= $this->render($child, $childrenWrapClass);
$html .= '</ul>';
}
In your copied file, you'll want to remove or comment out the mid-section so that you're left with:
if (!empty($_hasChildren)) {
$html .= '<ul class="level'. $childLevel .'">';
$html .= $this->render($child, $childrenWrapClass);
$html .= '</ul>';
}
Once you've saved your file you can go into adminhtml -> System -> Configuration -> General -> Design -> Themes and set the field "Templates" to the value "custom" -> Save Config and then clear cache.
You should now no longer see the "View All XXX" portion of your sites navigation!
Best Answer
Please check whether you have selected Yes for Is Active and Include in Navigation Menu or not.
Also if you want to show in left menu, then value of Is Anchor should also be Yes.
Note: After saving, remove cache, page_cache and reindex.