根据您的 Magento 版本,这篇文章可能已经过时,所以我会更新。看起来 Magento 正是出于这个原因进行了更改,以允许自定义该导航 html。
如果你看第 80 行,在 Mage_Page_Block_Html_Topmenu
if ($renderer = $this->getChild('catalog.topnav.renderer')) {
$renderer->setMenuTree($this->_menu)->setChildrenWrapClass($childrenWrapClass);
$html = $renderer->toHtml();
} else {
$html = $this->_getHtml($this->_menu, $childrenWrapClass);
}
它检查是否定义了渲染块,如果没有,则使用不推荐使用的构建导航 html 的方法
/**
* Recursively generates top menu html from data that is specified in $menuTree
*
* @param Varien_Data_Tree_Node $menuTree
* @param string $childrenWrapClass
* @return string
* @deprecated since 1.8.2.0 use child block catalog.topnav.renderer instead
*/
protected function _getHtml(Varien_Data_Tree_Node $menuTree, $childrenWrapClass)
在你的主题的 local.xml 中尝试这个块语句。
<default>
<reference name="catalog.topnav">
<block type="page/html_topmenu_renderer" name="catalog.topnav.renderer" template="page/html/topmenu/renderer.phtml"/>
</reference>
</default>
然后你可以将模板页面/html/topmenu/render.phtml从rwd主题下拉到你自己的主题中,并进行自定义,而无需重写块。