Дынамічна дадаваць старонкі ў кантэйнер Zend_Navigation падчас выканання
У працяг на мой апошні пост пра Zend_Navigation, накіроўваць запыты для sitemap.xml звычаю кантролер / дзеянне , гэты пост пра dymnamically дадання старонкі ў кантэйнер Zend_Navigation падчас выканання / выкананне сцэнараў.
Яго ўсё добра указаннем старонак у INI ці XML- файл, але ў нейкі момант вам прыйдзецца змены старонак на сваім сайце, што вы хочаце як частка меню, карта сайта, або павінны быць уключаны ў ваш пройдзенага шляху. Таму тое, што нам трэба зрабіць, гэта дадаць старонак у наш Zend_Navigation кантэйнер падчас выканання. Прыклады для гэтага было б у даданне навін, блогаў або старонак каментароў, і г.д.
У гэтым прыкладзе я збіраюся дадаць навіна паведамлення на мой сталая INI канфігурацыі. Каб атрымаць мае навіны канфігурацый паведамленні старонцы я выкарыстаў клас, які вяртае масіў, у наступным фармаце:
$ PagesToAdd = Array ( 0 => масіў ( "Цэтлік" Fake => 'навіна # 5 ...', 'Модуль' = 'WWW'>, 'Маршрут' => 'WWW-індэкс ", "Дзеяньне" "Выгляд" => "Дыспетчара" Навіны "=> "Params '=> Array ( 'ID' => '5-Fake-навіны-павярховы - 5 ') ), 1 => масіў (/ * Больш падрабязную старонкі * /), );
Як можна заўважыць, што функцыя вярнулася масіў, у якім змяшчаюцца масівы, якія складаюць канфігурацыі масіваў для Zend_Navigation_Page_Mvc. Таму, цыкл па масіву новыя старонкі Zend_Navigation можа быць створаны з канфігурацыі масіва. Наступнае, што трэба рабіць, як частка цыкла, каб дадаць старонак у правільнае становішча (у якасці альтэрнатывы старонкі могуць быць дададзены ў вялікай дапамогай -> addPages () метад).
Для гэтага знайдзіце старонку, якую вы хочаце дадаць да поўдня-старонак і проста дадаць старонак. У гэтым выпадку я выкарыстаў наступны код, каб знайсці маю старонку:
$ Кантэйнер-> findOneBy ("цэтлік", "Апошнія навіны") -> AddPage ($ старонцы); Маё агульнае ініцыялізацыі навігацыя ў бутстрапа таму выглядае наступным чынам:
/ ** * Выкарыстоўваецца для апрацоўкі верхняга ўзроўню навігацыі * * @ Вяртанні Zend_Navigation * / ахоўных _initNavigation функцыі () { $ Гэтым-> загрузкі ('макет'); $ = $ Макет гэтага-> GetResource ("макет"); $ = $ Гледжання тапалогіі> GetView (); $ Config = новы Zend_Config_Ini ( APPLICATION_PATH. '/ Конфігі / navigation.ini, APPLICATION_ENV); $ Кантэйнер = новы Zend_Navigation ($ канфігурацыі-> па змаўчанні); / / Зараз дадаем апошнія 25 паведамляе $ = Навіны новыя навіны (); $ = $ Старонак навін> getNavigationEntries (); Еогеасп ($ старонак, $ старонкі) { $ Старонка = новы Zend_Navigation_Page_Mvc ($ старонцы); $ Кантэйнер-> findOneBy ("цэтлік", "Апошнія навіны") -> AddPage ($ старонцы); } $ Выгляд-> навігацыя ($ кантэйнера); }
На тое, што павінна быць дададзеная некаторая форма кэшаваньня (з дапамогай Zend_Cache меркавана;)) у адваротным выпадку гэта будзе даволі дорага з кожнай загрузцы старонкі.


















































Гэта менавіта тое, што я шукаў - дзякуй за сапраўды яркі прыклад. Cheers. G
Добры пост! Я некаторыя праблемы ініцыявання мадэлі класа ў пачатковай загрузкі. Нічога не вядома, чаму прымяненне / мадэлі, будуць не даступныя з загрузкі? Ваш клас называецца "новым Навіны () ', замест гэтага я хацеў бы дадаць навігацыю старонкі, атрымліваючы дрэва навігацыі ад класа мадэлі. Калі ў вас ёсць ідэі, калі ласка, дайце мне ведаць! ;)
Мая мадэль была адрэдагаваная на гэты пост, яго правільнае назву ў код Pro_News і падабраў аўтазагрузкі.
Варажба вы не выкарыстоўваеце модулі? Але калі гэта так ваша мадэль павінна называцца _News для ZF падабраць па змаўчанні (я не выкарыстоўваю гэтую сістэму сам).
Я прапаную праверкі ўключаюць шлях ад вашай загрузкі метад, каб убачыць, калі ён утрымоўвае "прыкладанні / Мадэлі" ці ўключаць ўручную.
Ну, я выкарыстаць модулі, мой дрэнны. Але вы прапануеце аўтазагрузку павінны працаваць? Ну, я капацца ў яго крыху глыбей. На дадзены момант я выкарыстоўваю AddPage функцыі ў BaseControllers, якія на самай справе не прадукцыйнасць дружалюбных ... хе-хе. Дзякуй за Ваш адказ.
Пераканайцеся, што ваш модуль мадэлі правільнасць імя _News (Напрыклад), і ён павінен забраць выкарыстаннем аўтазагрузку.