Dinàmicament afegir pàgines a un contenidor en temps d'execució Zend_Navigation

Per Steven Lloyd Watkin , Dijous 07 de gener 2010 22:50

En una continuació del meu últim post sobre Zend_Navigation, les sol licituds de ruta per sitemap.xml al controlador personalitzat / acció , aquest post és sobre dymnamically afegir pàgines a un contenidor de Zend_Navigation en l'execució en temps d'execució / script.

La seva molt bé especificar-ne les pàgines en un inici o xml arxiu, però en algun moment tindrem canvi a les pàgines del seu lloc web que voleu, com a part d'un menú, mapa web, o per ser inclòs a la ruta de navegació. Per tant el que hem de fer és afegir pàgines al nostre contenidor Zend_Navigation en temps d'execució. Exemples d'això seria en l'addició de notícies, blocs, o comentaris de la pàgina, etc

En aquest exemple vaig a afegir una mica dels missatges de notícies a la meva config inicial definit estàticament. Per obtenir notícies de la meva pàgina de configuracions de post que he fet servir una classe que retorna una matriu en el següent format:

  $ PagesToAdd = array (
   0 =>
     array (
       'Label' => 'fals reportatge # 5 ...',
       'Mòdul' => 'www',
       'Route' => 'www-index',
       'Action' => 'veure',
       'Controller' => 'notícies',
       'Params' => array (
           'Id' => '5-Fake-news-història - 5 ')
     ),
   1 =>
     array (/ * Més detalls de la pàgina * /),
  ); 

Com t'adonaràs que la funció ha tornat una matriu en la qual es troben les matrius que componen els conjunts de configuració per Zend_Navigation_Page_Mvc. Per tant, per recórrer les pàgines Zend_Navigation nova matriu es pot crear a partir de la matriu de configuració. El següent pas, com a part del bucle és per afegir les pàgines en la posició correcta (o bé les pàgines es poden afegir a granel mitjançant l'ús de -> addPages (mètode)).

Per això, cerqueu la pàgina que voleu afegir les pàgines secundàries i només ha d'afegir les pàgines. En aquest cas he utilitzat el següent codi per trobar a la meva pàgina:

  $ Container-> findOneBy ('label', 'Notícies') - addPage> ($ page); 

El meu inicialització de navegació en general en el sistema d'arrencada per tant són aquestes:

  / **
      * Utilitzats per a la manipulació de primer nivell de navegació
      *
      * @ Return Zend_Navigation
      * /
     funció protegida _initNavigation ()
     {
         $ This-> arrencada ('layout');
         $ Layout = $ this-> getResource ('layout');
         $ Vista = $ layout-> getView ();
         $ Config = new Zend_Config_Ini (
             APPLICATION_PATH.  '/ Configs / navigation.ini, APPLICATION_ENV);

         $ Recipient = Zend_Navigation nou ($ config-> default);
         / / Ara afegiu els últims 25 informes de premsa
         $ Notícies = new Notícies ();
         $ Pàgines = $ notícia-> getNavigationEntries ();
         foreach ($ pàgines com $ page) {
        	 Pàgina $ = new Zend_Navigation_Page_Mvc ($ page);
        	 $ Container-> findOneBy ('label', 'Notícies') - addPage> ($ page);
         }
         $ View-> de navegació ($ contenidor);
     } 

Pel que cal afegir alguna forma d'emmagatzematge en memòria cau (amb Zend_Cache presumiblement;)) en cas contrari això serà molt car, amb cada càrrega de pàgina.

6 Respostes a "Afegir dinàmicament pàgines de contenidor Zend_Navigation en temps d'execució"

  1. L'home diu el senyor:

    Això és just el que estava buscant - gràcies a un exemple molt clar. Cheers. G

  2. A387 diu:

    Bonic post! He alguns problemes per iniciar una classe de model en l'arrencada. Qualsevol idea de per què l'aplicació / model de classes no estan disponibles en l'arrencada? La seva classe es diu "Notícies noves () ', en lloc que m'agradaria afegir les pàgines de navegació per aconseguir un arbre de navegació d'una classe model. Si vostè té una idea, si us plau m'ho saber! ;)

    • El meu model ha estat editat per al lloc, el seu nom correcte en el codi és Pro_News i és recollit pel carregador automàtic.

      Conjecturant que vostè no està utilitzant els mòduls? Però si el que el model ha de ser anomenat _Notícies de ZF per recollir per defecte (no utilitzar aquest sistema jo mateix).

      Et suggereixo que el control de la ruta d'inclusió del seu mètode d'arrencada per veure si conté "application / models" o incloure l'arxiu de forma manual.

      • A387 diu:

        Bé, jo faig servir els mòduls, el meu mal. Però suggereixen que la càrrega automàtica de treball? Bé, he de cavar-hi una mica més profund. De moment, utilitzar la funció d'addPage al BaseControllers, que no és realment el desenvolupament amigable ... jeje. Gràcies per la seva resposta.

  3. El meu model ha estat editat per al lloc, el seu nom correcte en el codi és Pro_News i és recollit pel carregador automàtic.

    Conjecturant que vostè no està utilitzant els mòduls? Però si el que el model ha de ser anomenat _Notícies De ZF per recollir per defecte (no utilitzar aquest sistema jo mateix).

    Et suggereixo que el control de la ruta d'inclusió del seu mètode d'arrencada per veure si conté "application / models" o incloure l'arxiu de forma manual.

Deixa un comentari













Panorama Tema per Themocracy

8 visitants en línia ara
5 persones, 3 bots, 0 membres
Nombre màxim de visitants d'avui: 11 a les 00:15 UTC
Aquest mes: 52 a 2011.06.18 03:11 UTC
Aquest any: 130 en 2011.03.28 22:40 UTC
En total: 130 en 2011.03.28 22:40 UTC