Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Opakowanie strony w kontrolerze, czy w widoku
Forum PHP.pl > Forum > PHP > Object-oriented programming
sekseksek997
Witam, mam problem jak zrobić całe "opakowanie" strony.

SPOSÓB 1:

Kontroler akcji dziedziczy po innym kontrolerze, i w ten sposób u siebie wywołuję jego metodę np opakowanie, która podany string oprawia i kod nagłówka, stopki itp.

SPOSÓB 2:

Widok akcji dziedziczy po innym widoku, w którym w destruktorze wszystko, co ma zostać wysłane do przeglądarki jest obrabiane, dodawane menu itp

Generalnie chodzi mi o to, żebym mógł łatwo zmienić layout jaki chcę do danej akcji poprzez dziedziczenie z odpowiedniej klasy.

Jeżeli wy to robicie w inny sposób będę wdzięczny za podpowiedź.
woj_tas
Proponuje poczytać jak to inni robią: link
sekseksek997
Sugerujesz, że mam odwoływać się do poszczególnych widoków przez dekoratora?
zend
Buforuj dane wyświetlane w widokach, a potem wyświetl je w jakieś głównej templatce
sekseksek997
Taki miałem początkowo pomysł. Ale menu potrzebuje danych z cache/bazy. U mnie widok w pewnych przypadkach łączy się z modelem.

Tyle wariantów, aż się pogubiłem i nie wiem, który, najlepszy dla siebie wybrać...
zend
Jaki problem z tym dostępem do bazy? Tworzysz helper który pobiera dane i zwraca tablice
sekseksek997
Helpery mam w widoku. Czyli jak wysyłam te dane do przeglądarki w klasie response tam ma być opakowanie?
zend
Nie wiem czy w klasie response, to zależy jak masz to zaprojektowane. Najlepiej tam gdzie robisz dispatching
sekseksek997
To jest takie rozwiązanie "na sztywno" co jak będę chciał, żeby pewne dane były prezentowane jako pdf? Muszę ingerować w dispatcher...
zend
No to ustawiasz jako plugin, np jak w zend frameworku plugins tworzysz helper w którym łapiesz kontent, a potem nakładasz na to co chcesz
sekseksek997
Pluginy dodaję przy wywołaniu front controllera?

I w PostDispatch w odpowiednim pluginie nakładam to co chcę?
Plugin wywołuje odpowiedni widok opakowania itp?
Nakładam to w klasie Response?

Jedna wada takiego rozwiązania to, ze nie widzę możliwości zmiany rodzaju opakowania w kontrolerze akcji.

Przykładowo: chcę aby news był w formie pdf do pobrania. Tworzę odpowiednią akcję i nic, bo nie mogę wybrać/zmienić pluginu, który przestawi system na pdf?

EDIT

Chyba, ze bym skasował tamtego plugina i dodał plugina PDF Dobrze myślę?
thek
Za bardzo motasz smile.gif Zrób tak, że masz główną templatkę bazowego widoku. Po niej wszystkie możliwe warianty sobie dziedziczysz i cudujesz tamże ze wstawianiem ewentualnym widoków potrzebnych w określonych miejscach. Przykład?
  1. <html>
  2. <head>
  3. //tu jakieś nagłówki
  4. <?php echo $this->title ?>
  5. </head>
  6. <body>
  7. <?php echo $this->head ?>
  8. <?php echo $this->panel ?>
  9. <?php echo $this->foot ?>
  10. </body>
  11. </html>
Dziedzicząc tenże można przykładowo $this->panel tworzyć jako konkatenację widoków metodą __toString(). Bo kto nam zabroni zrobićw klasie potomnej myk w stylu:
  1. $this->content = ($this->left_panel).($this->right_panel);
gdzie owe left i right panel to będą widoki odpowiednie smile.gif

Jeśli nie łapiesz o co mi chodzi to zobacz przykładowo jak robi to kohana, bo w ten sposób jest to tam rozwiązane. Może widząc kod złapiesz.
sekseksek997
A co, jeżeli do renderowania widoku używam autorskiej klasy templat coś podobnego jak phpbb3

Czyli uniwersalne rozwiązanie nie istnieje? Każdy programista robi to po swojemu...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.