Dinamično dodate strani na posodo Zend_Navigation na runtime
V nadaljevanju na moj zadnji post o Zend_Navigation, Route zahteve za sitemap.xml po meri krmilnik / ukrepanje , ta post je o dymnamically dodajanje strani v posodo Zend_Navigation na runtime / izvajanje skript.
Njegovo vse lepo in prav z navedbo vaše strani v ini ali xml datoteke, ampak na neki točki ste tekoč, da so spremembe strani na spletnem mestu, ki ga želite kot del menija, zemljevid, ali je treba vključiti v vašem breadcrumb sled. Torej, kaj moramo storiti, je dodajanje strani v naš Zend_Navigation posodi pri runtime. Primeri za to so pri dodajanju novic, blog delovnih mest ali strani pripomb, itd
V tem primeru bom dodamo nekaj novic objav na moj statično opredeljene ini config. Da se moje novice konfiguracije stran post sem uporabil razred, ki vrne niz v naslednji obliki:
$ PagesToAdd = array ( 0 => array ( "Oznaka" Fake news => 'Zgodba # 5 ...', "Modul" => "www", "Route" => "www-indeks", "Ukrep" 'pogled' => "Upravljavec" 'news' => "Params" => array ( 'Id' => "5-Fake-novice-zgodbo - 5 ') ), 1 => array (/ * Več podrobnosti strani * /), );
Kot boste opazili, da je funkcija vrne niz, v katerem so navedena polja, ki sestavljajo config nizi za Zend_Navigation_Page_Mvc. Zato je mogoče, z looping nad array novo Zend_Navigation strani, ki bodo ustvarjeni iz config array. Naslednja stvar, kot del zanke je dodati strani v pravilnem položaju (alternativno se lahko doda strani v razsutem stanju s pomočjo -> addPages () metoda).
Če želite to narediti, poiščite strani, ki jih želite dodati pod-strani, in preprosto dodate strani. V tem primeru pa sem uporabil naslednjo kodo, da bi našli mojo stran:
$ Posoda-> findOneBy ("oznake ',' Zadnje novice ') -> addPage ($ stran); Moj splošni navigacijo inicializacijo v bootstrap torej izgleda takole:
/ ** * Se uporabljajo za ravnanje z vrhunsko navigacijsko * * @ vrnitev Zend_Navigation * / zaščiteno funkcijo _initNavigation () {$ to-> bootstrap ("postavitev"); $ postavitev = $ tega-> getResource ("postavitev"); $ Glede = $ postavitev-> getView (); $ config = new Zend_Config_Ini (APPLICATION_PATH '/ zaupnik / navigation.ini ", APPLICATION_ENV.); $ posodo = new Zend_Navigation ($ config-> default); / / Sedaj dodajte zadnjih 25 novice novice $ = new News (); $ pages = $ novice-> getNavigationEntries (); foreach ($ strani AS $ strani) {$ page = nova Zend_Navigation_Page_Mvc ($ stran); $ posodo-> findOneBy ("oznaka", "Zadnje novice") -> addPage ($ stran);} $ pogled-> navigacija ($ zabojnik);} Na stvar, ki jo je treba še dodati, je neke vrste predpomnjenja (z uporabo Zend_Cache verjetno;)) drugače pa bo precej drago, na vsaki strani obremenitve.


















































To je samo tisto, kar sem iskal - hvala za zelo jasen primer. Cheers. G
Nice post! Sem nekaj težav začetku model razreda v bootstrap. Vsak namig zakaj application / model razredi niso na voljo iz bootstrap? Vaš razred se imenuje "nova News ()", namesto da bi rad dodal, navigacija strani, ki ga dobili navigacija drevo iz modela razreda. Če imate idejo, prosim! ;)
Moj model je uredil za delovno mesto, njegovo pravo ime v kodeksu, je Pro_News in je pobral Autoloader.
Ugibati vaš 'ne using module? Vendar pa bi morale, če je to vaš model se imenuje _News za ZF, da pobere privzeto (ne uporabljam ta sistem sam).
Želel predlagamo preverjanje vključuje pot od vašega bootstrap metodo, da vidim, če vsebuje "application / models" ali vsebuje datoteke ročno.
Pa sem uporabo modulov, moja slaba. Ampak ti predlagam autoloading treba delo? No, sem kopati v to malo globlje. Trenutno sem uporabo addPage funkcijo v BaseControllers, kar ni ravno prijazno delovanje ... hehe. Hvala za vaš odgovor.
Zagotoviti je vaš modul model z imenom pravilno _News (Na primer) in jo je treba pobrati z autoloading.
Moj model je uredil za delovno mesto, njegovo pravo ime v kodeksu, je Pro_News in je pobral Autoloader.
Ugibati vaš 'ne using module? Vendar pa bi morale, če je to vaš model se imenuje _News Za ZF, da pobere privzeto (ne uporabljam ta sistem sam).
Želel predlagamo preverjanje vključuje pot od vašega bootstrap metodo, da vidim, če vsebuje "application / models" ali vsebuje datoteke ročno.