Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [MVC] Rozne kontrolery i drobne zmiany w widoku., Jak zrealizowac ?
thornag
post 27.08.2006, 20:06:32
Post #1





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

Ostrzeżenie: (0%)
-----


Witam...

Zastanawiam sie ostatnio i wymyslic nie moge jak zrealizowac dzialanie takie jak to.

Kontroler uruchamia akcje index ta ustawia widok no i mamy strone glowa. Ten sam kontroler pewnie bedzie sprawowal kontrole nad akcjami typu pokaz liste newsow, pokaz caly news itp. Jednak na co zrzucic odpowiedzialnosc na male zmiany wyswietlania na stronie glownej. Powiedzmy ze gdzies w lewym panelu strony (przyjmujac uklad logo, lewy panel, czesc glowna) mamy liste jakis kategori. Po kliknieciu w liste ta lista zamienia sie w spis rzeczy w kategori.
Efekt tego taki ze cala strona pozostaje bez zmian, zmienia sie tylko ten jeden fragment.

Czy pisac akcje dla takiego czegos i uruchamiac ja przez glowny kontroler ? No raczej nie, mozna by napisac taka akcje ktora by poprosila model o dane, ustawila odpowiedni widok, OK. No ale co z widokiem ? Trzeba by bylo zrobic osobny template w ktorym rozni sie tylko ten jeden element ? Wedlug mnie bezsensu, bo chcialbym aby czesc glowna niezaleznie od tego gdzie sie uzytkownik znajduje pozostala taka sama. Nie bede przeciez robil dodatkowych templatow dla kazdego instniejacego templatu tylko po to by zmienic jeden blok.

Spodziewam sie ze z pomoca przychodzi tutaj BlockController FrontController .

Przyznam szczerze nie bardzo potrafie sobie wyobrazic jak to wszystko ma dzialac na dwoch kontrolerach. Jak wy rozwiazujecie takie wyswietlania ?

Ten post edytował thornag 27.08.2006, 20:07:41


--------------------
"Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"

Go to the top of the page
+Quote Post
bim2
post 28.08.2006, 10:22:46
Post #2





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


