Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Klasa View, Zamiast szablonow cos al'a Kohana
marcio
post
Post #1





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


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.

Ten post edytował marcio 25.09.2009, 23:16:12
Go to the top of the page
+Quote Post
bim2
post
Post #2





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

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


Hmm, jak masz w szablonie include() pliku z templatkami nad includem daj
  1. foreach($this->aVars AS $k => $v)
  2. {
  3. $$k = $v;
  4. }
Go to the top of the page
+Quote Post
destroyerr
post
Post #3





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

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


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.
Go to the top of the page
+Quote Post
bim2
post
Post #4





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

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


Cytat(destroyerr @ 26.09.2009, 07:43:03 ) *
Oj bim2, jest już przecież funkcja extract.

Oo, nie widziałem (IMG:style_emoticons/default/smile.gif) W sumie nigdy nie potrzebowałem przypisywać wartości do zmiennych w ten sposób. (IMG:style_emoticons/default/smile.gif)

Go to the top of the page
+Quote Post
marcio
post
Post #5





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


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

Ten post edytował marcio 30.09.2009, 23:58:02
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 2.10.2025 - 23:51