Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MVC]: Akcje, widoki i uklad strony
Forum PHP.pl > Forum > PHP
Leezard
witam

jest tak: mam strone, ktora zawiera w sobie:
- 3 bloki po lewej stronie
- 2 blok glowne
- 2 bloki po prawej stronie

bloki to zmienne smarty do ktorych sa przypisywane konkretne wypelnione w odpowiednim widoku szablony. Doszedlem do tego ze chcac wypelnic na raz wszystkie bloki trzeba uzyc ActionChain, i tak zrobilem. Gra gitara, ale oczywiscie mam troche wieksze wymagania winksmiley.jpg Chcialbym zeby mozna bylo, piszac prosty plik xml, wsadzic do dowolnego bloku dowolne "cos". Tzn ze raz w bloku L1 (lewa strona, pierwszy od gory) jest efekt akcji GetNews, innym razem akcja TopTen czy tam inne bzdury. I tak z wszystkimi blokami. Oczywiiscie nie wsyzstie akcje mozna uzyc w bloku.

I teraz wymyslilem takie cos, ze pisze sobie ten plik np w formacie:
  1. <www>
  2. <request name="nazwa_akcji_wywolywanej">
  3. <block id="oznaczenie_bloku'>
  4. <module>nazwa_modulu</module>
  5. <action>nazwa_akcji</action>
  6. <name>nazwa_w_action_chain</name>
  7. </block>
  8. ...
  9. </request>
  10. ....
  11. </www>

gdzie wszystko w sekcji <block> to parametry akcji wywolywanych w ActionChain. Przy probie wykonywania kazdej akcji, sprawdzam czy w pliku jest sekcja request dotyczaca tej akcji. jesli jest to na podstawie jej zawarrosci tworze ActionChain i wykonuje, uzyskujac wszystkie potrzebne informacje, ktore w widoku przypisuje do konkretnych blokow,

Czy to wyglada sensownie? Czy wogole do d... rozwiazanie? A moze jakies sugestie jak to zrobic?

Z gory dzieki
marcin96
A ja bym to zrobil troche inaczej...

Tworzysz sobie klase widoku (np ViewUsers) gdzie implementujesz wlasciwa funkcjonalnosc. Nastepnie tworzysz sobie klasy potomne, np: ViewUsersWithNews ViewUsersWithBanners czy cos w tym stylu.. i teraz tam implementujesz konkretne ustawienia wygladu. W konfiguracji odwolujesz sie tylko do tych klas potomnych:
  1. <?php
  2.  
  3. class ViewUsersWithNews extends ViewUsers
  4. {
  5.  
  6. function Display($arrParams = array)
  7. {
  8.       $this->_callAction('ModuleMenu','TopMenu');
  9.       $this->_callAction('ModuleMenu','MainMenu');
  10.       $ret = parent::Display($arrParams);
  11.       $this->_callAction('News','NewsFlash');
  12.       return $ret;
  13. }
  14.  
  15. }
  16.  
  17.  
  18. class ViewUsersWithBanners extends ViewUsers
  19. {
  20.  
  21. function Display($arrParams = array)
  22. {
  23.       $this->_callAction('ModuleMenu','TopMenu');
  24.       $this->_callAction('ModuleMenu','MainMenu');
  25.       $this->_callAction('Banners','BannerTop');
  26.       $ret = parent::Display($arrParams);
  27.       $this->_callAction('Banners','BannerLeft');
  28.       return $ret;
  29. }
  30.  
  31. }
  32.  
  33.  
  34. ?>


mozna ten wzorzec sobie jeszcze rozbudowac/zmodyfikowac.. np:

  1. <?php
  2.  
  3. class ViewUsers extends View
  4. {
  5.  
  6. function preDisplay()
  7. {
  8. // abstract
  9. }
  10.  
  11. function postDisplay()
  12. {
  13. // abstract
  14. }
  15.  
  16. function Display($arrParams = array)
  17. {
  18. $this->preDisplay();
  19. // tutaj funkcjonalnosc
  20. $this->postDisplay();
  21. }
  22.  
  23. }
  24.  
  25. class ViewUsersWithNews extends ViewUsers
  26. {
  27.  
  28. function preDisplay()
  29. {
  30.       $this->_callAction('ModuleMenu','TopMenu');
  31.       $this->_callAction('ModuleMenu','MainMenu');
  32. }
  33.  
  34. function postDisplay()
  35.       $this->_callAction('News','NewsFlash');
  36. }
  37.  
  38. }
  39.  
  40.  
  41. class ViewUsersWithBanners extends ViewUsers
  42. {
  43.  
  44. function preDisplay()
  45. {
  46.       $this->_callAction('ModuleMenu','TopMenu');
  47.       $this->_callAction('ModuleMenu','MainMenu');
  48.       $this->_callAction('Banners','BannerTop');
  49. }
  50.  
  51. function postDisplay()
  52. {
  53.       $this->_callAction('Banners','BannerLeft');
  54. }
  55.  
  56. }
  57.  
  58.  
  59. ?>



...no chyba, ze to wszystko chcesz miec koniecznie w konfigu ;>))
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-2025 Invision Power Services, Inc.