Dinamički dodavati stranicama za Zend_Navigation kontejner za vrijeme izvođenja

By Steven Lloyd Watkin , četvrtak 7 siječanj 2010 10:50

U nastavku na moj zadnji post o Zend_Navigation, Ruta zahtjeva za sitemap.xml običaju kontroler / akcija , ovaj post je o dymnamically dodavanje stranica Zend_Navigation kontejner u runtime / script izvršenje.

Njezina sve dobro i dobro navodeći vaše stranice u ini ili XML datoteke, ali u nekom trenutku ćete morati promijeniti stranicama na svoje web-mjesto koje želite kao dio izbornika, sitemap, ili će biti uključeni u Vaše povratna staza. Stoga ono što trebamo učiniti je dodati na naše stranice Zend_Navigation kontejner za vrijeme izvođenja. Primjeri za to će biti za dodavanje vijesti, blogu ili stranici komentari, itd.

U ovom primjeru ja ću dodati neke novosti postove na mom statički definirane ini config. Da biste dobili moj vijesti konfiguracije post stranici sam koristio klase koja vraća polje u sljedećem obliku:

  $ PagesToAdd = array (
   0 =>
     niz (
       'Label' => 'Lažni vijesti # 5 ...',
       'Modul' => 'www',
       'Put' => 'www-indeks,
       'Akcija' => 'pogled',
       'Kontrolor' => 'vijesti',
       'Params' => array (
           'Id' => '5-Lažni-vijesti-priča - 5 ')
     ),
   1 =>
     niz (/ * Više pojedinosti o stranici * /),
  ); 

Kao što ćete primijetiti da funkcija vraća niz u kojem se nalaze polja koja čine config polja za Zend_Navigation_Page_Mvc. Dakle, petlje preko niza novih Zend_Navigation stranice mogu biti kreirani iz config polja. Sljedeći stvar za učiniti kao dio petlje je da za dodavanje stranice u ispravan položaj (alternativno stranicama može biti dodan u rasutom stanju pomoću -> addPages () metoda).

Da biste to učinili, pronađite stranicu koju želite dodati pod-stranice i jednostavno dodati stranicama. U ovom slučaju koristio sam sljedeći kod kako bi pronašli moju stranicu:

  $ Kontejner-> findOneBy ('oznaku', 'Vijesti') -> addPage ($ stranica); 

Moj ukupni navigacija inicijalizacije u bootstrap, dakle izgleda ovako:

  / **
      * Koji se rabe za rukovanje top-level navigacija
      *
      * @ Povratak Zend_Navigation
      * /
     zaštićena funkcija _initNavigation ()
     {
         $ This-> bootstrap ('izgled');
         $ Izgled = $ this-> getResource ('izgled');
         $ = $ Pogled izgleda-> getView ();
         $ Config = new Zend_Config_Ini (
             APPLICATION_PATH.  '/ Konfiguracijski / navigation.ini', APPLICATION_ENV);

         $ Kontejner = new Zend_Navigation ($ config-> zadana vrijednost);
         / / Sada dodajte zadnjih 25 izvješća vijesti
         $ Vijest = new Vijesti ();
         $ Stranica = $ news-> getNavigationEntries ();
         foreach ($ stranica kao $ stranica) {
        	 $ Page = novi Zend_Navigation_Page_Mvc ($ stranica);
        	 $ Kontejner-> findOneBy ('oznaku', 'Vijesti') -> addPage ($ stranica);
         }
         $ View-> plovidbe ($ spremnik);
     } 

Na što treba biti dodana je neki oblik caching (koristeći Zend_Cache vjerojatno;)) inače to je idući u biti vrlo skupo s svakoj stranici opterećenja.

6 Reakcija to "Dinamički dodati stranice za Zend_Navigation kontejner za vrijeme izvođenja"

  1. Gospodin Čovjek kaže:

    To je upravo ono što sam bio obličje za - hvala za zaista jasan primjer. Živjeli. G

  2. A387 kaže:

    Nice post! Ja sam nekih problema s pokretanjem model klase u bootstrap. Svaki trag zašto primjena / model klase nisu dostupni iz bootstrap? Vaša klasa se zove 'nova Vijesti ()', umjesto Htio bih dodati navigaciju stranicama uzimajući navigacijskom stablu od modela klase. Ako imate ideju, javite mi! ;)

    • Moj model je uredio na tu dužnost, njegov ispravan naziv u kodu je Pro_News i pokupila autoloader.

      Nagađanje ne koristite module? Ali ako je tako svoj model bi trebao biti pozvan _News za ZF pokupiti po defaultu (ja ne koristim ovaj sustav sebe).

      Htio predlažemo provjeru uključuju put od svog bootstrap metoda vidjeti ako on sadrži "application / modela" ili uključiti datoteku ručno.

  3. Moj model je uredio na tu dužnost, njegov ispravan naziv u kodu je Pro_News i pokupila autoloader.

    Nagađanje ne koristite module? Ali ako je tako svoj model bi trebao biti pozvan _News Za ZF pokupiti po defaultu (ja ne koristim ovaj sustav sebe).

    Htio predlažemo provjeru uključuju put od svog bootstrap metoda vidjeti ako on sadrži "application / modela" ili uključiti datoteku ručno.

Dopust jedan Odgovor













Panorama Theme by Themocracy

5 posjetitelja online aukciji
4 gosti, 1 robota, 0 clanova
Max posjetitelja danas: 8 at 12:10 UTC
Ovaj mjesec: 22 na 2011/08/06 12:30 UTC
Ove godine: 130 u 28-03-2011 10:40 UTC
Sva vremena: u 130 28-03-2011 10:40 UTC