顶级菜单不是通过自定义代码构建的。它由默认的主代码构建。请帮帮我。
应用\代码\本地\ Mynav \ Mytopmenu \等\ config.xml中
<global>
<blocks>
<mytopmenu>
<rewrite>
<html_topmenu>Mynav_Mytopmenu_Block_Html_Topmenu</html_topmenu>
</rewrite>
</mytopmenu>
</blocks>
</global>
应用\代码\本地\ Mynav \ Mytopmenu \块\ HTML \ Topmenu.php
<?php
class Mynav_Mytopmenu_Block_Html_Topmenu extends Mage_Page_Block_Html_Topmenu
{
/**
* Top menu data tree
*
* @var Varien_Data_Tree_Node
*/
protected $_menu;
/**
* Init top menu tree structure
*/
public function _construct()
{
$this->_menu = new Varien_Data_Tree_Node(array(), 'root', new Varien_Data_Tree());
}
/**
* Get top menu html
*
* @param string $outermostClass
* @param string $childrenWrapClass
* @return string
*/
public function getHtml($outermostClass = '', $childrenWrapClass = '')
{
Mage::dispatchEvent('page_block_html_topmenu_gethtml_before', array(
'menu' => $this->_menu
));
$this->_menu->setOutermostClass($outermostClass);
$this->_menu->setChildrenWrapClass($childrenWrapClass);
$html = $this->_getHtml($this->_menu, $childrenWrapClass);
Mage::dispatchEvent('page_block_html_topmenu_gethtml_after', array(
'menu' => $this->_menu,
'html' => $html
));
return $html;
}
/**
* Recursively generates top menu html from data that is specified in $menuTree
*
* @param Varien_Data_Tree_Node $menuTree
* @param string $childrenWrapClass
* @return string
*/
protected function _getHtml(Varien_Data_Tree_Node $menuTree, $childrenWrapClass)
{
$html = '';
$children = $menuTree->getChildren();
$parentLevel = $menuTree->getLevel();
$childLevel = is_null($parentLevel) ? 0 : $parentLevel + 1;
$counter = 1;
$childrenCount = $children->count();
$parentPositionClass = $menuTree->getPositionClass();
$itemPositionClassPrefix = $parentPositionClass ? $parentPositionClass . '-' : 'nav-';
foreach ($children as $child) {
$child->setLevel($childLevel);
$child->setIsFirst($counter == 1);
$child->setIsLast($counter == $childrenCount);
$child->setPositionClass($itemPositionClassPrefix . $counter);
$outermostClassCode = '';
$outermostClass = $menuTree->getOutermostClass();
if ($childLevel == 0 && $outermostClass) {
$outermostClassCode = ' class="' . $outermostClass . '" ';
$child->setClass($outermostClass);
}
$html .= '<li ' . $this->_getRenderedMenuItemAttributes($child) . ' >';
$html .= '<a href="' . $child->getUrl() . '" ' . $outermostClassCode . ' onclick=alert("hitop");><span>'
. $this->escapeHtml($child->getName()) . 'jain</span></a>';
if ($child->hasChildren()) {
if (!empty($childrenWrapClass)) {
$html .= '<div class="' . $childrenWrapClass . '">';
}
$html .= '<ul class="level' . $childLevel . '">';
$html .= $this->_getHtml($child, $childrenWrapClass);
$html .= '</ul>';
if (!empty($childrenWrapClass)) {
$html .= '</div>';
}
}
$html .= '</li>';
$counter++;
}
return $html;
}
/**
* Generates string with all attributes that should be present in menu item element
*
* @param Varien_Data_Tree_Node $item
* @return string
*/
protected function _getRenderedMenuItemAttributes(Varien_Data_Tree_Node $item)
{
$html = '';
$attributes = $this->_getMenuItemAttributes($item);
foreach ($attributes as $attributeName => $attributeValue) {
$html .= ' ' . $attributeName . '="' . str_replace('"', '\"', $attributeValue) . '"';
}
return $html;
}
/**
* Returns array of menu item's attributes
*
* @param Varien_Data_Tree_Node $item
* @return array
*/
protected function _getMenuItemAttributes(Varien_Data_Tree_Node $item)
{
$menuItemClasses = $this->_getMenuItemClasses($item);
$attributes = array(
'class' => implode(' ', $menuItemClasses)
);
return $attributes;
}
/**
* Returns array of menu item's classes
*
* @param Varien_Data_Tree_Node $item
* @return array
*/
protected function _getMenuItemClasses(Varien_Data_Tree_Node $item)
{
$classes = array();
$classes[] = 'level' . $item->getLevel();
$classes[] = $item->getPositionClass();
if ($item->getIsFirst()) {
$classes[] = 'first';
}
if ($item->getIsActive()) {
$classes[] = 'active';
}
if ($item->getIsLast()) {
$classes[] = 'last';
}
if ($item->getClass()) {
$classes[] = $item->getClass();
}
if ($item->hasChildren()) {
$classes[] = 'parent';
}
return $classes;
}
}
?>
答案 0 :(得分:2)
<rewrite>
的父元素必须像原始模块的代码一样命名,而不是像您自己的那样。 Magento无法知道,你想要重写的是什么。
<blocks>
<page>
<rewrite>
<html_topmenu>Mynav_Mytopmenu_Block_Html_Topmenu</html_topmenu>
</rewrite>
</page>
</blocks>