Dynamisk tilføje sider til Zend_Navigation beholder ved runtime

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

I en fortsættelse på mit sidste indlæg om Zend_Navigation, Rute anmodninger om sitemap.xml til brugerdefinerede controller / action , post drejer det sig om dymnamically tilføje sider til en Zend_Navigation beholder ved runtime / script udførelse.

Dens alle sammen meget godt angiver dine sider i en ini-eller xml -fil, men på et tidspunkt, du bliver nødt til at ændre sider på dit websted, du vil som en del af en menu, sitemap, eller at blive inkluderet i din breadcrumb trail. Derfor, hvad vi skal gøre, er at tilføje sider i vores Zend_Navigation beholder ved runtime. Eksempler på dette ville være i at tilføje nyheder, blog indlæg, eller side kommentarer, etc.

I dette eksempel, som jeg har tænkt mig at tilføje nogle nyheder stillinger til min statisk defineret ini config. At få min news post side konfigurationer Jeg har brugt en klasse, som returnerer et array i følgende format:

  $ PagesToAdd = array (
   0 =>
     array (
       "Etiket" => 'Fake nyhedshistorie # 5 ...',
       'Modul' => 'www',
       »Rute '=>' www-indeks",
       »Aktion« => 'Vis',
       »Controller '=>' nyheder ',
       »Params '=> array (
           'Id' => '5-Fake-news-historie - 5 ')
     ),
   1 =>
     array (/ * Mere sidedetaljer * /),
  ); 

Som du vil opdage, at funktionen har returneret et array, hvori er indeholdt arrays, der udgør den config arrays for Zend_Navigation_Page_Mvc. Derfor kan ved looping over array nye Zend_Navigation sider skabes fra config array. Den næste ting at gøre, som en del af løkken er til for at tilføje sider i den korrekte position (alternativt sider kan indsættes i bulk ved at bruge -> addPages ()-metoden).

At gøre dette, skal du finde den side, du ønsker at tilføje sub-sider til og blot tilføje sider. I dette tilfælde har jeg brugt følgende kode til at finde min side:

  $ Container-> findOneBy ('label', 'Sidste nyt') -> addPage ($ side); 

Min overordnede navigation initialisering i bootstrap ser derfor således ud:

  / **
      * Anvendes til håndtering top-niveau navigation
      *
      * @ Return Zend_Navigation
      * /
     beskyttet funktion _initNavigation ()
     {
         $ This-> bootstrap ('Layout');
         $ Layout = $ this-> getResource ('Layout');
         $ View = $ layout-> getView ();
         $ Config = ny Zend_Config_Ini (
             APPLICATION_PATH.  '/ Configs / navigation.ini «, APPLICATION_ENV);

         $ Container = new Zend_Navigation ($ config-> standard);
         / / Nu tilføje de sidste 25 reportager
         $ Nyhed = ny Nyheder ();
         $ Sider = $ news-> getNavigationEntries ();
         foreach ($ sider som $ side) {
        	 $ Page = nye Zend_Navigation_Page_Mvc ($ side);
        	 $ Container-> findOneBy ('label', 'Sidste nyt') -> addPage ($ side);
         }
         $ Vis-> navigation ($ container);
     } 

Om ting, der skal tilføjes en vis form for caching (brug Zend_Cache formodentlig;)) ellers vil være ganske dyrt med hver side belastning.

Et svar til "Dynamisk tilføje sider til Zend_Navigation container på kørselstidspunktet"

  1. Hr. Mand siger:

    Det er bare hvad jeg ledte efter - tak for en rigtig klart eksempel. Cheers. G

Efterlad et svar













Panorama Tema ved Themocracy

7 besøgende online nu
4 gæster, 3 bots, 0 medlemmer
Max besøgende i dag: 13 kl 11:17 UTC
Denne måned: 26 kl 2011/07/05 12:35 UTC
I år: 130 kl 28-03-2011 22:40 UTC
Alle tider: 130 kl 28-03-2011 10:40 UTC