![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Witam!
Potrzebuję podzielić widok, na kilka klas. Dokładniej chcę mieć główny widok i klasy które rozszerzą jego możliwości. Nie byłoby problemu, bo mógłbym nawet dziedziczyć tylko, że potrzebuję użyć np. 3-4 rozszerzeń naraz. Przykłady rozszerzeń: - Klasa obsługująca szablony (parsowanie etc.) - Klasa parsująca bb-code - Klasa tworząca formularze Sam wymyśliłem coś takiego: Klasa widok, ma metodę:
Problem polega na tym, że używanie tak wczytanego modułu jest niewygodne, bo muszę robić to np. tak:
Od razu tutaj zaznaczę, że mam magiczną metodę __get() dlatego odwołuję się poprzez $view->template. Co w tym niewygodnego? Muszę wszystko zwracać returnami, bo inaczej nic w widoku nie zapiszę. Dokładniej:
To co mi się nie podoba, działa akurat na zasadzie wywołania __toString, który uruchamia parser template. Z template jest najmniejszy problem, gorzej z robieniem formów... Gdzie np. każdego inputa muszę zapisać do zmiennej i potem $view->save($zmiennaZinputem) Jak za słabo objaśniłem to czekam na pytania. ![]() -------------------- Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 304 Pomógł: 51 Dołączył: 4.02.2005 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Nie wiem czy dobrze zrozumiałem Twój problem, ale jeśli w aplikacji istnieje "zapach" wielodziedziczenia to dekorator powinien dać radę ;] Ewentualnie możesz zrobić "złożony" widok (Composite), do którego dodajesz te widoki podrzędne o których mówisz, a widok główny deleguje zadania kolejno do każdego z widoków podrzędnych i składa wynik.
Ten post edytował -=Peter=- 10.08.2009, 12:20:29 -------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Nie wiem czy dobrze zrozumiałem Twój problem, ale jeśli w aplikacji istnieje "zapach" wielodziedziczenia to dekorator powinien dać radę ;] Tutaj nie ma dziedziczenia, napisałem że gdyby chodziło o jeden moduł rozszerzający naraz to bym dziedziczył, w przeciwnym wypadku (tym) nie mogę. Ewentualnie możesz zrobić "złożony" widok (Composite), do którego dodajesz te widoki podrzędne o których mówisz, a widok główny deleguje zadania kolejno do każdego z widoków podrzędnych i składa wynik. Nie wiem czy dobrze zrozumiałem, ale właśnie do głównego widoku ładuję te moduły rozszerzające czy jak to nazwałeś widoki podrzędne. -------------------- Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Nie wiem, czy u Ciebie nie byłby dobry wzorzec Adapter.
Cytat Jak za słabo objaśniłem to czekam na pytania. Trochę nie jarzę, jak chcesz w ogóle to wszystko osiągnąć - żeby samo wczytywało wstawki i automatycznie je wykonywało? -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Trochę nie jarzę, jak chcesz w ogóle to wszystko osiągnąć - żeby samo wczytywało wstawki i automatycznie je wykonywało? Chodzi mi o to, abym mógł w prosty sposób rozwiązać "komunikację" głównego widoku z modułami rozszerzającymi. Przykładowo moduł do form, powiedzmy tworzenie inputa:
Chodzi mi o to, aby po wywołaniu $view->form->createInput była jakby "automatycznie" wywoływana $view->save(), abym nie musiał tworzyć kolejnej zmiennej w tym wypadku $input. Bo robi się bałagan jak robię np. 3 inputy (login, hasło, submit) Jednym słowem wszystko jest jakieś niewygodne. Jak trzeba to pokażę moje testowe/przejściowe rozwiązanie, napisane na kolanie. -------------------- Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP |
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat Chodzi mi o to, aby po wywołaniu $view->form->createInput była jakby "automatycznie" wywoływana $view->save(), abym nie musiał tworzyć kolejnej zmiennej w tym wypadku $input. Hmm, to może zrób wg tego:
i potem wewnątrz tamtej klasy wywołujesz, co trzeba. -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 4 340 Pomógł: 542 Dołączył: 15.01.2006 Skąd: Olsztyn/Warszawa Ostrzeżenie: (0%) ![]() ![]() |
-------------------- I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy. QueryBuilder, Mootools.net, bbcradio1::MistaJam http://www.phpbench.com/ |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Chyba lepiej pokaże moje rozwiązanie na kolanie pisane:
Klasa view (główna) do niej "ładuję" moduły
Przykładowy moduł:
Mam nadzieję, że to mniej więcej rozjaśni mój problem. ;d -------------------- Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 143 Pomógł: 17 Dołączył: 8.11.2008 Skąd: Libiąż Ostrzeżenie: (0%) ![]() ![]() |
I jak masz zamiar tego użyć? Bo mimo, że się wgłębiłem, to nie mogę znaleźć się w Twoim kodzie... Pokaż przykładowy kod użycia proszę.
BTW. Od tego są tablice asocjacyjne, żeby nie robić takich diabełków jak to:
tylko uprościć sobie:
EDIT: Potem sobie korzystasz z array_keys() Ten post edytował megawebmaster 15.08.2009, 22:18:27 |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
I jak masz zamiar tego użyć? Bo mimo, że się wgłębiłem, to nie mogę znaleźć się w Twoim kodzie... Pokaż przykładowy kod użycia proszę. Masz w pierwszym poście... BTW. Od tego są tablice asocjacyjne, żeby nie robić takich diabełków jak to: Jak już wspomniałem kod jest pisany na kolanie, tylko w celach "testowych". (chciałem zobaczyć jak to będzie działało) -------------------- Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 143 Pomógł: 17 Dołączył: 8.11.2008 Skąd: Libiąż Ostrzeżenie: (0%) ![]() ![]() |
No to najprostszym rozwiązaniem jest przekazanie do obiektu view_template przy ładowaniu samego siebie ($this) i w ten sposób uzyskasz dostęp do metod klasy view. Dzięki temu możesz sobie dodać zapisywanie, albo nawet bezpośrednie dodawanie do zmiennej $content klasy view w metodach dołączonych. To takie najprostsze rozwiązanie. Inne rozwiązanie to zrobienie to tak jak napisał ktoś wcześniej - wzorzec adapter - i ładowanie modułów, ale ich obsługa bezpośrednio w klasie view. To tyle wymyśliłem na kolanie.
P.S. Ewentualnie w obiektach modułów można wywołać w konstruktorze modułu view::create() i pobrać instancję klasy view. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 19:50 |