Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Magento:如何在topmenu中添加类别说明?_Magento_Navigation_Categories - Fatal编程技术网

Magento:如何在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的topmenu导航中

我尝试过使用CMS块进行黑客攻击,但没有正常工作(它显示类别,但在topmenu之外) 你有没有任何关于如何容易做到这一点的线索


感谢您的帮助。

快速总结:(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;
        }
    }