Ausgefallene Menü´s machen es manchmal notwendig direkt im Pimcore Navigationstitel HTML-Entities einzutragen.
<span style="font-size: 2em;">AD</span> VERTISING
Grundsätzlich werden die HTML-Entities aber von der Zend Navigation escaped.
1. Möglichkeit (etwas unschön)
Das ganze kann ganz einfach umgangen werden, indem man in seinem Controller folgenden Befehl vor seine Navigation schreibt:
$this->view->setEscape('trim');
Bedenklich an dieser Einstellung ist, dass ich mit diesem Befehl die gesamte View-Verarbeitung umstelle und damit höchst wahrscheinlich andere Probleme schaffe.
2. & solide Möglichkeit
Die Anpassung des Zend_View_Helper_Navigation bzw. diesen zu überladen. Schaut man sich in der Klasse Zend_View_Helper_Navigation (zu finden in /pimcore/lib/Zend/View/Helper/Navigation/Menu.php) die Funktion htmlify (Zend_Navigation_Page $page) mal genauer an, sieht man hier im letzten Teil --> $this->view->escape($label) - welcher für das excapen des Menü´s verantwortlich ist. Diesen Teil müssen wir nun mit unserem angepassten Teil überladen. Hierzu habe ich mir im Ordner /website/views/helpers/ eine neue Datei MeinMenu.php angelegt, welche mit Extends obige Klasse erweitert.
class Website_Helper_RobertsMenu extends Zend_View_Helper_Navigation_Menu { public function htmlify(Zend_Navigation_Page $page) { // get label and title for translating $label = $page->getLabel(); $title = $page->getTitle(); // translate label and title? if ($this->getUseTranslator() && $t = $this->getTranslator()) { if (is_string($label) && !empty($label)) { $label = $t->translate($label); } if (is_string($title) && !empty($title)) { $title = $t->translate($title); } } // get attribs for element $attribs = array( 'id' => $page->getId(), 'title' => $title, 'class' => $page->getClass() ); // does page have a href? if ($href = $page->getHref()) { $element = 'a'; $attribs['href'] = $href; $attribs['target'] = $page->getTarget(); $attribs['accesskey'] = $page->getAccessKey(); } else { $element = 'span'; } // Add custom HTML attributes $attribs = array_merge($attribs, $page->getCustomHtmlAttribs()); // return '<' . $element . $this->_htmlAttribs($attribs) . '>' // . $this->view->escape($label) // . ''; return '<' . $element . $this->_htmlAttribs($attribs) . '>' . $label . ''; } public function RobertsMenu(Zend_Navigation_Container $container = null) { return $this->menu($container); } }
Wie man sieht escaped MeinMenu jetzt das Label des Menü´s nicht mehr. Wichtig - mann muss natürlich noch den Helper im Autoloader anmelden (/website/lib/Website/Controller/Action.php):
$this->view->addHelperPath(PIMCORE_WEBSITE_PATH . '/views/helpers/', 'Website_Helper');
Jetzt noch der Aufruf im View:
echo $this->navigation()->RobertsMenu()->renderMenu($nav, array("maxDepth" => 0));
In Kürze gibt es auch den Link zur gerade in der Entwicklung befindlichen Website.