ulisses
3.07.2010, 00:44:10
Jak to najlepiej zrealizować.
Przyznam że lekko już głupieję. Chcę na każdej stronie mieć umieszczoną wyszukiwarkę, drzewo kategorii i inne "generyczne boxy". Umieszczone na layoucie. Będzie potrzebna komunikacja z bazą danych i obsługa. Nie chcę powielać tego we wszystkich kontrolerach - bezsensowne.
Co zastosować?
Helpery Akcji, Pluginy, "Master Controller" z którego będą dziedziczyły wszystkie inne kontrolery? Może coś jeszcze czego nie dostrzegam? To musi być częsty problem, więc musi być też optymalnie rozwiązane.
Jakie są praktycznie wady zalety powyższych rozwiązań?
Pozdrawiam
darko
3.07.2010, 01:02:26
W obrębie jednego kontrolera dla wszystkich akcji kod wrzucasz do metody init(). Natomiast, jeśli chcesz, aby jakiś fragment funkcjonalności był dostępny dla wszystkich kontrolerów - powinieneś zastosować budowę modułową oraz wykorzystać Zend_Layout, gdzie umieszczasz elementy statyczne. Skrypty często powielane i dołączane dla wielu kontrolerów możesz dołączać korzystając z Bootstrapów, a dokładnie Bootstrapa modułu domyślnego. Możesz wreszcie napisać własny plugin i w jakiejś metodzie inicjującej w głównym Bootstrapie zarejestrować go we front kontrolerze. Możliwości jest sporo, jednak w Twojej sytuacji rozsądne wydaje się wrzucenie elementów statycznych do layoutu (pod warunkiem, że wyszukiwarka i drzewko mają być wszechobecne), skrypty js i arkusze css dołączałbym w Bootstrapie domyślnego modułu, a akcje zaimplementował w kontrolerze domyślnego modułu. Mam nadzieję, że nie namieszałem.
ja to rozwiązałem przez napisanie pluginu ktory w zależności od wybranego modułu ładuje jakies wspólne dane do view'a
ulisses
3.07.2010, 09:33:05
Cytat(grOm @ 3.07.2010, 03:55:08 )

ja to rozwiązałem przez napisanie pluginu ktory w zależności od wybranego modułu ładuje jakies wspólne dane do view'a
Czy dobrze rozumiem że w pluginie inicjalizujesz połączenie do bazy, wydobywasz informacje (np. strukturę kategorii drzewa) i przesyłasz wydobyte dane do widoku?
W pluginie modulu pobierasz dane, ustawiasz do layoutu, a w layoucie
if(isset($this -> layout() -> categories)) foreach($this -> layout() -> categories as $xxx)
Możesz też napisać view helper, który będzie robił to samo, decyzja należy do Ciebie
Pilsener
5.07.2010, 08:23:36
A nie prościej po prostu wywołać daną akcję w widoku?
<?php echo $this->action('menu','index','module'); ?>
Lub zrobić to wykorzystując layouty? Przecież problem dotyczy tylko zbudowania "drzewa widoków". Angażowanie helperów czy pluginów jakoś średnio mi tu pasuje.