Динамично добавите страници, за да Zend_Navigation контейнер по време на изпълнение
В продължение на последния ми пост за Zend_Navigation, Route искания за sitemap.xml обичая контролер / действие , този пост е за dymnamically добавяне на страници към Zend_Navigation контейнер при изпълнение по време на работа / скрипт.
Нейната добре, посочва страниците си в INI или XML файл, но в един момент започваш да са смяна на страниците в сайта си, че искате като част от менюто, карта на сайта, или да бъдат включени в галета си пътека. Ето защо това, което трябва да направите е да добавите страници, за да ни Zend_Navigation контейнер по време на изпълнение. Примери за това ще бъде в добавяне на елементи новини, блогове, или страница коментари и т.н.
В този пример аз ще добавя някои новини мнения за статично определено ми INI довереник. За да ми новини конфигурации страница мнение съм използвал един клас, който връща масив в следния формат:
$ PagesToAdd = масив ( 0 => масив ( "Етикет '=>' Fake новина # 5 ...', "Модул" => "WWW", "Маршрут '=>' WWW-индекс", "Дейност" => "Преглед", "Контролиращ орган" => "новини", "Params '=> масив ( "ID" => '5-Фалшиви новини история - 5 ') ), 1 => масив (/ * Повече подробности страница * /), );
Както ще забележите, че функцията е върнал един масив, в който се съдържат масиви, които съставят довереник масиви за Zend_Navigation_Page_Mvc. Ето защо, от лупинг над масива нови страници Zend_Navigation могат да бъдат създадени от конфигурационния масив. Следващото нещо, което да се направи като част от цикъла е да се да добавите страници в правилната позиция (или страници могат да бъдат добавени в насипно състояние с помощта на -> addPages () метод).
За да направите това, намерете страницата, която искате да добавите под-страници и просто добавете страници. В този случай съм използвал следния код, за да намерите на страницата ми:
$ Контейнер-> findOneBy ("етикет", "Последни новини") -> addPage ($ страница); Моите цялостната инициализиране навигация в Bootstrap да изглежда така:
/ ** * Използвани за обработка на най-високо ниво навигация * * @ Върне Zend_Navigation * / защитени функция _initNavigation () { $ Това-> Bootstrap ("оформление"); $ Оформление = $ това-> getResource ("оформление"); $ Оглед = $ оформление-> getView (); $ Довереник = нови Zend_Config_Ini ( APPLICATION_PATH. '/ Configs / navigation.ini ", APPLICATION_ENV); $ Контейнер = нови Zend_Navigation ($ довереник-> по подразбиране); / / Сега добавете последните 25 новини доклади $ Новини = нови новини (); $ Страници = $ новини> getNavigationEntries (); foreach ($ страници, $ страница) { $ = Нова страница Zend_Navigation_Page_Mvc ($ страница); $ Контейнер-> findOneBy ("етикет", "Последни новини") -> addPage ($ страница); } $ View-> навигация ($ контейнер); }
На нещо, което трябва да се добави е някаква форма на кеширане (с помощта на Zend_Cache вероятно;)) в противен случай това ще бъде доста скъпо с всяко зареждане на страницата.


















































Това е точно това, което търсех - благодаря за наистина ясен пример. Наздраве. G
Ница пост! Аз съм някои проблеми, започване на модел клас в Bootstrap. Всяка представа защо заявление / модел класове не са достъпни от Bootstrap? Вашият клас се нарича "нов Новини ()", вместо Бих искал да добавя навигация страници от получаване на дърво за навигация от модела клас. Ако имате идея, моля да ме уведомите! ;)
Моят модел е редактирана за поста, правилното му име в кода е Pro_News и се качват от autoloader.
Отгатване не използвате модула? Но ако е така вашия модел трябва да се нарича _News за ZF да изберете по подразбиране (не използват тази система себе си).
Бих предложил да включва проверка на пътя от вашето Bootstrap метод, за да видите, ако съдържа "заявление / модели" или да включва файла ръчно.
Ами аз използват модули, ми лошо. Но ви предлагам Автоматично зареждане би трябвало да работи? Ами, аз да копаят в нея малко по-дълбоко. В момента използвам addPage функция в BaseControllers, което не е наистина изпълнение приятелски ... хехе. Благодаря за вашия отговор.
Проверете дали модул модел е кръстен правилно _News (Например) и трябва да вземете използване Автоматично зареждане.
Моят модел е редактирана за поста, правилното му име в кода е Pro_News и се качват от autoloader.
Отгатване не използвате модула? Но ако е така вашия модел трябва да се нарича _News За ZF да изберете по подразбиране (не използват тази система себе си).
Бих предложил да включва проверка на пътя от вашето Bootstrap метод да се види дали съдържа "прилагане / модели" или да включва файла ръчно.