Я знаю, що це старе питання з великою кількістю відповідей, більшість із них пропонують редагувати шаблон меню, але це не працює для мене. Не потрібно пояснювати, чому, скажімо, я трохи OCD щодо того, щоб робити справи "правильним" способом.
Це питання може слугувати матеріалом для інших, хто потребує. Ось іде.
Починаючи з Magento 1.7 Верхнє меню будується з допомогою події: page_block_html_topmenu_gethtml_before
. Це використовується Mage_Catalog
модулем для додавання категорій. Я хочу цим скористатися. Для цього я створив спостерігача у своєму модулі так:
<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>
У Observer.php
класі я
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;
}
У мого спостерігача є ще якийсь код, який додає всі бренди як підпункти Brands
меню, але в цьому немає необхідності.
Це прекрасно працює і додає меню Brands
як останній пункт у меню.
Проблема полягає в тому, що я хочу, щоб це було як перше меню, і мій спостерігач викликається після спостерігача, Mage_Catalog
який додає категорії. Оскільки немає можливості (не те, що я знаю) сортувати порядок спостерігачів за подією ... У мене є проблема
[EDIT]
Оскільки @Benmark запропонував, я зробивMage_Catalog
Модуль залежить від мого модуля, і тепер мій пункт є першим у списку. Але мені все ж доводиться додавати меню між категоріями і в кінці. Створення нового модуля, ймовірно, вирішить проблему з пунктами в кінці меню, але у мене все ще виникає проблема з тими, що перебувають між категоріями,
[/ EDIT]
Тому в основному моє питання поновлюється на " (Як) я можу пересуватися навколо дитини вузли a Varien_Data_Tree_Node
в Varien_Data_Tree
об’єкті? "
Будь ласка, не пропонуйте додавати Brands
як першу категорію в дерево категорій. Це не варіант (як я вже сказав ... мій OCD про ці речі).