Wie erweitere ich den Zend Navigation Menu View Helper?

Ich muss die Ausgabe von ändernZend_View_Helper_Navigation_Menu. Ich habe die beiden Funktionen gefunden, die ich ändern muss, und weiß, wie ich die gewünschten Änderungen vornehme. Ich weiß nicht, wie ich das Navigationsobjekt dazu bringen soll, meinen Ansichtshelfer anstelle des Zend-Objekts zu verwenden.

Code-Snippet für meine Klassenerweiterung:

// file /library/My/View/Helper/Navigation/Menu.php
class My_View_Helper_Navigation_Menu extends Zend_View_Helper_Navigation_Menu
{
    protected function _renderDeepestMenu(Zend_Navigation_Container $container,
                                          $ulClass,
                                          $indent,
                                          $minDepth,
                                          $maxDepth)
    {
        // modified code here
    }

    protected function _renderMenu(Zend_Navigation_Container $container,
                                   $ulClass,
                                   $indent,
                                   $minDepth,
                                   $maxDepth,
                                   $onlyActive)
    {
        // modified code here
    }
}

Bearbeitungen zur Verdeutlichung

Ich möchte die Klasse der<li> Elemente und entfernen Sie dieEOL und Einrückung. Für das Menüansichtskript gibt es keine Optionen, weshalb ich es erweitern muss.

Initialisieren des Navigationsobjekts in meinem Bootstrap:

$navTable = new Default_Model_Site_DbTable_Navigation();
$view = $this->getResource('view');
$view->navigation(new Zend_Navigation($navTable->getNavigation()));

Das Menü in meinem Layout rendern:

echo $this->navigation()->menu();

Lösung

Ich habe es zum Laufen gebracht, indem ich Dinge wie folgt umbenannt habe, aber ich bin mir nicht sicher, warum ich die nicht überladen / überschreiben kann_Menu Klasse undmenu() Funktion.

Ändern Sie den Klassennamen inMy_View_Helper_Navigation_MyMenuErgänzen Sie diemyMenu Funktion der Klasse (return parent::menu($container);)Anrufecho $this->navigation()->myMenu(); im Layout

Klasse Drahtmodell:

// file /library/My/View/Helper/Navigation/MyMenu.php
class My_View_Helper_Navigation_MyMenu extends Zend_View_Helper_Navigation_Menu
{
    public function myMenu(Zend_Navigation_Container $container = null)
    {
        return parent::menu($container);
    }

    protected function _renderDeepestMenu(Zend_Navigation_Container $container,
                                          $ulClass,
                                          $indent,
                                          $minDepth,
                                          $maxDepth)
    {
        // modified code here
    }

    protected function _renderMenu(Zend_Navigation_Container $container,
                                   $ulClass,
                                   $indent,
                                   $minDepth,
                                   $maxDepth,
                                   $onlyActive)
    {
        // modified code here
    }
}

Antworten auf die Frage(3)

Ihre Antwort auf die Frage