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

Per Lloyd Watkin Steven , dijous 7 gener 2010 22:50

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

La seva molt bé especificar les pàgines en un inicial o xml arxiu, però en algun moment tindrem canvi a les pàgines del vostre lloc que desitgi, com a part d'un menú, mapa, 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ó dels articles de notícies, bloc, o pàgina de comentaris, etc

En aquest exemple vaig a afegir alguns llocs de notícies a la meva iniciativa defineix una configuració. Per obtenir notícies de la meva pàgina d'entrada configuracions que he fet servir una classe que retorna una matriu amb el següent format:

  $ PagesToAdd = array (
   0 =>
     array (
       'Etiqueta' història => 'falsa notícia # 5 ...',
       'Module' => 'www',
       'Ruta' => 'www-index',
       'Acció' 'vista' =>,
       'Controller' 'notícia' =>,
       'Params' => array (
           'Aneu' => "5-falsa-de notícies pisos - 5 ')
     ),
   1 =>
     array (/ * * Més detalls de la pàgina /),
  ); 

Com et donaràs compte que la funció ha retornat un conjunt en el qual figuren les matrius que componen la configuració de les matrius de Zend_Navigation_Page_Mvc. Per tant, recórrer les pàgines Zend_Navigation nova matriu pot ser creat a partir de la matriu de configuració. El següent pas, com a part del bucle és afegir les pàgines en la posició correcta (o bé les pàgines es poden afegir a granel mitjançant l'ús - addPages> () mètode).

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

  $ Per contenidor> findOneBy ('etiqueta', 'Notícies') -> addPage ($ page); 

El meu inicialització de navegació general en l'arrencada per tant s'assembla a això:

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

         $ Envàs = Zend_Navigation nova ($ configuració per defecte->);
         / / Ara afegiu els últims 25 informes de notícies
         notícia = $ Notícies nou ();
         = $ $ Pàgines getNavigationEntries> notícies ();
         foreach ($ $ pàgines com a pàgina) {
        	 $ Page = Zend_Navigation_Page_Mvc nova ($ page);
        	 $ Per contenidor> findOneBy ('etiqueta', 'Notícies') -> addPage ($ page);
         }
         $ View-> de navegació ($ contenidor);
     } 

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

6 Respostes a "dinàmica d'afegir pàgines a un recipient Zend_Navigation en temps d'execució"

  1. Sr L'home diu:

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

  2. A387 ha dit:

    després de Niça! He alguns problemes per iniciar una classe model en l'arrencada. Qualsevol idea de per què l'aplicació classes / model no estan disponibles a l'arrencada? La seva classe es diu "Notícies noves () ', en lloc 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 va ser editat per al lloc, el seu nom correcte en el codi és Pro_News i és recollit pel carregador automàtic.

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

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

      • A387 ha dit:

        Bé, jo faig servir els mòduls, el meu mal. No obstant això, li suggerim càrrega automàtica hauria de funcionar? Bé, he de cavar-hi una mica més profund. En el moment en què utilitzar la funció addPage al BaseControllers, que no és realment el rendiment amigable ... jeje. Gràcies per la seva resposta.

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

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

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

Deixa una resposta













Panorama Tema per Themocracy

7 visitants en línia
3 persones, contra els robots d'abril, 0 membres
Nombre màxim de visitants d'avui: 16 a les 13:38 UTC
Aquest mes: 22 a 2011.08.06 00:30 UTC
Aquest any: 130 en 2011.03.28 22:40 UTC
Tot el temps: 130 en 2011.03.28 22:40 UTC