2016-05-10 11 views
3

Ich versuche zu verstehen, wie die Nav-Leiste in Magento gebildet wird und kam über diese Zeile in topmenu.phtml, die ich nicht herausfinden konnte.Magento: Level-Top zu entziffern

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

Ich bekomme, wie Childblocks genannt werden, aber wo ist 'level-top'? Scheint wie ein spezielles Schlüsselwort. Kann mir jemand erklären, wo dies definiert ist und wie das mit dem Top Nav verbunden ist?

Vielen Dank im Voraus.

Antwort

2

Ja, ist dies ein wenig seltsam, aber es läuft darauf hinaus, die folgenden:

Der Anruf $this->getHtml('level-top') den Blockklasse verweist Mage_Page_Block_Html_Topmenu ($this ist eine Instanz der Klasse I) mit dem Verfahren im Innern:

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; 
} 

->$outermostClass hält den Wert top-level

Von dort können Sie den Anruf zusehen, wobei $renderer eine Instanz von Mage_Page_Block_Html_Topmenu_Renderer ist.

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); 
} 

Diese Methode lädt nun die Vorlagendatei in die $includeFilePath Variable, in meinem Fall /vagrant/app/design/frontend/rwd/default/template/page/html/topmenu/renderer.phtml (je nach Thema, das Sie verwenden).

Ich konnte keine Verwendung von $outermostClass mit dem Wert top-level erkennen.

Verwandte Themen