Sé que esta es una vieja pregunta con muchas respuestas, la mayoría de ellas sugiere editar la plantilla del menú, pero eso no funciona para mí. No hay necesidad de explicar por qué, digamos que soy un poco TOC por hacer las cosas de la manera "correcta".
Esta pregunta puede servir como material para otros necesitados. Aquí va.
A partir de Magento 1.7 el menú superior se construye utilizando un evento: page_block_html_topmenu_gethtml_before
. El Mage_Catalog
módulo lo usa para agregar las categorías. Quiero usar eso Para esto, he creado un observador en mi 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>
En la Observer.php
clase que tengo
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;
}
Mi observador tiene otro código que agrega todas las marcas como subelementos del Brands
menú, pero no hay necesidad de eso aquí.
Esto funciona perfectamente y agrega un menú Brands
como último elemento en el menú.
El problema es que quiero esto como el primer menú y mi observador se llama después del observador Mage_Catalog
que agrega las categorías. Dado que no hay forma (no que yo sepa) de ordenar el orden de los observadores en un evento ... Tengo un problema
[EDITAR]
Como @Benmarks sugirió que hice elMage_Catalog
módulo depende de mi módulo y ahora mi elemento de menú es el primero en la lista. Pero todavía tengo que agregar menús entre las categorías y al final. La creación de un nuevo módulo probablemente resolvería el problema con los elementos al final del menú, pero todavía tengo un problema con los que están entre las categorías,
[/ EDIT]
Entonces, básicamente, mi pregunta se resume en " (¿Cómo) puedo moverme alrededor del niño? nodos de a Varien_Data_Tree_Node
en un Varien_Data_Tree
objeto? "
No sugiera agregar el Brands
como la primera categoría en el árbol de categorías. Esta no es una opción (como dije ... mi TOC sobre estas cosas).