Dynamisk legge til sider Zend_Navigation container under kjøring

Ved Steven Lloyd Watkin , torsdag 7 januar 2010 22:50

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.

One Response til "dynamisk legge til sider Zend_Navigation container under kjøring"

  1. Mr Man sier:

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

Legg igjen en kommentar













Panorama Theme av Themocracy

7 besøkende online nå
5 gjester, to roboter, 0 medlemmer
Maks besøkende i dag: 23 kl 04:19 UTC
Denne måneden: 26 på 07-05-2011 12:35 UTC
I år: 130 på 28-03-2011 22:40 UTC
All time: 130 på 28-03-2011 10:40 UTC