[MVC] Rozne kontrolery i drobne zmiany w widoku., Jak zrealizowac ? |
[MVC] Rozne kontrolery i drobne zmiany w widoku., Jak zrealizowac ? |
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"
|
|
|
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 -------------------- |
|
|
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%) |
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 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"
|
|
|
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 No dobra, pisze od nowa. Powiedzmy że bloki menu pobierasz z bazy i je evalujesz. Ja tak mam. I w bazie trzymam.
u mnie SetAction poprostu wywołuje akcję Index i metode $list I kiedy klikniesz w link kategorii to wysyłasz zmiana_listy=list_news&id_listy=1 Ż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? Pozdrawia Bim. -------------------- |
|
|
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. -------------------- |
|
|
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
-------------------- |
|
|
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 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"
|
|
|
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
-------------------- |
|
|
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
Ja jedna dalej czekam na jakies dalesze sugestie. Chyba wezme przyklad z kolegi Javowca i uruchomie drugi kontroler a moze nawet trzeci i czwarty Tylko z tym drugim kontrolerem to troche tez mi sie to nie podoba Zalozmy ze mam ten nieszczescliwy FrontController i BlockController (o ile wogole dobrze pojmuje abydwa stwierdzenia ). 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"
|
|
|
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. -------------------- |
|
|
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 Nie zaprzegajmy templatek do tego ponieważ grafik ma miec jak najprostrze zadanie
Ten post edytował bim2 29.08.2006, 12:20:02 -------------------- |
|
|
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 Wiec moze u mnie jeden wiecej nie zaszkodzi -------------------- "Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"
|
|
|
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:
-------------------- |
|
|
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%) |
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:
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. |
|
|
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 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 )
Pozdrawiam Bim. -------------------- |
|
|
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:
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 Adrian. |
|
|
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 Jak zwal tak zwal BlockController, Applet no ale dodatkowy
Ide do koodu. -------------------- "Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"
|
|
|
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ł ;]
-------------------- |
|
|
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
|
|
|
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"
|
|
|
Wersja Lo-Fi | Aktualny czas: 15.06.2024 - 18:09 |