Dynamisch Seiten hinzufügen Zend_Navigation Container zur Laufzeit

Von Steven Lloyd Watkin , Donnerstag 7. Januar 2010 22.50 Uhr

In einer Fortsetzung zu meinem letzten Post über Zend_Navigation, Route Anfragen für sitemap.xml, um benutzerdefinierte controller / action , Post geht es um dymnamically Hinzufügen von Seiten zu einer Zend_Navigation Container zur Laufzeit / Skriptausführung.

Sein alles schön und gut Angabe Ihrer Seiten in einer ini-oder XML- Datei, aber irgendwann wirst du site Sie haben wechselnden Seiten in die Sie wünschen Weg als Teil eines Menüs, Sitemap oder Ihre Brotkrümel zu sein, die in. Deshalb, was wir tun ist, um unsere Seiten Zend_Navigation Container zur Laufzeit hinzufügen müssen. Beispiele hierfür wären in Hinzufügen Nachrichten, Blog-Posts, oder die Seite Kommentare, etc. werden

In diesem Beispiel werde ich einige Neuigkeiten Beiträge zu meiner statisch definierten ini config hinzuzufügen. Um meine News zu posten Seite Konfigurationen Ich habe eine Klasse, die ein Array in dem folgenden Format zurück verwendet:

  $ PagesToAdd = array (
   0 =>
     array (
       'Label' => 'Fake Nachrichten Geschichte # 5 ...',
       'Modul' => 'www',
       'Route' => 'www-Index',
       'Action' => 'Ansicht',
       'Controller' => 'Nachrichten',
       'Params' => Array (
           'Id' => '5-Fake-Nachrichten-Geschichte - 5 ')
     ),
   1 =>
     array (/ * Mehr Details Seite * /)
  ); 

Wie Sie feststellen, dass die Funktion ein Array, in dem Arrays aus denen sich die config-Arrays für Zend_Navigation_Page_Mvc enthalten sind zurückgekehrt. Daher kann durch Durchlaufen des Arrays neue Zend_Navigation Seiten aus dem Array config erstellt werden. Das nächste, was zu tun ist als Teil der Schleife zu den Seiten in der richtigen Position hinzufügen (alternativ Seiten in der Masse zugesetzt werden können, mit Hilfe von -> addPages ()-Methode).

Um dies zu tun, suchen Sie die Seite, die Sie möchten die Sub-Seiten hinzufügen und fügen Sie einfach die Seiten. In diesem Fall habe ich den folgenden Code auf meiner Seite finden verwendet:

  $ Container-> findOneBy ('label', 'Aktuell') -> addPage ($ page); 

Mein Gesamteindruck Navigation Initialisierung in der Bootstrap daher wie folgt aussieht:

  / **
      * Für den Umgang mit Top-Level-Navigation verwendet
      *
      * @ Return Zend_Navigation
      * /
     geschützten Funktion _initNavigation ()
     {
         $ This-> bootstrap ("Layout");
         $ Layout = $ this-> getResource ("Layout");
         $ View = $ layout-> getView ();
         $ Config = new Zend_Config_Ini (
             APPLICATION_PATH.  "/ Configs / navigation.ini ', APPLICATION_ENV);

         $ Container = new Zend_Navigation ($ config-> Standard);
         / / Jetzt fügen Sie die letzten 25 Nachrichten Berichte
         $ News = new News ();
         $ Pages = $ news-> getNavigationEntries ();
         foreach ($ Seiten als $ page) {
        	 $ Page = new Zend_Navigation_Page_Mvc ($ page);
        	 $ Container-> findOneBy ('label', 'Aktuell') -> addPage ($ page);
         }
         $ View-> Navigation ($ container);
     } 

Auf was muss hinzugefügt werden, um irgendeine Form von Caching (mit Zend_Cache vermutlich;)) ansonsten das wird sehr teuer sein, wobei jede Seite zu laden.

One Response to "Dynamisch Seiten hinzufügen Zend_Navigation Container zur Laufzeit"

  1. Herr Mann sagt:

    Das ist genau das, was ich gesucht habe - Danke für ein wirklich gutes Beispiel. Cheers. G

Lassen Sie eine Antwort













Panorama Thema von Themocracy

9 Besucher jetzt online
6 Gäste, 3 Bots, 0 Mitglieder
Max Besucher heute: 13 um 11:17 Uhr UTC
Diesen Monat: 26 am 2011.07.05 00.35 UTC
Dieses Jahr: 130 an 28-03-2011 10.40 UTC
Insgesamt: 130 an 28-03-2011 22.40 UTC