Dynamisk legge til sider Zend_Navigation container under kjøring
I en fortsettelse på mitt siste innlegg om Zend_Navigation, Route forespørsler om sitemap.xml å egendefinerte kontroller / action , innlegget handler dette om dymnamically legge til sider til en Zend_Navigation container under kjøring / script kjøring.
Dens vel og bra spesifisere dine sider i en ini-eller xml -fil, men på et tidspunkt er du nødt til å endre sider på nettstedet ditt som du ønsker som en del av en meny, sitemap, eller å bli inkludert i brødsmule sti. Derfor hva vi trenger å gjøre er å legge til sider i vår Zend_Navigation container under kjøring. Eksempler på dette ville være å legge til nyheter, blogginnlegg, eller side kommentarer, etc.
I dette eksempelet jeg kommer til å legge noen nyheter innlegg til min statisk definerte ini config. For å få mine nyheter innlegg siden konfigurasjoner Jeg har brukt en klasse som returnerer en matrise i følgende format:
$ PagesToAdd = array (0 => array ('label' => 'Fake nyhetsartikkelen # 5 ...',' modul '=>' www ',' rute '=>' www-indeks ',' action '= > 'syn', 'controller' => 'news', 'params' => array ('id' => '5-Fake-news-historien - 5 ')), 1 => array (/ * Mer siden details * /),); Som du vil legge merke til at funksjonen har returnert en matrise der er inneholdt arrays som utgjør config arrays for Zend_Navigation_Page_Mvc. Derfor kan av looping over array nye Zend_Navigation sider opprettes fra config array. Den neste tingen å gjøre som en del av loopen er å legge til sidene i riktig posisjon (alternativt sider kan legges i bulk ved hjelp -> addPages ()-metoden).
For å gjøre dette, finn siden du ønsker å legge til sub-sidene og enkelt legge til sider. I dette tilfellet har jeg brukt følgende kode for å finne min side:
$ Container-> findOneBy ('label', 'Siste nytt') -> addPage ($ side); Mitt overordnede navigasjon initialisation i bootstrap ser derfor slik ut:
/ ** * Brukes til håndtering toppnivå navigasjon * * @ Return Zend_Navigation * / beskyttet funksjon _initNavigation () { $ This-> bootstrap ('layout'); $ Layout = $ this-> getResource ('layout'); $ View = $ layout-> getView (); $ Config = nye Zend_Config_Ini ( APPLICATION_PATH. '/ Configs / navigation.ini', APPLICATION_ENV); $ Container = nye Zend_Navigation ($ config-> default); / / Nå legger de siste 25 nyheter $ News = ny News (); $ Sider = $ news-> getNavigationEntries (); foreach ($ sider AS $ side) { $ Side = nye Zend_Navigation_Page_Mvc ($ side); $ Container-> findOneBy ('label', 'Siste nytt') -> addPage ($ side); } $ Vise-> navigasjon ($ container); }
På ting som må legges er en form for caching (bruker Zend_Cache formodentlig;)) ellers dette kommer til å være ganske dyrt med hver side lastes.


















































Det er akkurat det jeg var ute etter - takk for en veldig tydelig eksempel. Skål. G