Je sais que c'est une vieille question avec beaucoup de réponses, la plupart suggèrent de modifier le modèle de menu mais cela ne fonctionne pas pour moi. Il n'est pas nécessaire d'expliquer pourquoi, disons que je suis un peu TOC pour faire les choses de la "bonne" manière.
Cette question peut servir de matériel à d'autres personnes dans le besoin. Voici.
A partir de Magento 1.7 le menu du haut est construit en utilisant un événement: page_block_html_topmenu_gethtml_before. Ceci est utilisé par le Mage_Catalogmodule pour ajouter les catégories. Je veux l'utiliser. Pour cela, j'ai créé un observateur dans mon module comme ceci:
<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>
Dans la Observer.phpclasse que j'ai
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;
}
Mon observateur a un autre code qui ajoute toutes les marques comme sous-éléments du Brandsmenu, mais cela n'est pas nécessaire ici.
Cela fonctionne parfaitement et ajoute un menu Brandscomme dernier élément du menu.
Le problème est que je le veux comme premier menu et mon observateur est appelé après l'observateur Mage_Catalogqui ajoute les catégories. Puisqu'il n'y a aucun moyen (pas que je sache) de trier l'ordre des observateurs sur un événement ... J'ai un problème
[EDIT]
Comme @Benmarks l'a suggéré, j'ai fait leMage_Catalogmodule dépend de mon module et maintenant mon élément de menu est le premier de la liste. Mais je dois encore ajouter des menus entre les catégories et à la fin. La création d'un nouveau module résoudrait probablement le problème avec les éléments à la fin du menu, mais j'ai toujours un problème avec ceux entre les catégories,
[/ EDIT]
Donc, fondamentalement, ma question reprend " (Comment) puis-je me déplacer enfant nœuds d'un Varien_Data_Tree_Nodedans un Varien_Data_Treeobjet? "
Veuillez ne pas suggérer d'ajouter la Brandspremière catégorie dans l'arborescence des catégories. Ce n'est pas une option (comme je l'ai dit ... mon TOC à propos de ces choses).