Dinamički dodavati stranicama za Zend_Navigation kontejner za vrijeme izvođenja
U nastavku na moj zadnji post o Zend_Navigation, Ruta zahtjeva za sitemap.xml običaju kontroler / akcija , ovaj post je o dymnamically dodavanje stranica Zend_Navigation kontejner u runtime / script izvršenje.
Njezina sve dobro i dobro navodeći vaše stranice u ini ili XML datoteke, ali u nekom trenutku ćete morati promijeniti stranicama na svoje web-mjesto koje želite kao dio izbornika, sitemap, ili će biti uključeni u Vaše povratna staza. Stoga ono što trebamo učiniti je dodati na naše stranice Zend_Navigation kontejner za vrijeme izvođenja. Primjeri za to će biti za dodavanje vijesti, blogu ili stranici komentari, itd.
U ovom primjeru ja ću dodati neke novosti postove na mom statički definirane ini config. Da biste dobili moj vijesti konfiguracije post stranici sam koristio klase koja vraća polje u sljedećem obliku:
$ PagesToAdd = array ( 0 => niz ( 'Label' => 'Lažni vijesti # 5 ...', 'Modul' => 'www', 'Put' => 'www-indeks, 'Akcija' => 'pogled', 'Kontrolor' => 'vijesti', 'Params' => array ( 'Id' => '5-Lažni-vijesti-priča - 5 ') ), 1 => niz (/ * Više pojedinosti o stranici * /), );
Kao što ćete primijetiti da funkcija vraća niz u kojem se nalaze polja koja čine config polja za Zend_Navigation_Page_Mvc. Dakle, petlje preko niza novih Zend_Navigation stranice mogu biti kreirani iz config polja. Sljedeći stvar za učiniti kao dio petlje je da za dodavanje stranice u ispravan položaj (alternativno stranicama može biti dodan u rasutom stanju pomoću -> addPages () metoda).
Da biste to učinili, pronađite stranicu koju želite dodati pod-stranice i jednostavno dodati stranicama. U ovom slučaju koristio sam sljedeći kod kako bi pronašli moju stranicu:
$ Kontejner-> findOneBy ('oznaku', 'Vijesti') -> addPage ($ stranica); Moj ukupni navigacija inicijalizacije u bootstrap, dakle izgleda ovako:
/ ** * Koji se rabe za rukovanje top-level navigacija * * @ Povratak Zend_Navigation * / zaštićena funkcija _initNavigation () { $ This-> bootstrap ('izgled'); $ Izgled = $ this-> getResource ('izgled'); $ = $ Pogled izgleda-> getView (); $ Config = new Zend_Config_Ini ( APPLICATION_PATH. '/ Konfiguracijski / navigation.ini', APPLICATION_ENV); $ Kontejner = new Zend_Navigation ($ config-> zadana vrijednost); / / Sada dodajte zadnjih 25 izvješća vijesti $ Vijest = new Vijesti (); $ Stranica = $ news-> getNavigationEntries (); foreach ($ stranica kao $ stranica) { $ Page = novi Zend_Navigation_Page_Mvc ($ stranica); $ Kontejner-> findOneBy ('oznaku', 'Vijesti') -> addPage ($ stranica); } $ View-> plovidbe ($ spremnik); }
Na što treba biti dodana je neki oblik caching (koristeći Zend_Cache vjerojatno;)) inače to je idući u biti vrlo skupo s svakoj stranici opterećenja.


















































To je upravo ono što sam bio obličje za - hvala za zaista jasan primjer. Živjeli. G
Nice post! Ja sam nekih problema s pokretanjem model klase u bootstrap. Svaki trag zašto primjena / model klase nisu dostupni iz bootstrap? Vaša klasa se zove 'nova Vijesti ()', umjesto Htio bih dodati navigaciju stranicama uzimajući navigacijskom stablu od modela klase. Ako imate ideju, javite mi! ;)
Moj model je uredio na tu dužnost, njegov ispravan naziv u kodu je Pro_News i pokupila autoloader.
Nagađanje ne koristite module? Ali ako je tako svoj model bi trebao biti pozvan _News za ZF pokupiti po defaultu (ja ne koristim ovaj sustav sebe).
Htio predlažemo provjeru uključuju put od svog bootstrap metoda vidjeti ako on sadrži "application / modela" ili uključiti datoteku ručno.
Pa sam koristiti module, moje loše. Ali vam predlažemo autoloading trebali raditi? Pa, ja sam da kopaju u nju malo dublje. U ovom trenutku sam koristiti addPage funkciju u BaseControllers, što zapravo i nije prijateljski performanse ... hehe. Hvala za odgovor.
Osigurati tvoj modul model se zove ispravno _News (Na primjer) i to bi trebalo pokupiti koristeći autoloading.
Moj model je uredio na tu dužnost, njegov ispravan naziv u kodu je Pro_News i pokupila autoloader.
Nagađanje ne koristite module? Ali ako je tako svoj model bi trebao biti pozvan _News Za ZF pokupiti po defaultu (ja ne koristim ovaj sustav sebe).
Htio predlažemo provjeru uključuju put od svog bootstrap metoda vidjeti ako on sadrži "application / modela" ili uključiti datoteku ručno.