2009-12-28 2 views
8

Ich verwende eine Navigations-XML-Datei in Verbindung mit meiner Zend Framework MVC App.Benutzerdefiniertes Rendering von Zend_Navigation

Ein Top-Level-Menü wird am oberen Rand meines Layouts gerendert. Der Code zu erzeugen, es sieht wie folgt aus:

$this->navigation()->menu()->renderMenu(null,array('maxDepth' => 0)); 

Dies wird eine ungeordnete Liste von Links automatisch machen, die ich in meiner Top-Menü Stil haben. Nun möchte ich das Untermenü (um die aktive Container-Struktur darzustellen) rendern, indem ich die Vorteile der eingebauten Zend_Navigation-Güte (MVC- und ACL-Integration) nutze, aber mit einem benutzerdefinierten Markup. Ich würde dies tun, indem das Einfügen:

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

In der Tat habe ich eine Reihe von sehr spezifischen Markup, das ich dies mit zu machen brauche. Es ist so drastisch anders. Ich glaube nicht, dass ich eine ungeordnete Liste entwerfen könnte, um meine gewünschte Präsentation zu empfangen.

Gibt es eine einfache Möglichkeit (oder kompliziert, wenn nötig), ein Untermenü anzupassen?

Antwort

11

Schauen Sie sich diese Antwort von mir: Getting Zend_Navigation menu to work with jQuery's Fisheye

Zusammengefasst Sie eine Ansicht für die Navigation und eine Schleife durch die Seiten erstellen und die Seite Methoden verwenden, um benutzerdefinierten Markup zu erstellen. Soweit ich weiß, gibt es zur Zeit keine dekoratorähnliche Unterstützung für Navigation.

7

Typeoneerror mich auf dem richtigen Weg, hier ist der Code, den ich am Ende mit:

In layout.phtml:

<?= $this->navigation()->menu()->renderMenu(null,array('maxDepth' => 0)); ?> 
<? $this->navigation()->menu()->setPartial('sidemenu.phtml'); ?> 
<?= $this->navigation()->menu()->render(); ?> 

In sidemenu.phtml:

$this->navigation()->findByResource(
    Zend_Controller_Front::getInstance()->getRequest()->module . 
    Zend_Controller_Front::getInstance()->getRequest()->controller 
); 

foreach ($this->container as $page) { 
    if ($page->isVisible() && $this->navigation()->accept($page)) { 
     if ($page->isActive()) { 
      echo $page->getLabel(); 
      $subcontainer = $page->getPages(); 
      foreach ($subcontainer as $subpage) { 
       echo $subpage->getLabel(); 
      } 
     } 
    } 
} 

Arbeitete wie ein Zauber, der das als Antwort für jemand anderen zurücklässt.

Verwandte Themen