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_Catalog
mó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.php
aula 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 Brands
menu, mas não há necessidade disso aqui.
Isso funciona perfeitamente e adiciona um menu Brands
como último item no menu.
A questão é que eu quero isso como o primeiro menu e meu observador é chamado após o observador Mage_Catalog
que 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_Catalog
O 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_Node
em um Varien_Data_Tree
objeto? "
Por favor, não sugira adicionar Brands
como a primeira categoria na árvore de categorias. Esta não é uma opção (como eu disse ... meu TOC sobre essas coisas).