So che questa è una vecchia domanda con molte risposte, la maggior parte di loro suggerisce di modificare il modello di menu, ma per me non funziona. Non c'è bisogno di spiegare perché, diciamo che sono un po 'un DOC sul fare le cose nel modo "giusto".
Questa domanda può servire da materiale per gli altri bisognosi. Ecco qui.
A partire con Magento 1.7 il menu in alto è costruito utilizzando un evento: page_block_html_topmenu_gethtml_before. Questo è usato dal Mage_Catalogmodulo per aggiungere le categorie. Voglio usarlo. Per questo ho creato un osservatore nel mio modulo in questo modo:
<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>
Nella Observer.phpclasse che ho
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;
}
Il mio osservatore ha qualche altro codice che aggiunge tutte le marche come voci secondarie del Brandsmenu, ma qui non è necessario.
Funziona perfettamente e aggiunge un menu Brandscome ultima voce del menu.
Il problema è che voglio questo come primo menu e il mio osservatore viene chiamato dopo l'osservatore Mage_Catalogche aggiunge le categorie. Dal momento che non c'è modo (non che io sappia) di ordinare l'ordine degli osservatori su un evento ... Ho un problema
[EDIT]
Dato che @Benmarks mi ha suggerito di aver creato ilMage_CatalogIl modulo dipende dal mio modulo e ora la mia voce di menu è la prima nell'elenco. Ma devo ancora aggiungere menu tra le categorie e alla fine. La creazione di un nuovo modulo probabilmente risolverà il problema con gli elementi alla fine del menu, ma ho ancora un problema con quelli tra le categorie,
[/ EDIT]
Quindi in sostanza la mia domanda riprende a " (Come) posso spostarmi in giro bambino nodi di a Varien_Data_Tree_Nodein un Varien_Data_Treeoggetto? "
Non suggerire di aggiungere Brandsla prima categoria nell'albero delle categorie. Questa non è un'opzione (come ho detto ... il mio DOC su queste cose).