Динамічно додавати сторінки в контейнер Zend_Navigation під час виконання
У продовження на мій останній пост про Zend_Navigation, направляти запити для sitemap.xml звичаєм контролер / дію , цей пост про dymnamically додавання сторінки в контейнер Zend_Navigation під час виконання / виконання сценаріїв.
Його всі добре зазначенням сторінок в INI або XML- файл, але в якийсь момент вам доведеться змінювати статті на своєму сайті, що ви хочете як частину меню, карта сайту, або повинні бути включені в ваш пройденого шляху. Тому те, що нам потрібно зробити, це додати сторінок в наш Zend_Navigation контейнер під час виконання. Приклади для цього було б у додавання новин, блогів або сторінок коментарів, і т.д.
У цьому прикладі я збираюся додати новина повідомлення на мій постійна INI конфігурації. Щоб отримати мої новини конфігурацій повідомленням сторінці я використовував клас, який повертає масив, в наступному форматі:
$ PagesToAdd = Array (0 => Array ('мітка' => 'Fake новина # 5 ...',' Модуль' => 'WWW', 'маршрут' => 'WWW-індекс "," дія "= > "Вид", "контролер", "Новини" => "Params '=> Array (' ID '=> '5-Fake-новости-поверхова - 5')), 1 => Array (/ * Більш сторінки Детальна інформація * /),); Як можна помітити, що функція повернулася масив, в якому містяться масиви, які складають конфігурації масивів для 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 (Наприклад), і він повинен забрати використанням автозавантаження.