magento:试图破译顶级

时间:2016-05-10 14:14:11

标签: menu navigation magento-1.9 toplevel

我试图理解导航条在magento中的形成方式,并在topmenu.phtml中遇到了这条线,我无法弄清楚。

<?php $_menu = $this->getHtml('level-top') ?>

我知道如何调用子块,但是'level-top'在哪里?似乎是一个特殊的关键词。任何人都可以解释这个定义的位置以及它与顶级导航的关联方式吗?

提前致谢。

1 个答案:

答案 0 :(得分:2)

是的,这有点奇怪,但归结为以下几点:

调用$this->getHtml('level-top')使用内部方法引用块类Mage_Page_Block_Html_Topmenu$this是该类的实例):

public function getHtml($outermostClass = '', $childrenWrapClass = '')
{
    Mage::dispatchEvent('page_block_html_topmenu_gethtml_before', array(
        'menu' => $this->_menu,
        'block' => $this
    ));

    $this->_menu->setOutermostClass($outermostClass);
    $this->_menu->setChildrenWrapClass($childrenWrapClass);

    if ($renderer = $this->getChild('catalog.topnav.renderer')) {
        $renderer->setMenuTree($this->_menu)->setChildrenWrapClass($childrenWrapClass);
        $html = $renderer->toHtml();
    } else {
        $html = $this->_getHtml($this->_menu, $childrenWrapClass);
    }

    Mage::dispatchEvent('page_block_html_topmenu_gethtml_after', array(
        'menu' => $this->_menu,
        'html' => $html
    ));

    return $html;
}

- &GT; $outermostClass保留值top-level

从那里,您可以看到$renderer->toHtml()的来电,其中$rendererMage_Page_Block_Html_Topmenu_Renderer的实例。

protected function _toHtml()
{
    $this->_addCacheTags();
    $menuTree = $this->getMenuTree();
    $childrenWrapClass = $this->getChildrenWrapClass();
    if (!$this->getTemplate() || is_null($menuTree) || is_null($childrenWrapClass)) {
        throw new Exception("Top-menu renderer isn't fully configured.");
    }

    $includeFilePath = realpath(Mage::getBaseDir('design') . DS . $this->getTemplateFile());
    if (strpos($includeFilePath, realpath(Mage::getBaseDir('design'))) === 0 || $this->_getAllowSymlinks()) {
        $this->_templateFile = $includeFilePath;
    } else {
        throw new Exception('Not valid template file:' . $this->_templateFile);
    }
    return $this->render($menuTree, $childrenWrapClass);
}

此方法现在将模板文件加载到$includeFilePath变量中,在我的情况下/vagrant/app/design/frontend/rwd/default/template/page/html/topmenu/renderer.phtml(取决于您使用的主题)。

我无法发现$outermostClass使用值为top-level的任何内容。