Sei que essa é uma pergunta antiga com muitas respostas, a maioria delas sugere editar o modelo de menu, mas isso não funciona para mim. Não há necessidade de explicar por que, digamos, eu sou um pouco viciado em fazer as coisas da maneira "certa".
Esta questão pode servir como material para outras pessoas necessitadas. Aqui vai.
Começando com Magento 1.7 no menu superior é construído usando um evento: page_block_html_topmenu_gethtml_before. Isso é usado pelo Mage_Catalogmódulo para adicionar as categorias. Eu quero usar isso. Para isso, criei um observador no meu módulo como este:
<global>
<events>
<page_block_html_topmenu_gethtml_before>
<observers>
<my_observer>
<class>mymodule/observer</class>
<method>addItemsToTopmenuItems</method>
</my_observer>
</observers>
</page_block_html_topmenu_gethtml_before>
</events>
</global>
Na Observer.phpaula eu tenho
public function addItemsToTopmenuItems($observer){
//get the menu object: //Type Varien_Data_Tree_Node
$menu = $observer->getMenu();
//get the tree object in the menu //type Varien_Data_Tree
$tree = $menu->getTree();
//get current page handler
$action = Mage::app()->getFrontController()->getAction()->getFullActionName();
$brandNodeId = 'category-node-brand';
//set the node id, label and url
$data = array(
'name' => Mage::helper('catalog')->__('Brands'),
'id' => $brandNodeId,
'url' => Mage::getUrl('brands'),
'is_active' => ($action == 'brands')
);
//create a node object
$brandNode = new Varien_Data_Tree_Node($data, 'id', $tree, $menu);
//add the node to the menu
$menu->addChild($brandNode);
return $this;
}
Meu observador tem algum outro código que adiciona todas as marcas como subitens do Brandsmenu, mas não há necessidade disso aqui.
Isso funciona perfeitamente e adiciona um menu Brandscomo último item no menu.
A questão é que eu quero isso como o primeiro menu e meu observador é chamado após o observador Mage_Catalogque adiciona as categorias. Como não há nenhuma maneira (não que eu saiba) de classificar a ordem dos observadores em um evento ... Eu tenho um problema
[EDIT]
Como o @Benmarks sugeriu, eu fiz oMage_CatalogO módulo depende do meu módulo e agora meu item de menu é o primeiro da lista. Mas ainda tenho que adicionar menus entre as categorias e no final. Criando um novo módulo provavelmente iria resolver o problema com os itens no final do menu, mas ainda tenho um problema com os entre categorias,
[/ EDIT]
Então, basicamente a minha pergunta currículos para " (Como) eu posso me movimentar criança nós de a Varien_Data_Tree_Nodeem um Varien_Data_Treeobjeto? "
Por favor, não sugira adicionar Brandscomo a primeira categoria na árvore de categorias. Esta não é uma opção (como eu disse ... meu TOC sobre essas coisas).