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

5 Адказы на "дынамічна дадаваць старонкі ў кантэйнер Zend_Navigation пры выкананні"

  1. Г-н Мужчына кажа:

    Гэта менавіта тое, што я шукаў - дзякуй за сапраўды яркі прыклад. Cheers. G

  2. A387 кажа:

    Добры пост! Я некаторыя праблемы ініцыявання мадэлі класа ў пачатковай загрузкі. Нічога не вядома, чаму прымяненне / мадэлі, будуць не даступныя з загрузкі? Ваш клас называецца "новым Навіны () ', замест гэтага я хацеў бы дадаць навігацыю старонкі, атрымліваючы дрэва навігацыі ад класа мадэлі. Калі ў вас ёсць ідэі, калі ласка, дайце мне ведаць! ;)

    • Мая мадэль была адрэдагаваная на гэты пост, яго правільнае назву ў код Pro_News і падабраў аўтазагрузкі.

      Варажба вы не выкарыстоўваеце модулі? Але калі гэта так ваша мадэль павінна называцца _News для ZF падабраць па змаўчанні (я не выкарыстоўваю гэтую сістэму сам).

      Я прапаную праверкі ўключаюць шлях ад вашай загрузкі метад, каб убачыць, калі ён утрымоўвае "прыкладанні / Мадэлі" ці ўключаць ўручную.

      • A387 кажа:

        Ну, я выкарыстаць модулі, мой дрэнны. Але вы прапануеце аўтазагрузку павінны працаваць? Ну, я капацца ў яго крыху глыбей. На дадзены момант я выкарыстоўваю AddPage функцыі ў BaseControllers, якія на самай справе не прадукцыйнасць дружалюбных ... хе-хе. Дзякуй за Ваш адказ.

Напісаць адказ













Панарама Тэма Themocracy

8 наведвальнікаў зараз
3 гасцей, 5 ботаў, 0 карыстальнікаў
Макс наведвальнікаў сёння: 16 у 12:39 AM UTC
У гэтым месяцы: 26 у 2011/05/07 12:35 раніцы UTC
У гэтым годзе: 130 у 2011/03/28 10:40 вечара UTC
За ўвесь час: 130 у 2011/03/28 10:40 вечара UTC