Aggiungere dinamicamente pagine contenitore Zend_Navigation in fase di runtime

Con Steven Watkin Lloyd , Giovedi 7 Gennaio 2010 22:50

In una continuazione del mio ultimo post su Zend_Navigation, indirizzare le richieste di sitemap.xml al controller custom / azione , questo post è di circa dymnamically aggiungere pagine a un contenitore Zend_Navigation in fase di esecuzione / esecuzione dello script.

Il suo benissimo specificando le pagine in un ini o xml file, ma ad un certo punto si sta andando ad avere pagine cambiando nel vostro sito che si desidera utilizzare come parte di una, sitemap menu, o per essere incluso nel vostro percorso breadcrumb. Quindi quello che dobbiamo fare è aggiungere pagine al nostro contenitore Zend_Navigation in fase di runtime. Esempi di questo sarebbe in aggiunta notizie, post di blog o pagina dei commenti, ecc

In questo esempio ho intenzione di aggiungere qualche notizia al mio post ini di configurazione definita staticamente. Per avere mie notizie configurazioni pagina del post che ho usato una classe che restituisce un array nel seguente formato:

  $ PagesToAdd = array (
   0 =>
     array (
       'Label' news => 'Fake storia # 5 ...',
       'Modulo' => 'www',
       'Percorso' => 'www-index',
       'Azione' 'vista' =>,
       'Controller' 'News' =>,
       'Params' => array (
           'Id' => "5-Fake-news-story - 5 ')
     ),
   1 =>
     array (/ * * Più pagina dei dettagli /),
  ); 

Come si noterà che la funzione ha restituito un array in cui sono contenute le matrici che compongono l'array di configurazione per Zend_Navigation_Page_Mvc. Pertanto, con loop oltre alle nuove pagine Zend_Navigation array può essere creato dalla configurazione array. La prossima cosa da fare come parte del ciclo è quello di aggiungere alle pagine nella posizione corretta (in alternativa le pagine possono essere aggiunte alla rinfusa utilizzando - addPages> () metodo).

Per effettuare questa operazione, individuare la pagina che si desidera aggiungere le sottopagine di e semplicemente aggiungere le pagine. In questo caso ho usato il codice riportato di seguito per trovare la mia pagina:

  $ Contenitore-> findOneBy ('label', 'Ultime Notizie') -> addPage ($ pagina); 

Il mio inizializzazione di navigazione globale del bootstrap assomiglia quindi questo:

     / ** * Utilizzati per la movimentazione di navigazione di primo livello * * @ return * Zend_Navigation / _initNavigation funzione protetta () {bootstrap $ this-> ('layout'); $ layout getResource = $ this-> ('layout'); $ view = $ GetView layout-> (); $ config = new Zend_Config_Ini (APPLICATION_PATH '/ config / navigation.ini', APPLICATION_ENV.); $ contenitore Zend_Navigation = new ($ default config->); / / A questo punto aggiungere gli ultimi 25 News news news report $ = new Date (); $ pagine = $ getNavigationEntries news-> (); foreach ($ pagine AS $ pagina) {$ pagina Zend_Navigation_Page_Mvc = new ($ pagina); findOneBy $ contenitore-> ('label', 'Ultime Notizie') -> addPage ($ pagina);} navigazione $ view-> ($ contenitore);} 

Su che cosa deve essere aggiunto è una qualche forma di memorizzazione nella cache (usando Zend_Cache presumibilmente;)) altrimenti questo sta andando essere molto costoso ad ogni caricamento della pagina.

5 Responses to "dinamicamente aggiungere pagine al contenitore Zend_Navigation in fase di runtime"

  1. Mr Man ha detto:

    Questo è proprio quello che cercavo - grazie per un esempio molto chiaro. Cheers. G

  2. A387 ha detto:

    Nice post! Ho qualche problema all'avvio di una classe modello nel bootstrap. Qualsiasi indizio perché domanda classi / modello non sono disponibili presso il bootstrap? La tua classe si chiama 'News new ()', invece mi piacerebbe aggiungere le pagine di navigazione da ottenere una struttura di spostamento da una classe modello. Se avete un'idea, per favore fatemelo sapere! ;)

    • Il mio modello è stato curato per il posto, il suo nome corretto nel codice è Pro_News ed è captato dal caricatore automatico.

      Indovinare non si sta usando i moduli? Ma se è così il modello dovrebbe essere chiamato _novità ZF per far salire di default (io non uso questo sistema io stesso).

      Io suggerirei di controllare il percorso di inclusione dal tuo metodo di bootstrap per vedere se contiene "application / modelli" o includere il file manualmente.

      • A387 ha detto:

        Beh, io i moduli, il mio male. Ma vi proponiamo autoloading dovrebbe funzionare? Beh, ho a scavare un po 'più profonda. Al momento io uso la funzione addPage nel BaseControllers, che non è molto amichevole prestazioni ... hehe. Grazie per la risposta.

Lascia un commento













Tema di Panorama Themocracy

7 visitatori online
2 persone, 5 bot, 0 utenti
Max visitatori oggi: 13 alle 12:15 UTC
Questo mese: 26 alle 2011/07/05 12:35 UTC
Questo anno: 130 al 28-03-2011 22:40 UTC
Tutti i tempi: 130 al 28-03-2011 10:40 UTC