나는 이것이 많은 대답을 가진 오래된 질문이라는 것을 알고 있습니다. 대부분 메뉴 템플릿을 편집하는 것이 좋지만 저에게는 효과가 없습니다. 이유를 설명 할 필요는 없습니다. "올바른"방식으로 일을하는 것에 대해 약간의 강박 관념이라고 가정 해 봅시다.
이 질문은 다른 사람들에게 도움이 될 수 있습니다. 간다
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
카테고리를 추가하는 관찰자 다음에 호출 된다는 것입니다. 이벤트에서 옵저버의 순서를 정렬 할 수있는 방법은 없습니다 (알지 못합니다). ... 문제가 있습니다.
[편집]
@Benmarks가 제안한대로Mage_Catalog
모듈은 모듈에 따라 달라지며 이제 메뉴 항목이 목록에서 첫 번째입니다. 그러나 나는 여전히 범주 사이와 마지막에 메뉴를 추가해야합니다. 새 모듈을 만들면 메뉴 끝에있는 항목의 문제가 해결 될 수도 있지만 범주 간 문제에 여전히 문제가 있습니다.
[/ EDIT]
따라서 기본적으로 내 질문은 " (어떻게) 하위로 이동할 수 있습니까? (A)의 노드 Varien_Data_Tree_Node
A의 Varien_Data_Tree
객체? " 카테고리 트리에서 첫 번째 카테고리를
추가하지 마십시오 Brands
. 이것은 옵션이 아닙니다 (이것들에 대해 내 OCD에 말했듯이).