Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Klasa View
Forum PHP.pl > Forum > PHP > Object-oriented programming
marcio
Witam mam pewien problem tworze sobie prosty "framework" no i widoki wygladaja u mnie jak w kohanie tzn jest glowna klasa View ktora wczytuje widok i podmienia elementy widok wyglada np tak:
  1. <body>
  2. <div style="text-align:center;">{DIV1}</div>
  3. <div style="text-align:center;">{DIV2}</div>
  4. <div style="text-align:center;">{DIV3}</div>
  5. </body>
  6. </html>

Dla mnie tak jest wygodniej niz tworzyc klase view dla kazdego kontrolera i wtedy szablon
Gdzie do {DIV1},{DIV2} i {DIV3} sa ladowanie poszczegolne komponenty/pluginy jednak troche mi to nie pasuje i wyczytalem w kilku watkach z archiwum pro ze lepiej uzywac widoki z php czyli moj widok podmienic na takie cos:
  1. <html>
  2. <body>
  3. <div style="text-align:center;"><? echo $div1 ?></div>
  4. <div style="text-align:center;"><? echo $div2 ?></div>
  5. <div style="text-align:center;"><? echo $div3 ?></div>
  6. </body>
  7. </html>

Lub widzialem ze mozna $this -> pole.
I nie wiem zabardzo jak zrobic klase tak aby podmieniala $div1 na wartosc ktora ustawie w klase View w kontrolerze.
Tzn w kontrolerze mamy
  1. //jakis kod
  2.  
  3. $view = $this -> View;
  4. $view -> nazwa = 'wartosc';
  5. //lub
  6. $view -> SetVars('nazwa', 'wartosc');
  7. $view -> Parse('news');

Jak zrobic by klasa ktora wczyta widok news.php podmienila zmienna z prawdziwego php?

Na szablonach to jest prosto zrobic jednak jest to malo elastyczne bo wszystkie warunki lub sprawdzenie czy ktos jest zalogowany sa na poziomie kontrolera co zmusza mnie czasami do robienia kilka roznych szablonow.
Do tego jesli podam tablice argumentow do podmiany musze robic foreach() na poziomie kontrolera lub w moim przypadku na poziomie klasy View by wszystko podmienic co jest glupie i nie elastyczne.

Wiec prosze o pomoc.
bim2
Hmm, jak masz w szablonie include() pliku z templatkami nad includem daj
  1. foreach($this->aVars AS $k => $v)
  2. {
  3. $$k = $v;
  4. }
destroyerr
Oj bim2, jest już przecież funkcja extract.
Skoro już tak podpatrujesz inne frameworki, to zajrzyj do nich, zobacz jak tam jest to zrobione.
Tak to robią w symfony, a tak w kohanaphp.

Głupie masz też to, że funkcja SetVars (nazwy metod z dużej to już inna historia) ustawia tylko jedną zmienną, a jej nazwa wskazuje na więcej.
bim2
Cytat(destroyerr @ 26.09.2009, 07:43:03 ) *
Oj bim2, jest już przecież funkcja extract.

Oo, nie widziałem smile.gif W sumie nigdy nie potrzebowałem przypisywać wartości do zmiennych w ten sposób. smile.gif

marcio
Cytat
Głupie masz też to, że funkcja SetVars (nazwy metod z dużej to już inna historia) ustawia tylko jedną zmienną, a jej nazwa wskazuje na więcej.

Mi tak wygodniej nazywac metody, zreszta kto powiedzial ze nie mozna ustawic kilka?

Ok napisalem sobie testowa klase: http://pastebin.com/d7d23c505 jednak nie dziala ona w 100% jak bym chcial to znaczy jesli mam w widoku np kod html i potem
  1. <? echo $tytul ?>

To moge go ustawic na 2 sposoby:
  1. $view -> tresc = 'jakas tresc';
  2. //lub
  3. $view -> SetVars('jakas tresc', 'tresc');

Gdy np dane pobrane z modelu wygladalyby tak:
  1. $dane = array(
  2.  
  3. 'id' => '1',
  4. 'login' => 'marcio',
  5. 'haslo' => 'blabla',
  6. 'email' => 'qwerty@op.pl'
  7.  
  8. );

To gdy zrobie tak:
  1. $view -> dane = $dane;

A w widoku foreach() na zmienna dane to dziala.
Jednak gdy ustawie tak:
  1. $view -> SetVars($dane, 'dane');

To juz nie dziala.
Tak samo gdy pobieram jeden lub wiecej rekordow i zapisuje je do tablicy($news) na podstawie id czyli:
Cytat
Array ( [3] => Array ( [id] => 3 [controller] => Home [place] => div3 [component] => Auth ) [2] => Array ( [id] => 2 [controller] => Home [place] => div2 [component] => Comment ) [1] => Array ( [id] => 1 [controller] => Home [place] => div1 [component] => News ) )

Ustawiam:
  1. $view -> SetVars($news);

I w widoku mam foreach() na $news to nie dziala
CHyba cos przekombinowalem z funkcja SetVars() poprostu chce zeby automatycznie ustawiala dobrze dane jesli jest to jedna zmienna, tablica lub tablica 2 wymiarowa tAk jak pokazalem w przykladach.

Jest juz pozno wiec moze cos zamotalem chetnie poprosze o pomoc oczywiscie dla @bim2 i @destroyyer jest +.

P.S mysle ze do mojego fw dam mozliwosc korzystania z widokow jak i templatow.

EDIT:

Jezeli ktos chce napisalem "prototyp" klasy View ktory dziala jak powinien(testowane) na zwyklych zmiennych,tablicach i tablicach 2 wymiarowych:
http://pastebin.com/m443d6346
Przykladowe widoki:
http://pastebin.com/m12149f56
http://pastebin.com/m19af81fc

Juz samego pobierania danych z modelu nie trzeba pokazywac
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.