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_Catalog
modulo 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.php
classe 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 Brands
menu, ma qui non è necessario.
Funziona perfettamente e aggiunge un menu Brands
come ultima voce del menu.
Il problema è che voglio questo come primo menu e il mio osservatore viene chiamato dopo l'osservatore Mage_Catalog
che 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_Catalog
Il 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_Node
in un Varien_Data_Tree
oggetto? "
Non suggerire di aggiungere Brands
la prima categoria nell'albero delle categorie. Questa non è un'opzione (come ho detto ... il mio DOC su queste cose).