Dynamiczne dodawanie stron do zbiornika Zend_Navigation przy starcie
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.


















































Tego właśnie szukałem - dzięki za przykład bardzo jasne. Cheers. G
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.
Cóż mogę korzystać z modułów, mój błąd. Ale sugerować ładowanie powinno działać? Cóż, kopać w to nieco głębiej. W tej chwili używam AddPage funkcji w BaseControllers, który nie jest tak naprawdę wydajność przyjazny ... hehe. Dzięki za odpowiedź.
Upewnij się, moduł model prawidłową nazwę _News (Na przykład) i należy podnieść za pomocą automatycznego ładowania.
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.