Magento e seu top menu!

Estive trabalhando em um projeto de personalização de menu do Magento e percebi uma questão muito chata dele: A documentação oficial é muito fraca! 🙁

Com isso tive que pesquisar na internet para entender os objetos que o Magento me libera para customizar e foi uma briga feia!! Até que achei uma explicação muito simples no link Generate Magento top menu navigation html [$_menu = $this->getHtml(‘level-top’)].

Depois de ler e fazer meus testes, resumi o código para remover a linha <?php $_menu = $this->getHtml('level-top') ?> e adicionar:

<?php

$obj = new Mage_Catalog_Block_Navigation();
$storeCategories = $obj->getStoreCategories();

$_menu = '';

foreach ($storeCategories as $_category) {
    $_menu .= '<li><a href="'. $obj->getCategoryUrl($_category) .'">' . $_category->getName() . '</a>' . "n";
    $categoryChildren = $_category->getChildren();
    if($categoryChildren->count()) {
        $_menu .= '<ul>' . "n";
        foreach($categoryChildren as $_categoryChild) {
            $_categoryChildModel = Mage::getModel('catalog/category')->load($_categoryChild->getId());
            $categoryGrandchildren=$_categoryChild->getChildren();
            $_menu .= '<li><a href="' . $_categoryChildModel->getUrl() . '">' . $_categoryChild->getName() . '</a></li>' . "n";
            if($categoryGrandchildren->count()) {
                $_menu .= '<ul>' . "n";
                $_menu .= '<ul>' . "n";
                foreach($categoryGrandchildren as $_categoryGrandchild) {
                    $_categoryGrandchildModel = Mage::getModel('catalog/category')->load($_categoryGrandchild->getId());
                    $_menu .= '<li><a href="' . $_categoryGrandchildModel->getUrl() . '">' .  $_categoryGrandchild->getName() . '</a></li>' . "n";
                }
                $_menu .= '</ul>' . "n";
            }
        }
        $_menu .= '</ul>' . "n";
    }
    $_menu .= '</li>' . "n";
}

?>

Depois foi só personalizar a realidade do cliente! 😀

2 thoughts on “Magento e seu top menu!”

Leave a Reply

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