Dinamiškai pridėti puslapių Zend_Navigation konteineris runtime

Iki Steven Lloyd Watkin , ketvirtadienis 7 sausis 2010 22:50

Visų, tęsinys apie mano paskutinį pranešimą apie Zend_Navigation Maršruto prašymus sitemap.xml pagal užsakymą valdytojas arba veiksmų , šis pranešimas yra apie dymnamically pridedant puslapių Zend_Navigation konteineris runtime / skripto vykdymo.

Jos visos gerai ir gerai, nurodydami savo puslapius ini ar XML failą, bet tam tikru momentu jums teks keisti savo svetainės puslapius, kuriuos norite kaip meniu, Sitemap, ar bus įtraukti į jūsų naršymo kelias takas. Todėl tai, ką turime padaryti, tai pridėti į mūsų puslapių Zend_Navigation konteinerių vykdymo metu. Kaip pavyzdį galima būtų didinant naujienos, dienoraščio, ar puslapis komentarus ir tt

Šiame pavyzdyje aš važiuoju pridėti šiek tiek naujienų pranešimų į mano statiškai nustatyta INI config. Norėdami gauti savo naujienas paštu puslapis konfigūracijų I've used klasės, kurios grįžta į tokį formatą masyvas:

  $ PagesToAdd = array (
   0 =>
     array (
       "Etikete '=>' fake naujienų # 5 ...',
       "Modulio" => "www",
       "Maršruto '=>' www-indeksas",
       "Veiksmas" => "požiūris",
       "Duomenų valdytojas" => "news",
       "Params '=> array (
           'Id' => 5-fake-naujienos-istorija - 5)
     ),
   1 =>
     array (/ * Daugiau puslapio detales * /),
  ); 

Kaip jūs pastebėsite, kad funkcija turi grąžinti masyvas, kurios yra matricos, kurios sudaro config matricos Zend_Navigation_Page_Mvc. Todėl, apsisukimo per masyvas naujų Zend_Navigation puslapių galima sukurti iš konfigūracijos masyvas. Kitas dalykas, tai kaip kilpa yra įtraukti į tinkamą padėtį puslapių (alternatyviai puslapių gali būti pridedama urmu naudojant -> addPages () metodą).

Norėdami tai padaryti, suraskite puslapį, kurį norite pridėti sub-puslapių, ir tiesiog įdėti puslapiuose. Šiuo atveju aš naudojau šį kodą rasti mano puslapyje:

  $ Konteineris-> findOneBy ("etiketė", "Paskutinės naujienos") -> addPage ($ puslapis); 

Mano bendras navigaciją iniciacijos į paleisties todėl atrodo taip:

  / **
      * Tvarkyti naudojama aukščiausio lygio navigaciją
      *
      * @ Return Zend_Navigation
      * /
     Saugomų funkcija _initNavigation ()
     {
         $ This-> Kilpa ("maketas");
         $ Išdėstymo = $ this-> getResource ("maketas");
         $ View = $ išdėstymas-> getView ();
         $ Config = nauji Zend_Config_Ini (
             APPLICATION_PATH.  '/ Configs / navigation.ini ", APPLICATION_ENV);

         $ Konteineris = nauji Zend_Navigation ($ config-> nutylėjimą);
         / / Dabar pridėkite pastaruosius 25 naujienų pranešimus
         $ Naujienos = nauji Naujienos ();
         $ Puslapiai = $ naujienos-> getNavigationEntries ();
         foreach ($ puslapiai $ puslapis) {
        	 $ Puslapis = nauji Zend_Navigation_Page_Mvc ($ puslapis);
        	 $ Konteineris-> findOneBy ("etiketė", "Paskutinės naujienos") -> addPage ($ puslapis);
         }
         $ View-> navigaciją ($ konteinerio);
     } 

Apie dalykas, kuris turi būti pridėta tam tikra spartinimo forma (naudojant Zend_Cache matyt;)) kitaip tai bus gana brangus, kurio kiekviename puslapyje apkrova.

6 atsakymai į "Dinamiškai pridėti puslapių Zend_Navigation konteineris runtime"

  1. J. Žmogus sako:

    Štai ką aš ieškojau - ačiū už tikrai aiškų pavyzdį. Į sveikatą. G

  2. A387 sako:

    Nicos paštu! Aš kai kurių problemų pradėti pavyzdys klasės įkrovos. Bet koks clue, kodėl paraiška / modelį klasių nėra iš įkrovos? Jūsų klasė yra vadinama "naujųjų Naujienos () ', o aš norėčiau pridėti navigaciją puslapių gaunant navigaciją medį modelis klasės. Jei turite idėją, Please let me know! ;)

    • Mano modelis buvo redaguotas už pranešimą, jo teisingas pavadinimas kodas yra Pro_News ir pakėlė iki autokrovėjas.

      Spėlioti jūs naudojate modulių? Bet jei taip savo modelį, turėtų būti vadinamas _News už ZF pasiimti pagal nutylėjimą (I don't naudoti šios sistemos sau).

      Norėčiau pasiūlyti tikrinimas apima kelias iš jūsų įkrovos metodas pamatyti, jei ji yra "application / modelių" arba įtraukti failą rankiniu būdu.

  3. Mano modelis buvo redaguotas už pranešimą, jo teisingas pavadinimas kodas yra Pro_News ir pakėlė iki autokrovėjas.

    Spėlioti jūs naudojate modulių? Bet jei taip savo modelį, turėtų būti vadinamas _News Už ZF pasiimti pagal nutylėjimą (I don't naudoti šios sistemos sau).

    Norėčiau pasiūlyti tikrinimas apima kelias iš jūsų įkrovos metodas pamatyti, jei ji yra "application / modelių" arba įtraukti failą rankiniu būdu.

Leave a Reply













"Panorama" tema, padarytais Themocracy

5 lankytojų dabar internete
3 svečiai, 2 Robotai, 0 nariai
Max Lankytojų šiandien: 11 j., 02:18 UTC
Šį mėnesį: 22 j., 2011/08/06 12:30 UTC
Šiais metais: 130 metu 28-03-2011 22:40 UTC
Visas laikas: 130 metu 28-03-2011 10:40 UTC