Magento:如何在topmenu中添加类别说明?
我想将类别描述添加到Magento的topmenu导航中 我尝试过使用CMS块进行黑客攻击,但没有正常工作(它显示类别,但在topmenu之外) 你有没有任何关于如何容易做到这一点的线索Magento:如何在topmenu中添加类别说明?,magento,navigation,categories,Magento,Navigation,Categories,我想将类别描述添加到Magento的topmenu导航中 我尝试过使用CMS块进行黑客攻击,但没有正常工作(它显示类别,但在topmenu之外) 你有没有任何关于如何容易做到这一点的线索 感谢您的帮助。快速总结:(Magento 1.8.2.0及更高版本)(早期版本见最后一段) 在主题的local.xml中的top.menu块下添加一个子块,并创建(或从RWD主题复制)一个自定义renderer.phtml文件,以生成包含s类别描述的自定义菜单HTML renderer.phtml的建议路径是a
感谢您的帮助。快速总结:(Magento 1.8.2.0及更高版本)(早期版本见最后一段) 在主题的local.xml中的
top.menu
块下添加一个子块,并创建(或从RWD主题复制)一个自定义renderer.phtml文件,以生成包含s类别描述的自定义菜单HTML
renderer.phtml的建议路径是app/design/frontend/yourpackage/default/template/page/html/topmenu/renderer.phtml
详细信息:
如果您使用的是Magento 1.8.2.0或更高版本,则应尝试实现一个菜单renderer.phtml
文件,因为该代码:
file: app/Mage/Page/Block/Html/Topmenu.php
class: Mage_Page_Block_Html_Topmenu extends Mage_Core_Block_Template
function: getHtml()
public function getHtml($outermostClass = '', $childrenWrapClass = '')
{
//...
if ($renderer = $this->getChild('catalog.topnav.renderer')) {
$renderer->setMenuTree($this->_menu)->setChildrenWrapClass($childrenWrapClass);
$html = $renderer->toHtml();
} else {
$html = $this->_getHtml($this->_menu, $childrenWrapClass);
}
//...
}
您可以在这里看到,如果有一个子块名为catalog.topnav.renderer
,则Magento将使用它,否则它会优雅地返回到使用$this->\u getHtml()
,其中$this
是Mage\u Page\u block\u Html\u Topmenu
不幸的是,Magento默认主题没有使用新的渲染器功能,因此基本主题中没有示例。然而,作为Magento的标准配置,最优秀的RWD主题使用菜单渲染器,我强烈建议您学习RWD主题代码,以了解如何使用菜单渲染器phtml文件
具体而言,您应该在local.xml中创建一个附加条目来定义菜单呈现器:
file: app/design/frontend/yourpackage/default/layout/local.xml
<block type="page/html_header" name="header" as="header">
<block type="core/text_list" name="top.menu" as="topMenu" translate="label">
<label>Navigation Bar</label>
<block type="page/html_topmenu" name="catalog.topnav" template="page/html/topmenu.phtml">
<block type="page/html_topmenu_renderer" name="catalog.topnav.renderer" template="page/html/topmenu/renderer.phtml"/>
</block>
</block>
</block>
通过研究该文件,您可以开始了解各种修改在何处以及如何影响菜单html。
请注意Mage\u Page\u Block\u Html\u Topmenu\u Renderer::render()
用于处理rendrer.phtml文件的代码:对于Magento来说,它是一个直接的include$this->\u templateFile
并返回字符串或ob\u get\u cleaned buffer:
file: /app/code/core/Mage/Page/Block/Html/Topmenu/Renderer.php
class: Mage_Page_Block_Html_Topmenu_Renderer
function: render()
public function render(Varien_Data_Tree_Node $menuTree, $childrenWrapClass)
{
ob_start();
$html = include $this->_templateFile;
$directOutput = ob_get_clean();
if (is_string($html)) {
return $html;
} else {
return $directOutput;
}
}
如果您使用的是1.8.2.0之前的版本,则需要重写类
Mage\u Page\u Block\u Html\u Topmenu
,并重写其函数\u getHtml()
,将额外的Html注入菜单。主要缺点是每次菜单布局更改时都需要重新编译。谢谢您的回答现在,我可以从模板中显示topmenu了。
我真正不明白的是如何获得描述值
是吗 $children=$menuTree->getChildren(); 对象是否包含描述
我试着用$child->getDescription()调用它,但它不起作用。请显示代码。。。?
file: /app/code/core/Mage/Page/Block/Html/Topmenu/Renderer.php
class: Mage_Page_Block_Html_Topmenu_Renderer
function: render()
public function render(Varien_Data_Tree_Node $menuTree, $childrenWrapClass)
{
ob_start();
$html = include $this->_templateFile;
$directOutput = ob_get_clean();
if (is_string($html)) {
return $html;
} else {
return $directOutput;
}
}