Dynamiskt lägga till sidor i Zend_Navigation behållare vid körning

Genom Steven Lloyd Watkin , torsdag 7 januari 2010 22:50

I en fortsättning på mitt förra inlägg om Zend_Navigation, Route begäran om sitemap.xml till anpassade controller / action , inlägget är det om dymnamically lägga till sidor till en Zend_Navigation container vid körning / skript.

Dess gott och väl specificera dina sidor i en ini-eller XML- fil men någon gång du kommer att få ändra sidor på din webbplats som du vill ha som en del av en meny, sitemap, eller ingå i din sökvägen. Därför vad vi behöver göra är att lägga till sidor i vår Zend_Navigation container vid körning. Exempel på detta skulle vara att lägga nyheter, blogginlägg, eller en sida kommentarer, etc.

I detta exempel ska jag lägga till några nyheter inlägg till min statiskt definierade ini config. För att få mina nyheter konfigurationer inlägg sida har jag använt en klass som returnerar en array i följande format:

  $ PagesToAdd = array (
   0 =>
     array (
       "Etikett '=>' Fake nyhet # 5 ...',
       'Modul' => "www",
       Sträckning '=>' www-index ",
       'Action' => "Visa",
       Registeransvarig '=>' nyheter ',
       "Params '=> array (
           'Id' => "5-Fake-news-story - 5)
     ),
   1 =>
     array (/ * Fler detaljer om sidan * /),
  ); 

Som du märker att funktionen har återvänt en array där finns matriser som bildar config arrayer för Zend_Navigation_Page_Mvc. Därför kan genom looping över arrayen nya Zend_Navigation sidor skapas från config matrisen. Nästa sak att göra som en del av slingan är att lägga sidorna i rätt läge (alternativt sidor kan läggas till i bulk med hjälp av -> addPages ()-metod).

För att göra detta, den sida som du vill lägga till undersidor till och helt enkelt lägga till sidor. I det här fallet har jag använt följande kod för att hitta min sida:

  $ Container-> findOneBy ("etikett", "Nyheter") -> addPage ($ sida); 

Mitt övergripande navigering initialisering i bootstrap ser därför ut så här:

  / **
      * Används för hantering högsta nivå navigering
      *
      * @ Return Zend_Navigation
      * /
     skyddad funktion _initNavigation ()
     {
         $ This-> bootstrap ("layout");
         $ Layout = $ this-> getResource ("layout");
         $ View = $ layout-> getView ();
         $ Config = new Zend_Config_Ini (
             APPLICATION_PATH.  "/ Configs / navigation.ini", APPLICATION_ENV);

         $ Container = new Zend_Navigation ($ config-> standard);
         / / Nu lägga de senaste 25 nyhetsinslag
         $ News = new Nyheter ();
         $ Sidor = $ news-> getNavigationEntries ();
         foreach ($ sidor som $ sida) {
        	 $ Page = ny Zend_Navigation_Page_Mvc ($ sida);
        	 $ Container-> findOneBy ("etikett", "Nyheter") -> addPage ($ sida);
         }
         $ Visa-> navigation ($ container);
     } 

Den sak som behöver läggas till är någon form av caching (med Zend_Cache förmodligen;)) annars kommer att bli ganska dyrt med varje laddning av sidan.

En Svaren till "Dynamiskt lägga till sidor i Zend_Navigation behållare vid körning"

  1. Mr Man säger:

    Det är precis vad jag letade efter - tack för en riktigt tydligt exempel. Skål. G

Lämna ett svar













Panorama Tema av Themocracy

8 besökare online just nu
4 personer, 4 bots, 0 medlemmar
Max besökare idag: 13 kl 11:17 UTC
Denna månad: 26 kl 2011/07/05 12:35 UTC
I år: 130 på 28-03-2011 22:40 UTC
Alla tid: 130 på 28-03-2011 10:40 UTC