Dynamiczne dodawanie stron do zbiornika Zend_Navigation przy starcie

W Steven Lloyd Watkin , czwartek 07 stycznia 2010 22:50

W kontynuacji na mój ostatni post o Zend_Navigation, żądań do sitemap.xml zwyczaju kontroler / akcja , ten post jest o dymnamically dodawania stron do pojemnika Zend_Navigation przy starcie / skryptu.

To wszystko dobre i określając swoje strony w ini lub xml pliku, ale w pewnym momencie będziemy mieli zmiany stron w witrynie, która ma być częścią menu, mapa witryny, lub które mają być uwzględnione w breadcrumb szlaku. W związku z tym, co musimy zrobić to dodać stron do pojemnika Zend_Navigation przy starcie. Przykłady to byłoby dodanie nowości, blogu lub na stronie komentarze itd.

W tym przykładzie mam zamiar dodać kilka postów news do statycznie zdefiniowanych ini config. Aby uzyskać konfiguracje mojego postu stron gazet Użyłem klasy, która zwraca tablicę w następujący format:

  $ PagesToAdd = array (
   0 =>
     array (
       "Szyldem", historia => 'news # 5 ...', Fake
       "Moduł '=>' www ',
       "Szlaku" => 'www-index ",
       "Działanie" 'view' =>
       "Administrator danych" 'news' =>
       'Params' => array (
           'Id' => '5-Fake-news-story - 5 ')
     ),
   1 =>
     array (/ * Więcej szczegółów strona * /),
  ); 

Jak można zauważyć, że funkcja powróciła tablicy w którym zawarte są tablice, które tworzą tablice dla Zend_Navigation_Page_Mvc config. Dlatego też, w pętli na tablicy stron nowego Zend_Navigation mogą być tworzone z config tablicy. Następną rzeczą do zrobienia w ramach pętli do dodawania stron w odpowiedniej pozycji (alternatywnie stron mogą być dodawane w dużych ilościach za pomocą -> addPages () method).

Aby to zrobić, znajdź stronę, którą chcesz dodać podstrony i po prostu dodać stron. W tym przypadku użyłem następujący kod, aby znaleźć moją stronę:

  $ Container-> findOneBy ("etykieta", "Aktualności") -> AddPage ($ page); 

Moim ogólnym inicjalizacji nawigacji w bootstrap zatem wygląda tak:

  / **
      * Używany do obsługi nawigacji na najwyższym poziomie
      *
      * Powrót Zend_Navigation @
      * /
     chronione _initNavigation function ()
     {
         $ This-> bootstrap ("układ");
         $ Layout = $ this-> getResource ("układ");
         $ View = $ layout-> getView ();
         $ Config = new Zend_Config_Ini (
             APPLICATION_PATH.  "/ Configs / navigation.ini, APPLICATION_ENV);

         $ Pojemnik = new Zend_Navigation ($ config-> domyślnie);
         / / Teraz dodać ostatnich 25 doniesienia
         $ News = new News ();
         $ Strony = $ news-> getNavigationEntries ();
         foreach ($ strony AS $ page) {
        	 $ Page = new Zend_Navigation_Page_Mvc ($ page);
        	 $ Container-> findOneBy ("etykieta", "Aktualności") -> AddPage ($ page);
         }
         $ Nawigacji view-> ($ kontenera);
     } 

Na rzecz, która musi być dodana jakaś forma pamięci podręcznej (za pomocą Zend_Cache prawdopodobnie;)) w przeciwnym wypadku będzie dość kosztowne z każdym załadowaniu strony.

6 Odpowiedzi na "dynamicznie dodawać strony do kontenera Zend_Navigation przy starcie"

  1. Pan Man mówi:

    Tego właśnie szukałem - dzięki za przykład bardzo jasne. Cheers. G

  2. A387 mówi:

    Nice post! Mam pewne problemy z rozpoczęciem model klasy w bootstrap. Wszelkie pojęcia, dlaczego lekcji / model aplikacji nie są dostępne w bootstrap? Twoja klasa jest nazywany "nowym News ()", a nie chciałbym, aby dodać strony nawigacyjne uzyskując drzewie nawigacji z klasy modelu. Jeśli masz pomysł, proszę dać mi znać! ;)

    • Mój model był edytowany na stanowisko, jego poprawną nazwę w kodzie jest Pro_News i jest odbierane przez Autoloader.

      Odgadywanie nie używasz modułów? Ale jeśli tak model powinien być nazywany _News dla ZF podnieść domyślnie (nie używam tego systemu ja).

      Chciałbym zaproponować sprawdzenie ścieżki include z metody bootstrap, aby sprawdzić, czy zawiera on "application / models" lub zawiera plik ręcznie.

  3. Mój model był edytowany na stanowisko, jego poprawną nazwę w kodzie jest Pro_News i jest odbierane przez Autoloader.

    Odgadywanie nie używasz modułów? Ale jeśli tak model powinien być nazywany _News Dla ZF podnieść domyślnie (nie używam tego systemu ja).

    Chciałbym zaproponować sprawdzenie ścieżki include z metody bootstrap, aby sprawdzić, czy zawiera on "application / models" lub zawiera plik ręcznie.

Zostaw odpowiedź













Panorama tematu przez Themocracy

4 użytkowników online
3 gości, 1 boty, 0 użytkowników
Max odwiedzających dziś: 11 na 01:06 UTC
W tym miesiącu: 22 na 06.08.2011 00:30 UTC
W tym roku: 130 w 28-03-2011 22:40 UTC
Cały czas: 130 w 28-03-2011 22:40 UTC