Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> MVC templates
Szymciosek
post
Post #1





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

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


Witam, pisałem ostatnio o zmianach widoków itd, powiedziano mi, że źle robię, później wprowadziłem poprawkę do oceny: http://dl.dropbox.com/u/21239599/mvc3.rar czy już jest ok.
Dalej podpowiedziano mi, że trochę, źle robię z widokami i dobrze byłoby zastosować template, ale teraz pytanie jak to ma działać ?

Na tą chwilę jak można zauważyć w paczce z mojego dropboxa w index.php mam ładowanie kontrolera, który ładuje mi dalej widoki, w widokach mam wszystko wyświetlane co potrzebuję, ale jaki sens jest powtarzania 15 razy kodu związanego z header/footer skoro mogę zrobić chyba jakiś szablon i ładować za pomocą MVC dane/treści do tego szablonu.
Tak jak wspomniałem, wszystko zaczyna się w index.php
index > kontroler > model > widok, nie ma tutaj mowy o szablonie

zrobiłem sobie do tego plik config.php, który zawiera
  1. $template = 'templates/light_template.php';


jest on includowany w index.php, myślę, że to tutaj powinno odbyć się załadowanie konkretnego szablonu... ale co dalej ? teraz w index mam ładowanie kontrolera, a on chyba musi być załadowany w danym template ?
Jak w template dostać się do zmiennych z danego widoku skoro początkowo one są teraz ładowane w index ?

Struktura katalogów:
- controllers
- models
- templates (katalog odpowiedzialny za templates, które chcę ładować)
- views
- config.php
- index.php

W sumie to prosiłbym o jakieś naprowadzenie na to jak korzystać z takich templates.
Z góry dziękuję.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
droslaw
post
Post #2





Grupa: Zarejestrowani
Postów: 98
Pomógł: 33
Dołączył: 10.05.2011
Skąd: Krak

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


Przeczytałem Twój post, ale kod mógłbyś wstawić w jakieś lepiej dostępne miejsce.
Szablonu nie ładuje się w index.php, kontrolera nie ładuje się w szablonie.
Pytasz jak przekazać dane do szablonu. Najlepiej napisać do tego odpowiednią klasę. Np. taką:
  1. class Template
  2. {
  3. protected $_tplPath;
  4. protected $_data = array();
  5.  
  6. public function __construct($tplPath)
  7. {
  8. $this->_tplPath = $tplPath;
  9. }
  10.  
  11. public function __toString()
  12. {
  13. return $this->render();
  14. }
  15.  
  16. public function __get($key)
  17. {
  18. return $this->_data[$key];
  19. }
  20.  
  21. public function __set($key, $value)
  22. {
  23. $this->_data[$key] = $value;
  24. }
  25.  
  26. public function render()
  27. {
  28. require($this->tplPath);
  29. $content = ob_get_clean();
  30. return $content;
  31. }
  32. }

Patrz na metodę render. Jeśli ładujesz szablon w metodzie widzi on wszystkie zmienne jakie są dostępne w tej metodzie. Możesz odnosić się do danych przez $this.
Dlatego zadziała coś takiego(kod layout.phtml):
  1. <!-- kod -->
  2. <title><?=$this->title?></title>
  3. <!-- kod strony nagłowek itp. -->
  4. <?=$this->content?>
  5. <!--dalszy kod ?>

Powiedzmy że masz też szablon news-list.phtml:
  1. <?foreach($this->newsList as $newsContent){
  2. echo $newsContent;
  3. }
  4. ?>

Coś takiego mógłbyś gdzieś w kontrolerze:
  1. //Teraz jeśli wyświetlasz liste wiadomości tworzysz dwie instancje szablonów
  2. $newsTpl = new Template('news-list.phtml');// szablon odpowiedzialny za sekcję z wiadomościami.
  3. $newsTpl->newsList = $newsList; //$newsList to jakaś tablica z newsami pobrana z modelu
  4. $layout = new Template('layout.phtml'); // szablon odpowiedzialny za layout
  5. $layout->title = 'Ostatnie wiadomości';
  6. $layout->content = $newsTpl;
  7. echo $layout; //wyświetli gotowy kod.

Metoda __toString w klasie Template pozwala jej instancje traktować jak stringi, prze co możliwe jest wyświetlanie szablonów wewnątrz inny przez echo.
Mógłbyś też wybrać inną drogę i stworzyć jedną instancję Template. Dalej w szablonach(nie klasie) dodawać inne szablony za pomocą require(). Ale wtedy wszystkie szablony miałyby wspólne dane, co według mnie spowodowałoby niepotrzebny bałagan.
Mógłbyś nawet załadować plik szablonu w akcji kontrolera, działałoby, ale to dopiero byłby sajgon.
To tylko takie poglądowe rozwiązanie i musisz jeszcze sporo pokombinować i poczytać. Np. tworzenie i wyświetlanie layouta nie powinno się odbywać w akcji kontrolera.


Ten post edytował droslaw 28.06.2012, 17:30:24
Go to the top of the page
+Quote Post
Szymciosek
post
Post #3





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

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


1) Czemu dropbox jest zły ? Skoro z mojego konta idą tylko te dane, które udostępnię ?
2) Czemu kontrolera nie tworzyć w index ? Co z tym nie tak ? Skoro przecież to właśnie w index wszystko się zaczyna
3) Czyli template w takim przypadku jakim opisałem powinien być bardziej klasą php niżeli samym plikiem html z wstawkami php w odpowiednim miejscu ? Czyli PHP (Klasa) + HTML (Wstawki)

Muszę nad tym pomyśleć, znasz jakieś przykłady z prawidłowym (wg Ciebie) wykorzystaniem MVC i template ?
Go to the top of the page
+Quote Post
droslaw
post
Post #4





Grupa: Zarejestrowani
Postów: 98
Pomógł: 33
Dołączył: 10.05.2011
Skąd: Krak

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


1) Zły jest w tym wypadku rar. Wolałbym od razu zobaczyć źródła.
2) Ja pisałem że nie można ładować szablonu w index.php. Kontroler(w najprostszym przypadku) mógłby być. Ja tworzę odpowiednie kontrolery w Dyspozytorze.
3) Nie pisałem że szablon to klasa, pisałem że to może być plik z wstawkami php. Ale tem plik powinien być ładowany przez klasę, która udostępni mu dane. Dodatkowo taka klasa powinna mieś metodę __toString, przez co jej instancja może być traktowana jak napis i dzięki temu łatwo dołączana wewnątrz innych szablonów.

Najlepiej przeglądać kod różnych frameworków. Czytać jakieś artykuły na ten temat. W naszym języku raczej tego wiele nie będzie.


Ten post edytował droslaw 28.06.2012, 17:47:58
Go to the top of the page
+Quote Post
Szymciosek
post
Post #5





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

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


Masz jakieś przykłady z takim czymś ?
Go to the top of the page
+Quote Post
droslaw
post
Post #6





Grupa: Zarejestrowani
Postów: 98
Pomógł: 33
Dołączył: 10.05.2011
Skąd: Krak

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


Poszukaj w google pod hasłem mvc tutorial.
Bardzo krótko i w prosty sposób[pl]
Też po polsku, autor zajmuje m.inn. Open Power Template
Tu jest trochę więcej informacji [en]
Poszukaj więcej porównuj, pisz i poprawiaj swój kod.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 19.08.2025 - 20:33