私はこれが多くの答えがある古い質問であることを知っています、それらのほとんどはメニューテンプレートを編集することを提案しますが、それは私にとってはうまくいきません。理由を説明する必要はありません。物事を「正しい」方法で行うことについて私が少し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
カテゴリーを追加した後にオブザーバーが呼び出されることです。イベントのオブザーバーの順序を並べ替える方法はないので(私にはわかりません)...問題があります
[編集]
@Benmarksが示唆したように、Mage_Catalog
モジュールは私のモジュールに依存し、メニュー項目がリストの最初になりました。ただし、カテゴリ間および最後にメニューを追加する必要があります。新しいモジュールを作成すると、おそらくメニューの最後にあるアイテムの問題は解決しますが、カテゴリ間のものにはまだ問題があります。
[/編集]
したがって、基本的に私の質問は「(方法)ノードVarien_Data_Tree_Node
でVarien_Data_Tree
オブジェクト?」カテゴリツリーの最初のカテゴリとしてを
追加することを提案しないでくださいBrands
。これはオプションではありません(私が言ったように...これらのことについての私のOCD)。