Magento: Displaying Categories and Current Subcategories

I started “skinning” Magento today with a design that I was given. The functionality called for was a left category navigation (on every page but customer pages and cart/checkout pages) that always displayed the main categories – but when you click on a category, Magento should take you to that category’s listing, but also display the current subcategories.

So – since we all know that the Magento documentation is pretty crappy at this time, I had to do a lot of digging through core files, and a lot of time just with trial and error. But, I finally did come up with something that works. I’m willing to bet that there is a better, more proper way to do it, but regardless, this seems to be working perfectly.

What I did was create a new PHTML file, created the proper block call in page.xml, and now I’ve got a great working (and looking!) left-navigation. Here’s the home page (left), and a category page (right):


 

And the code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<h3>Browse by Category:</h3>
 
<ul>
<?php
$obj = new Mage_Catalog_Block_Navigation();
$store_cats	= $obj->getStoreCategories();
$current_cat 	= $obj->getCurrentCategory();
 
$current_cat	= (is_object($current_cat) ? $current_cat->getName() : '');
 
foreach ($store_cats as $cat) {
	if ($cat->getName() == $current_cat) {
		echo '<li class="current"><a href="'.$this->getCategoryUrl($cat).'">'.$cat->getName()."</a>\n<ul>\n";
		foreach ($obj->getCurrentChildCategories() as $subcat) {
			echo '<li><a href="'.$this->getCategoryUrl($subcat).'">'.$subcat->getName()."</a></li>\n";
		}
		echo "</ul>\n</li>\n";
	} else {
		echo '<li><a href="'.$this->getCategoryUrl($cat).'">'.$cat->getName()."</a></li>\n";
	}
}
?>
</ul>

If you know of a better way to do this – please let me know!

This entry was posted in Magento. Bookmark the permalink.

15 Responses to Magento: Displaying Categories and Current Subcategories

  1. Mike says:

    Looks good, but if i click on an subcategory the menu is closing the subcategory:
    Take a look:
    http://www.spleen-art.com/spleen

  2. shakir says:

    it helped me alot ….. great work buddy… ;)

  3. Lerentech says:

    Great work! I’ve been looking for this. Thanks so much!

  4. Moni says:

    its working fine.. cheers!!

  5. chris g says:

    cheers mate, you are a gun!

  6. Marius says:

    I looks good, but what if I want to overwrite the Mage_Catalog_Block_Navigation class?
    Then I won’t be able to use my custom methods in this code.
    A better way to initialize the block is
    $obj = $this->getLayout()->createBlock(‘catalog/navigation’);

  7. Adeel says:

    use full code thanks to Magento

  8. Marc says:

    Good stuff. Magento is powerful, weak on documentation, and marginally bloated. But until I build or find better I am all in.

  9. Onyx says:

    it works perfect! thank you! just what I was looking for. magento should have this by default… LOL

  10. gast says:

    I can’t get the categories URL

  11. David says:

    Thanks for your code!

  12. May says:

    It’s good to display 2-tier categories. But how to display more than 2-tier subcategories like this?

  13. Joshua says:

    thx, it will be my better project to solve the promble!

  14. Amanda says:

    I also cannot retrieve the URL, the href ends up blank: href=”"

  15. @gast + @amanda
    The links will only work if you include this code in a block with type=”catalog/navigation”.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">