Динамички додаваат страници на Zend_Navigation контејнер во траење

Со Стивен Лојд Watkin , четврток 7 Јануари, 2010 22:50

Во продолжение на мојот последен пост за Zend_Navigation, Пат барања за sitemap.xml да обичај контролер / акција , овој пост е за dymnamically додавајќи страници за сад Zend_Navigation во траење / script извршување.

Нејзината сите добро и добро да одредува вашите страници во Ревидирал или XML датотеката, но во одреден момент си оди за да се менува страни од твојот веб-сајт што сакате, како дел од менито, карта, или да бидат вклучени во вашата Breadcrumb трага. Затоа она што треба да направите е да се додаваат страници на нашите Zend_Navigation контејнер за време на извршувањето. Примери за ова ќе биде во додавајќи вести, блог постови, или страница коментари, итн

Во овој пример, ќе одам да се додадат некои вести мислења на мојата статички дефинирани Ревидирал конфиг. Да се ​​добие мојот пост вести страница конфигурации јас сум користел класа која враќа низа во следниот формат:

  $ PagesToAdd = array (
   0 =>
     array (
       "Етикетата 'Лажни вести =>' приказна # 5 ...',
       "Модул" => "www",
       'Пат' => 'www-индекс,
       "Акција" 'поглед' =>
       "Контролорот" 'вести' =>
       "Params '=> array (
           'Id' => "5-Лажни-вести-приказна - 5 ')
     ),
   1 =>
     array (/ * Повеќе детали страница * /),
  ); 

Како што ќе забележите дека функцијата се враќа низа во која се содржани низи кои го сочинуваат конфиг низи за Zend_Navigation_Page_Mvc. Затоа, од јамки во текот на низа нови Zend_Navigation страници можат да бидат создадени од конфиг низа. Следното нешто да се направи како дел од јамката за да го додадете на страниците во правилна позиција (алтернативно страници може да се додаде во рефус со користење -> addPages () метод).

За да го направите ова, се лоцира страница сакате да го додадете на под-страниците и едноставно додадете страници. Во овој случај јас го користи следниот код да го најдам мојот страница:

  $ Контејнер-> findOneBy ('куќа', 'Најнови вести') -> addPage ($ страница); 

Целокупната ми навигација initialisation во подигање затоа изгледа вака:

  / **
      * Се користи за обработка на највисоко ниво за навигација
      *
      * @ Врати Zend_Navigation
      * /
     функција заштитена _initNavigation ()
     {
         $ Ова-> bootstrap ("распоред ');
         $ Распоред = $ ова-> getResource ("распоред ');
         $ Погледнете = $ распоред-> getView ();
         $ Config = new Zend_Config_Ini (
             APPLICATION_PATH.  '/ Configs / navigation.ini, APPLICATION_ENV);

         $ Контејнер = new Zend_Navigation ($ config-> стандардно);
         / / Сега додадете последните 25 вести
         $ Вести = new Вести ();
         $ Страници = $ вести-> getNavigationEntries ();
         foreach ($ страници $ страница) {
        	 $ Страница = new Zend_Navigation_Page_Mvc ($ страница);
        	 $ Контејнер-> findOneBy ('куќа', 'Најнови вести') -> addPage ($ страница);
         }
         $ View-> навигација ($ контејнер);
     } 

На нешто што треба да се додаде е некоја форма на кеширање (со користење на Zend_Cache веројатно;)) инаку ова се случува да бидат прилично скапи со секоја страница товарот.

5 Responses to "Динамички додаваат страници на Zend_Navigation контејнер во траење"

  1. Г-дин Човекот вели:

    Тоа е само она што го барав за - Ви благодариме за еден навистина јасен пример. Наздравје. G

  2. A387 вели:

    Убав пост! Сум некои проблеми со отпочнување на моделот класа во подигање. Секое поим зошто апликација / модел класи не се достапни од подигање? Својата класа се нарекува "нов Вести (), наместо да би сакале да додадете на страници за навигација со добивање на дрвото од навигацијата модел класа. Доколку имате идеја, молам дозволете ми да знам! ;)

    • Мојот модел беше исчистена од функцијата, нејзините точното име во кодот е Pro_News и е избран од страна на autoloader.

      Сомневајќи се дека не сте користејќи модули? Но, ако е така вашиот модел треба да се нарекува _News за ZF да земам по дифолт (јас не го користат овој систем мене).

      Би му сугерираат вклучуваат проверка на патот од вашиот подигање метод да се види дали содржи "application / модели" или вклучуваат датотеката рачно.

      • A387 вели:

        И јас го користам модули, мојата лоша. Но, што сугерира autoloading треба да работат? Па, јас сум за да копа во неа малку подлабоко. Моментално јас го користам addPage функција во BaseControllers, што не е баш пријателски перформанси ... hehe. Ви благодариме за вашиот одговор.

Оставете Одговори













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

8 посетители онлајн сега
6 Гости, 2-ботови, 0 членови
Макс посетители денес: 15 во 08:24 UTC
Овој месец: 26 во 2011/07/05 12:35 UTC
Оваа година: 28-03-2011 во 130 22:40 UTC
Сите времиња: 130 на 28-03-2011 10:40 UTC