![]()
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!
Looks good, but if i click on an subcategory the menu is closing the subcategory:
Take a look:
http://www.spleen-art.com/spleen
it helped me alot ….. great work buddy…
Great work! I’ve been looking for this. Thanks so much!
its working fine.. cheers!!
cheers mate, you are a gun!
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’);
use full code thanks to Magento
Good stuff. Magento is powerful, weak on documentation, and marginally bloated. But until I build or find better I am all in.
it works perfect! thank you! just what I was looking for. magento should have this by default… LOL
I can’t get the categories URL
Thanks for your code!
It’s good to display 2-tier categories. But how to display more than 2-tier subcategories like this?
thx, it will be my better project to solve the promble!
I also cannot retrieve the URL, the href ends up blank: href=”"
@gast + @amanda
The links will only work if you include this code in a block with type=”catalog/navigation”.
Any ideas on how to make all the subcategories display on the homepage and not just on the top-level category pages? Thanks!
don¨t work subcategory 3RD+ LEVEL(((
usefull code thanks….. but its not working for 3tier…how can i display morethan 2tier?
foreach ($this->getStoreCategories() as $_category):
echo $this->drawItem($_category);
endforeach;
i have a page home.phtml which will be displayed after cms on home page.In it I would like to display the categories.but when i copied the above code it is not working. Do i need to add anything in XML page . i am new to Magneto ?
is there anyway to grab the Category Image too? I try $_imageUrl = $subcat->getImageUrl();
and its not working
Is it possible to get all subcategories from a specific category like category id = 5001??
Manuel – Yes, it is, but I don’t have time to try and give you an example of how to do that right now. Dig through the Models that deal with categories in the Catalog core module.
for magento 1.5 I think ti retrieve the url you should use getUrlPath() function.