Yii Framework Forum: Layout - co i jak? - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Layout - co i jak? Rate Topic: -----

#1 User is offline   robikon 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 32
  • Joined: 17-October 11

Posted 17 October 2011 - 03:11 AM

Witam.
Zaczynam właśnie naukę tego frameworka, staram się zrozumieć jego logikę i utknąłem na właśnie layout'ach.
Tworzę nowy model, kontroler z akcją oraz plik widoku i tu moje pytanie w jaki sposób mogę określić aby mój nowo zrobiony widok korzystał ze zdefiniowanego w protected/views/layout2.php (wyglądu 2 kolumn).
Wg tutoriala:
"Metoda actionContact generuje internaucie widok o nazwie contact. Wewnętrznie dzieje się to poprzez załączenie pliku widoku /wwwroot/blog/protected/views/site/contact.php i osadzeniu wyniku w pliku układu /wwwroot/blog/protected/views/layouts/main.php" - i gdzie tu jest wskazany pośredniczący layout1.php wg którego strona jest wyświetlana.
0

#2 User is offline   sidewinder 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 218
  • Joined: 08-July 09
  • Location:Poland

Posted 17 October 2011 - 04:44 AM

To jest akurat trochę zamieszane i zdaje się, że nie uwzględnione w tutorialu. Otóż, zauważ, że wszystkie kontrolery wygenerowane przez gii dziedziczą po klasie Controller zamiast Ccontroller. Jest tak dlatego, że Controller to klasa umieszczona w katalogu components Twojej aplikacji i tam są ustawiane domyślne zmienne i wartości wykorzystywane później w widokach, między innymi layouts. Osobiście zawsze wywalam te layouty, jakoś mi się nie podoba takie rozwiązanie. Zostawiam za to menu oraz breadcrumbs.
---------------------------------------------------------------------
"Never memorize what you can look up in books."
Albert Einstein
0

#3 User is offline   robikon 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 32
  • Joined: 17-October 11

Posted 17 October 2011 - 05:33 AM

Czyli gdy w swoim kontrolerze zdefiniuje "public $layout=" na layout column2.php to po nim poleci.
Zauważyłem też że w układzie 2 kolumn lewa wyświetla zawartość $content z kontrolera a prawa po Widget'ach. Co w przypadku np.: 3 kolumn - lewą kolumnę mam i prawą a jak upchnąć zawartość innego kontrolera do środkowej?
0

#4 User is offline   redguy 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 809
  • Joined: 02-July 10
  • Location:Central Poland

Posted 17 October 2011 - 05:54 AM

mozesz tez po prostu w kodzie akcji napisac:

$this->layout = 'column2';

red
0

#5 User is offline   sidewinder 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 218
  • Joined: 08-July 09
  • Location:Poland

Posted 17 October 2011 - 06:10 AM

To co wyświetla się w różnych kolumnach jest zdefiniowane w konkretnym layoucie i widoku. Tam nic nie jest "automatycznie". Z założenia architektury MVC w danym momencie może działać tylko jeden kontroler, wiec nie za bardzo rozumiem jak chcesz wyświetlić w jednej z kolumn akcję z innego kontrolera. Jeżeli masz elementy które mogą się powtarzać między różnymi stronami to masz do dyspozycji CClipWidget, jeżeli masz jakieś bardziej rozbudowane elementy to zrób sobie własny widget i wyświetl sobie tam gdzie potrzebujesz.
---------------------------------------------------------------------
"Never memorize what you can look up in books."
Albert Einstein
0

#6 User is offline   robikon 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 32
  • Joined: 17-October 11

Posted 17 October 2011 - 06:28 AM

View Postsidewinder, on 17 October 2011 - 06:10 AM, said:

Z założenia architektury MVC w danym momencie może działać tylko jeden kontroler, wiec nie za bardzo rozumiem jak chcesz wyświetlić w jednej z kolumn akcję z innego kontrolera. Jeżeli masz elementy które mogą się powtarzać między różnymi stronami to masz do dyspozycji CClipWidget, jeżeli masz jakieś bardziej rozbudowane elementy to zrób sobie własny widget i wyświetl sobie tam gdzie potrzebujesz.


Cenna uwaga, zapytałem bo przy zwykłym programowaniu php kiedy strona ma kilka kolumn to można powsadzać do nich zawartość innych plików poprzez zwykłe include().
0

#7 User is offline   aztech 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 206
  • Joined: 12-December 08
  • Location:Poland

Posted 18 October 2011 - 03:22 AM

Możesz też podejść do sprawy następująco:
1) definiuj w swoim głównym kontrolerze (domyślnie Controller) zmienne $left, $right,$content;
2) wypisz je (echo) w swoim pliku głównym layoutu w miejscach w których chcesz
3) w akcji kontrolera to co zwrócisz w return trafi do $content
4) możesz do zmiennych $left oraz $right przypisać zawartość następująco w każdej z akcji
$left = $this->renderParital('widok',array(/*zmienne*/,true);

Ostatni parametr w powyższym wywołaniu renderPartial ustawiony na true powoduje, że metoda zawartość zwróci zamiast ją wypisać.
I'm not complete idiot... some parts are missing!
0

#8 User is offline   robikon 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 32
  • Joined: 17-October 11

Posted 19 October 2011 - 01:48 AM

Thx, sprawdzę a jakże :rolleyes:
0

#9 User is offline   Mariusz W. 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 24
  • Joined: 15-December 11
  • Location:Poland/Warsaw

Posted 29 December 2011 - 03:09 AM

Jestem początkujący w yii (jak widać po ilości postów :-P ) ale wydaje mi się ze najlepiej stworzyć nowa klasę kontrolera np. LoginControler z akcja login.
W kolumnie renderujesz formularz, który wysyła się do akcji login wyżej wymienionego kontrolera, a po poprawnym logowaniu przekierowanie na jakąś podstronę :-)
Posted Image
Posted Image
0

#10 User is offline   sidewinder 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 218
  • Joined: 08-July 09
  • Location:Poland

Posted 29 December 2011 - 03:30 AM

Co masz na myśli pisząc widoczny ? Jeżeli chcesz, żeby się wyświetlał na każdej podstronie to wpakuj formularz do pliku layout'u bezpośrednio albo lepiej nawet zrób sobie z niego widget. W formularzu ustaw parametr $action na kontroler/akcje która zajmuje się logowaniem i po sprawie. Widget logowania powinien zapisywać returnUrl tak, żeby po zalogowaniu bądź wylogowaniu przekierować użytkownika do kontrolera / akcji na której wypełnił formularz logowania lub się wylogował.
---------------------------------------------------------------------
"Never memorize what you can look up in books."
Albert Einstein
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users