Dynamic na magdagdag ng mga pahina upang Zend_Navigation lalagyan sa runtime
Sa isang pagpapatuloy sa aking huling post tungkol sa Zend_Navigation, mga kahilingan para sa Ruta sitemap.xml sa pasadyang controller / action , ang post na ito ay tungkol sa dymnamically pagdaragdag ng mga pahina sa isang lalagyan Zend_Navigation sa runtime / script execution.
Nito ang lahat ng mahusay at magandang pagtukoy ng iyong mga pahina sa isang ini o xml file ngunit sa ilang mga punto kayo ay pagpunta sa magkaroon ng pagbabago ng mga pahina sa iyong site na gusto mong bilang bahagi ng isang menu, sitemap, o upang maisama sa iyong breadcrumb tugaygayan. Kaya kung ano ang kailangan naming gawin ay ang magdagdag ng mga pahina sa aming Zend_Navigation lalagyan sa runtime. Mga halimbawa para sa ay magiging sa pagdagdag ng mga item ng balita, blog post, o pahina ng mga komento, atbp
Sa halimbawa na ito ako pagpunta sa magdagdag ng ilang mga post ng balita sa aking statically tinukoy ini config. Upang makuha ang aking mga configuration na mga balita mag-post ng pahina ako naka-iinom ng isang class na nagbabalik ng isang array sa sumusunod na format:
$ PagesToAdd = array (0 => array ('label' => 'Mga Pekeng kuwentong balita # 5 ...',' module '=>' www ',' ruta '=>' www-index ng ',' action '= > 'tingnan ang', 'controller' => 'news', 'params' => array ('id' => '5-Pekeng-news-kuwento - 5 ')), 1 => array (/ * Higit pang mga pahina detalye * /),); Bilang mapapansin mo na function ay nagbalik ng isang array na kung saan ay naglalaman ng arrays na bumubuo sa config arrays para Zend_Navigation_Page_Mvc. Samakatuwid, sa pamamagitan ng looping sa ibabaw ng array bagong mga pahina Zend_Navigation maaaring ginawa mula sa config array. Ang susunod na bagay na dapat gawin bilang bahagi ng loop ay upang idagdag ang mga pahina sa tamang posisyon (Bilang kahalili, mga pahina ay maaaring idagdag sa bulk sa pamamagitan ng paggamit -> addPages () method).
Upang gawin ito, hanapin ang pahina na nais mong idagdag ang mga sub-pahina na at idagdag lamang ang mga pahina. Sa kasong ito ba akong magkaroon ginamit ang sumusunod na code upang mahanap ang aking mga pahina:
$ Lalagyan-> findOneBy ('label', 'Pinakabagong Balita') -> addPage ($ pahina); Ang aking mga kabuuang nabigasyon initialisation sa bootstrap samakatuwid ganito ang hitsura:
/ ** * Na ginagamit para sa paghawak ng mga top-level nabigasyon * * @ bumalik Zend_Navigation * / function protektado _initNavigation () {$ ito-> bootstrap ('layout'); $ layout = $ ito-> getResource ('layout'); $ view = $ layout-> getView (); $ config = bagong Zend_Config_Ini (APPLICATION_PATH '/ configs / navigation.ini', APPLICATION_ENV.); $ lalagyan = bagong Zend_Navigation ($ config-> default); / / Ngayon idagdag ang huling 25 balita mga ulat $ balita = bagong News (); $ pahina = $ news-> getNavigationEntries (); foreach ($ pahina AS $ pahina) {$ page = bagong Zend_Navigation_Page_Mvc ($ pahina); $ lalagyan-> findOneBy ('label', 'Pinakabagong Balita') -> addPage ($ pahina);} $ view-> nabigasyon ($ lalagyan);} Sa bagay na pangangailangan upang maidagdag ang ilang mga anyo ng caching (gamit Zend_Cache siguro;)) kung hindi man na ito ay pagpunta sa lubos na mahal sa bawat load ang pahina.


















































Iyan na lamang kung ano ang i ay naghahanap para sa - salamat para sa isang tunay na malinaw na halimbawa. Cheers. G
Nice post! Ko na ang problema ng ilang mga nagpapasimula ng modelo class sa bootstrap. Anumang bakas kung bakit application / modelo ng mga klase ay hindi magagamit mula sa bootstrap? Ang iyong klase ay tinatawag na 'bagong News ()', sa halip Gusto kong idagdag ang mga pahina ng nabigasyon sa pamamagitan ng pagkuha ng isang navigation tree mula sa isang class modelo. Kung mayroon kang isang ideya, mangyaring ipaalam sa akin! ;)
Aking mga modelo ay na-edit para sa post, ang mga tamang pangalan sa code ay Pro_News at ay kinuha sa pamamagitan ng autoloader.
Guessing hindi gumagamit ka ng module? Ngunit kung gayon ang iyong modelo ay dapat na tinatawag na _News para sa ZF sa pick up sa pamamagitan ng default (hindi ko magamit ang system aking sarili).
Gusto ko iminumungkahi suri nang isama ang path mula sa iyong bootstrap paraan upang makita kung ito ay naglalaman ng "application / modelo" o isama ang file ng mano-mano.
Well Gumagamit ako ng mga module, ang aking masama. Ngunit iminumungkahi mo autoloading dapat gumana? Well, na kong kumuha sa lupa sa ito ng isang bit ng mas malalim. Sa ngayon gagamitin ko ang addPage function sa BaseControllers, na kung saan ay hindi talagang pagganap friendly ... hehe. Salamat sa iyong sagot.
Matiyak na ang iyong module modelo ay pinangalanan tama _News (Halimbawa) at ito ay dapat na pick up gamit ang autoloading.
Aking mga modelo ay na-edit para sa post, ang mga tamang pangalan sa code ay Pro_News at ay kinuha sa pamamagitan ng autoloader.
Guessing hindi gumagamit ka ng module? Ngunit kung gayon ang iyong modelo ay dapat na tinatawag na _News Para sa ZF sa pick up sa pamamagitan ng default (hindi ko magamit ang system aking sarili).
Gusto ko iminumungkahi suri nang isama ang path mula sa iyong bootstrap paraan upang makita kung ito ay naglalaman ng "application / modelo" o isama ang file ng mano-mano.