Ja mam coś takiego. Mam setAll('akcja', 'metoda'); i dajesz np setAll('forum $_GET['metoda']); i daj ta osobna akcje. Nie rozumiem Cię z tym templatem. Jak osobny? Ja bym do listy kategorii zrobił osobny i wywołał go w templatce. Pewnie nie zrozumiałeś. Powiedzmy mam blok menu. Jak go wywołujesz? No własnie. Wywołaj tą liste tak samo. Mi setAll() zwraca to co zwróciła akcja, a kacja to co widok. Więc mam $menu = setAction('menu') (to jest jak setAll ale zmienia tylko akcję)

Mam nadzieję że coś poradziłem smile.gif


--------------------
Go to the top of the page
+Quote Post
thornag
post 28.08.2006, 15:01:40
Post #3





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

Ostrzeżenie: (0%)
-----


Cytat(bim2 @ 28.08.2006, 10:22 ) *
Ja mam coś takiego. Mam setAll('akcja', 'metoda'); i dajesz np setAll('forum $_GET['metoda']); i daj ta osobna akcje. Nie rozumiem Cię z tym templatem. Jak osobny? Ja bym do listy kategorii zrobił osobny i wywołał go w templatce. Pewnie nie zrozumiałeś. Powiedzmy mam blok menu. Jak go wywołujesz? No własnie. Wywołaj tą liste tak samo. Mi setAll() zwraca to co zwróciła akcja, a kacja to co widok. Więc mam $menu = setAction('menu') (to jest jak setAll ale zmienia tylko akcję)

Mam nadzieję że coś poradziłem smile.gif

Niebardzo poradziles, ja moze poradze. Zanim przycisniesz "wyslij" przeczytaj swojego posta dwa razy, sformatuj go jakos, i zastanow sie czy to ma sens, bo ja takowego nie potrafiue odnalezdc tak tam napackales. Jakokolwiek dzieki za dobre checi.


--------------------
"Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"

Go to the top of the page
+Quote Post
bim2
post 28.08.2006, 15:48:10
Post #4





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


Tak myślałem laugh.gif No dobra, pisze od nowa. Powiedzmy że bloki menu pobierasz z bazy i je evalujesz. Ja tak mam. I w bazie trzymam.
  1. <?
  2. $ctrlert = Controller::getInstance();
  3. $list = (!empty($_GET['zmiana_listy'])) ? $_GET['zmiana_listy'] : 'list_kategories';
  4. $ctrlert->setAll('index', $list);
  5. ?>

u mnie SetAction poprostu wywołuje akcję Index i metode $list smile.gif I kiedy klikniesz w link kategorii to wysyłasz zmiana_listy=list_news&id_listy=1 winksmiley.jpg Żeby nie kolidowało się to np. z newsami na stronie głownej, to nesyw wywołuje
$view = (!empty($_GEt['view'])) ? $_GET['view'] : 'defaults';
setAction($view);

Mam nadzieję że ten post coś Ci pomoże? Jak nie zrozumiałes może lepiej będzie pogadać przez skypa? biggrin.gif

Pozdrawia Bim.


--------------------
Go to the top of the page
+Quote Post
Denver
post 28.08.2006, 17:36:28
Post #5





Grupa: Zarejestrowani
Postów: 132
Pomógł: 0
Dołączył: 24.09.2003
Skąd: Giżycko / Wrocław

Ostrzeżenie: (0%)
-----


Tym, czy wyświetlić listę kategorii, czy spis podkategorii, powinien się zajmować - moim zdaniem - sam szablon. Ja obecnie korzystam z OPT i w takim przypadku, jak twój, nie miałbym żadnego problemu. Lista kategorii to jakaśtam tablica przekazana szablonowi. Szablon sprawdza, czy zostały przekazane też zagnieżdżone tablice (które reprezentują podkategorie), i jeśli tak, to je wyświetla.

Podsumowując: akcje odpowiedzialne za pobieranie kategorii z np. bazy tworzą odpowiednią strukturę tablic i przekazują ją do szablonu. Szablon sam odpowiada za wykrycie, czy zostały mu przekazane także podkategorie, i je odpowiednio wyświetla.


--------------------
Go to the top of the page
+Quote Post
bim2
post 28.08.2006, 17:56:15
Post #6





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


Też dobro, ale ja mam osobną templatke i wywołuje inny model poprostu smile.gif


--------------------
Go to the top of the page
+Quote Post
thornag
post 28.08.2006, 20:33:54
Post #7





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

Ostrzeżenie: (0%)
-----


@bim2 Nie podoba mi sie trzymanie logiki w bazie danych tak zeby pozniej wyswietlac to uzywajac eval()

@Denver - to rozwiazanie juz mi bardziej pasuje, jednak znow razi mnie tylko to ze w szablonie zaszywam jakas logike smile.gif Przymysle bo poki co bardziej sensowne niz te bima

Pozdrawiam


--------------------
"Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"

Go to the top of the page
+Quote Post
bim2
post 28.08.2006, 20:49:08
Post #8





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


@thornag ja dąłme przykład :| Nie musisz trzymac tego w bazie. Mozna to wywołać wszędzie. A jeszcze jak dasz return to dasz $list = setAll('index', 'list_news'); $tpl->setVar('list', $list); Rozumiesz? Mi to działa ładnie smile.gif


--------------------
Go to the top of the page
+Quote Post
thornag
post 28.08.2006, 21:01:27
Post #9





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

Ostrzeżenie: (0%)
-----


@bim2 Zrozumialem Twoje rozwiazanie spokojnie, napisalem dlaczego mi sie nie podoba i dlaczego nie zastosuje, nie muszisz odpowiadac trzy razy piszac to samo smile.gif

Ja jedna dalej czekam na jakies dalesze sugestie. Chyba wezme przyklad z kolegi Javowca i uruchomie drugi kontroler a moze nawet trzeci i czwarty tongue.gif Tylko z tym drugim kontrolerem to troche tez mi sie to nie podoba smile.gif

Zalozmy ze mam ten nieszczescliwy FrontController i BlockController (o ile wogole dobrze pojmuje abydwa stwierdzenia tongue.gif). FrontController zajmuje sie czescia glowna i na nim spoczywa odpowiedzialnosc za lwia czesc aplikacji. I teraz BlocController. Myslalem zeby jesli trzeba przekazac mu odpowiednia uzywajac innej nazwy zmiennej w URLu a stara akcjeglownego kontrollera pamietac w sesji. W trakcie dzialania FrontControllera ustawia on akcje taka sama jak poprzednio (biorac jej nazwe z sesji) pozniej inicjalizuje mniejszy kontroler. Ten mniejszy juz sobie sam radzi ustawia, w swoim zakresie kontaktuje sie z modelem ustawia szablon i dane dla bloku, przekazuje to do glownego widoku no i wio Display().

Co myslicie o takim rozwiazaniu ?


--------------------
"Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"

Go to the top of the page
+Quote Post
Denver
post 28.08.2006, 21:10:47
Post #10





Grupa: Zarejestrowani
Postów: 132
Pomógł: 0
Dołączył: 24.09.2003
Skąd: Giżycko / Wrocław

Ostrzeżenie: (0%)
-----


Nie do końca rozumiem do czego Ci inne kontrolery, i po co chcesz do wyświetlania zwykłych kategorii i podkategorii zaprzęgać sesje. Ja nadal twierdzę, że część logiki można zrzucić na szablony - ale tylko tą najprostszą.

Jeśli znasz wzorzec MVC i chcesz się do niego stosować to pamiętaj, że w kontrolerze nie powinien być generowany żaden kod HTML, w modelu też. Pętla {for} czy {foreach} stosowana w szablonie nie powinna być problematyczna, a niezwykle ułatwia pracę, np. w połączeniu z obiektami.


--------------------
Go to the top of the page
+Quote Post
bim2
post 29.08.2006, 12:18:37
Post #11





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


Dobra jak popierasz Denvera to trochę rozwine jeog myśl. Ja bym zrobił to tak. Miał 2 szablony spis_kategori.tpl i spis_podkategori.tpl, a w widoku wybierał który to ma być tpl smile.gif Nie zaprzegajmy templatek do tego ponieważ grafik ma miec jak najprostrze zadanie smile.gif

Ten post edytował bim2 29.08.2006, 12:20:02


--------------------
Go to the top of the page
+Quote Post
thornag
post 29.08.2006, 13:16:11
Post #12





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

Ostrzeżenie: (0%)
-----


Przeciez nie o szablony tutaj chodzi.

Jednak pokombinuje z wieksza iloscia kontrollerow. W aplikacji Javowej ktora sie tworzy i kumpla kontrolerow jest 80 tongue.gif Wiec moze u mnie jeden wiecej nie zaszkodzi tongue.gif


--------------------
"Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"

Go to the top of the page
+Quote Post
bim2
post 29.08.2006, 13:22:29
Post #13





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


Nie rozumie Cię. Po co ci kilka kontrollerów? Co ty chcesz osiągnąć? :roll2:


--------------------
Go to the top of the page
+Quote Post
Prph
post 29.08.2006, 13:27:41
Post #14





Grupa: Zarejestrowani
Postów: 338
Pomógł: 2
Dołączył: 4.03.2006
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Cytat(thornag @ 27.08.2006, 19:06:32 ) *
Powiedzmy ze gdzies w lewym panelu strony (przyjmujac uklad logo, lewy panel, czesc glowna) mamy liste jakis kategori. Po kliknieciu w liste ta lista zamienia sie w spis rzeczy w kategori.
Efekt tego taki ze cala strona pozostaje bez zmian, zmienia sie tylko ten jeden fragment.


Witam,

Ja realizuje to w nastepujacy sposob:

Mam obiekty zwane Apletami. Aptel w zalozeniu powinien posiadac funkcjoinalnosc zblizona do normalnego kontrolera - powinien miec dostep do danych post, get, session - do wszystkiego. Do modelu takze.

W szablonie php, jezeli chce uzyc menu z lewej strony, w odpowiednim miejscu pisze:

  1. <?php
  2. $this->applet('BoczneMenu');
  3. ?>


Widok wczytuje i uruchamia applet BoczneMenu. Ten z kolei moze sprawdzic, jakie parametry get przekazano do akcji i w zaleznosci od nich, moze wczytac menu takie, albo inne.

Uwzam ze rozwiazanie bardzo wygodne. Nie dam sobie reki uciac, ale chyba w symphony tez jest podobne rozwiazanie (przynajmniej ktos na forum tak wczesniej mowil).

Adrian.
Go to the top of the page
+Quote Post
bim2
post 29.08.2006, 14:42:43
Post #15





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


@Prph ja mam podobnie, tyle że wywołuje akcję, np list_news smile.gif I wtedy w zalezności od danych z GET zwraca co innego. Aplet, fajne to, dopisze taką funkcję (przyda się, bedzie user mógł wyłączać neiktóre aplety biggrin.gif)

Pozdrawiam Bim.


--------------------
Go to the top of the page
+Quote Post
Prph
post 29.08.2006, 14:49:15
Post #16





Grupa: Zarejestrowani
Postów: 338
Pomógł: 2
Dołączył: 4.03.2006
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Dokladmie tam to tak zrobione, ze w widoku mam helpery. JEzeli pisze:

  1. <?php
  2. $this->applet('nazwaApletu');
  3. ?>


widok laduje obiekt helpera Applet. Wykonuje metode execute i przekazuje jej parametry (w tym przypadku nazwe apletu). Helper Applet laduje klase wybranewgo apletu, wykonuje go i zwraca wynik smile.gif

Adrian.
Go to the top of the page
+Quote Post
thornag
post 29.08.2006, 16:13:02
Post #17





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

Ostrzeżenie: (0%)
-----


Dzieki, jak mowilem osobny kontroller smile.gif Jak zwal tak zwal BlockController, Applet no ale dodatkowy tongue.gif

Ide do koodu.


--------------------
"Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"

Go to the top of the page
+Quote Post
bim2
post 29.08.2006, 16:26:07
Post #18





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


Nie osobny kotroller. class Controller { function execute() {} function aplet($aplet) { $this->action=aplet; $this->execute(); } } I mówiłem Ci to od początku tyle że nie miałem (ładnego słowa) aplet a setAction(); jak zwał tak zwał ;]


--------------------
Go to the top of the page
+Quote Post
Ociu
post 30.08.2006, 08:47:44
Post #19





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




Może podzieliłem kontroler na FrontController i BlockController i też jest fajny winksmiley.jpg
Go to the top of the page
+Quote Post
thornag
post 30.08.2006, 09:34:07
Post #20





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

Ostrzeżenie: (0%)
-----


@bim2 Ty chyba nie dokladnie czytasz to co ja pisze. Zdecydowalem ze chce to podzielic na osobne kontrollery !

@Ociu moglbys jakos przyblizyc jak to zrealizowales ?


--------------------
"Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"

Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 15.06.2024 - 18:09