Dinamiski pievienot lapas Zend_Navigation traukā runtime
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.


















































Tas ir tieši tas, ko es biju meklē - paldies par īsti skaidrs piemērs. Cheers. G
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.
Nu es varu izmantot moduļi, mans slikti. Bet jūs ieteiktu autoloading vajadzētu strādāt? Nu, es esmu bakstīt to mazliet dziļāk. Šobrīd es izmantoju addPage funkciju BaseControllers, kas nav īsti sniegumu draudzīgi ... hehe. Paldies par jūsu atbildi.
Pārliecinieties, ka jūsu modulis modelis ir nosaukts pareizi _News (Piemēram) un būtu uzņemt, lietojot autoloading.