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_Catalog
module 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.php
classe 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 Brands
menu, mais cela n'est pas nécessaire ici.
Cela fonctionne parfaitement et ajoute un menu Brands
comme 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_Catalog
qui 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_Catalog
module 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_Node
dans un Varien_Data_Tree
objet? "
Veuillez ne pas suggérer d'ajouter la Brands
premiè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).