Dynamisch Seiten hinzufügen Zend_Navigation Container zur Laufzeit
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.


















































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