Saya tahu ini adalah pertanyaan lama dengan banyak jawaban, kebanyakan dari mereka menyarankan untuk mengedit template menu tetapi itu tidak berfungsi untuk saya. Tidak perlu menjelaskan mengapa, katakanlah saya sedikit OCD tentang melakukan sesuatu dengan cara yang "benar".
Pertanyaan ini dapat berfungsi sebagai bahan untuk orang lain yang membutuhkan. Ini dia.
Dimulai dengan Magento 1.7 menu atas dibangun menggunakan sebuah event: page_block_html_topmenu_gethtml_before
. Ini digunakan oleh Mage_Catalog
modul untuk menambahkan kategori. Saya ingin menggunakannya. Untuk ini, saya telah membuat pengamat dalam modul saya seperti ini:
<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>
Di Observer.php
kelas saya miliki
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;
}
Pengamat saya memiliki beberapa kode lain yang menambahkan semua merek sebagai sub-item Brands
menu tetapi tidak perlu di sini.
Ini berfungsi dengan baik dan menambahkan menu Brands
sebagai item terakhir dalam menu.
Masalahnya adalah bahwa saya ingin ini sebagai menu pertama dan pengamat saya dipanggil setelah pengamat Mage_Catalog
yang menambahkan kategori. Karena tidak ada cara (bukan yang saya tahu) untuk mengurutkan urutan pengamat pada suatu acara ... Saya punya masalah
[EDIT]
Seperti yang disarankan @Benmark, saya membuatMage_Catalog
modul tergantung pada modul saya dan sekarang item menu saya adalah yang pertama dalam daftar. Tapi saya masih harus menambahkan menu antara kategori dan di akhir. Membuat modul baru mungkin akan menyelesaikan masalah dengan item di akhir menu, tapi saya masih punya masalah dengan yang ada di antara kategori,
[/ EDIT]
Jadi pada dasarnya pertanyaan saya dilanjutkan ke " (Bagaimana) saya bisa berkeliling anak node dari Varien_Data_Tree_Node
suatu Varien_Data_Tree
objek? "
Tolong jangan menyarankan menambahkan Brands
sebagai kategori pertama di pohon kategori. Ini bukan pilihan (seperti yang saya katakan ... OCD saya tentang hal-hal ini).