Dinamiski pievienot lapas Zend_Navigation traukā runtime

Ar Steven Lloyd Watkin , ceturtdien 7 Jan 2010 22:50

Turpināšanos par manu pēdējo ierakstu par Zend_Navigation, Route pieprasījumus sitemap.xml uz pasūtījuma kontrolieris / darbības , šis amats ir par dymnamically pievienot lapas Zend_Navigation traukā runtime / skriptu izpildi.

Tās visas labi un labs, norādot Jūsu lapas ini vai xml failu, bet kādā brīdī jūs nāksies mainīt lapas jūsu vietnē, kuru vēlaties kā daļa no izvēlnes, sitemap, vai tiks iekļauti jūsu atpakaļceļa taka. Tāpēc to, kas mums jādara, ir pievienot lapas ar mūsu Zend_Navigation konteineru Runtime. Piemēri par šo būtu pievienot ziņas, blog posts, vai lappuses komentārus, utt

Šajā piemērā es esmu gatavojas pievienot jaunumi amatu uz manu statiski definēts ini config. Lai saņemtu manu ziņu post lapu konfigurāciju es esmu, ko izmanto klasē, kas atgriež masīva šādā formātā:

  $ PagesToAdd = array (
   0 =>
     array (
       "Marķējumu '=>' Fake jaunumiem # 5 ...',
       "Moduļa '=>' www ',
       "Ceļu '=>' www indekss",
       "Darbība" => "View",
       "Personas datu apstrādātājs '=>' ziņas",
       "Params '=> array (
           'Id' => "5-Fake-jaunumi-stāsts - 5)
     ),
   1 =>
     array (/ * Vairāk lapas detaļas * /),
  ); 

Kā jūs pamanīsiet, ka funkcija ir atgriezusies masīvs, kurā ir ietverti masīvi, kas veido config matricas Zend_Navigation_Page_Mvc. Tādēļ, looping pa masīva jauno Zend_Navigation lapas var izveidot no config masīvs. Nākamā lieta, to darīt kā daļu no cilpu, lai pievienotu lapas pareizajā stāvoklī (alternatīvi lapas var pievienot vairumā, izmantojot -> addPages () metodi).

Lai to izdarītu, atrodiet lapu, kuru vēlaties pievienot sub-lapu un vienkārši pievienot lapas. Šajā gadījumā man ir izmantojuši šādu kodu, lai atrastu manu lapu:

  $ Konteineru> findOneBy ("marķējumu", "Jaunākās Ziņas") -> addPage ($ lapa); 

Mana kopumā navigācijas inicializēšanas uz bootstrap tāpēc izskatās šādi:

  / **
      * Izmanto, rīkojoties ar augstākā līmeņa navigācijā
      *
      * @ Atgriešanās Zend_Navigation
      * /
     aizsargājamo funkciju _initNavigation ()
     {
         $ This-> bootstrap (izvietojums ');
         $ Izkārtojums = $ this-> getResource (izvietojums ');
         $ Ņemot = $ izkārtojumu-> getView ();
         $ Config = jauni Zend_Config_Ini (
             APPLICATION_PATH.  "/ Configs / navigation.ini", APPLICATION_ENV);

         $ Konteineru = jauni Zend_Navigation ($ config-> noklusējums);
         / / Tagad pievienot pēdējos 25 ziņu
         $ Jaunumi = new Jaunumi ();
         $ Lapas = $ Jaunumi-> getNavigationEntries ();
         foreach ($ lapas AS $ page) {
        	 $ Page = jauni Zend_Navigation_Page_Mvc ($ lapa);
        	 $ Konteineru> findOneBy ("marķējumu", "Jaunākās Ziņas") -> addPage ($ lapa);
         }
         $ Apskatītu-> navigācijas ($ konteiners);
     } 

Gada lieta, kas jāpievieno, ir zināma veida caching (izmantojot Zend_Cache iespējams;)) Pretējā gadījumā, tas būs diezgan dārga, katru lapu slodzi.

5 Atbildes uz "Dinamiski pievienot lapas Zend_Navigation traukā runtime"

  1. Mr Man saka:

    Tas ir tieši tas, ko es biju meklē - paldies par īsti skaidrs piemērs. Cheers. G

  2. A387 saka:

    Nice post! Esmu dažas problēmas uzsākot modeļa klases bootstrap. Jebkurš pavediens, kāpēc pieteikums / modelis klases nav pieejami no bootstrap? Savu klasi sauc par "jauno News ()", nevis es gribētu pievienot navigācijas lapām kļūst navigācijas koku no modeļa klases. Ja jums ir ideja, lūdzu, ļaujiet man zināt! ;)

    • Mana modelis tika edited amata, to pareizi nosaukumu kods ir Pro_News un paņēma ar Autoloader.

      Guessing jūs nelietojat moduļus? Bet, ja tā savu modeli jāsauc _News par ZF uzņemt pēc noklusējuma (es nedomāju izmantot šo sistēmu sevi).

      Es gribētu ieteikt pārbaudīt arī ceļu no bootstrap metodes, lai redzētu, ja tas satur "application / modeļiem" vai arī failu manuāli.

Atstāj atbildi













Panorama Theme by Themocracy

6 Apmeklētāji tiešsaistē tagad
2 viesi, 4 botus, 0 biedri
Max Apmeklētāji šodien: 24 pie 0:36 UTC
Šajā mēnesī: 26 pie 2011/07/05 12:35 UTC
Šogad: 130 ar 28-03-2011 22:40 UTC
Visu laiku: 130 ar 28-03-2011 10:40 UTC