Динамически добавлять страницы в контейнер Zend_Navigation во время выполнения

По Стивен Ллойд Уоткин , четверг 7 января 2010 10:50 вечера

В продолжение на мой последний пост про 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 предположительно;)) в противном случае это будет довольно дорого с каждой загрузке страницы.

Один ответ на "динамически добавлять страницы в контейнер Zend_Navigation при исполнении"

  1. Г-н Мужчина говорит:

    Это именно то, что я искал - спасибо за действительно яркий пример. Cheers. G

Написать ответ













Панорама Тема Themocracy

5 посетителей онлайн
3 гостей, 2 ботов, 0 пользователей
Макс посетителей сегодня: 11 в 10:26 UTC
В этом месяце: 26 в 07-05-2011 12:35 утра UTC
В этом году: 130 в 28-03-2011 10:40 вечера UTC
За все время: 130 в 28-03-2011 10:40 вечера UTC