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.