Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Szablon w szablonie
jastu
post
Post #1





Grupa: Zarejestrowani
Postów: 382
Pomógł: 0
Dołączył: 29.11.2005
Skąd: :jestem();

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


Chciałbym zrobić tak :
- mam sablon strony głównej w której przechowuję szkielet strony (divy i kolumny - jako główny widok).W szablonie tym zawartość każdego diva to zmienna (do której przesyłamy dane jak w szablonach).Tymi zmiennymi miały by być inne szablony (tworzone przez new Smarty).

Czy jest to możliwe do zrealizowania ? Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Cysiaczek
post
Post #2





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




@nospor - różnica jes faktycznie niewielka, jeśli patrzysz na wszystko od strony przykładu, który podałem. Nie jestem bez winy - podalem mylący przykład, co pewnie wynika również z mojego zaspania (IMG:http://forum.php.pl/style_emoticons/default/laugh.gif)

Ideą nie jest tu includowanie plików szablonów, tylko rezulatatów wykonania akcji . Rezultatem może być widok o nazwie 'hello.tpl', ale również 'error.tpl'. Zatem prawidłowe odwołanie przez metodę get() powinno żądać rezultatu.

np.

Akcja - wyybiea sobie templatke z zeleżności od $ok
  1. <?php
  2. function sayHello(){
  3. $ok=$this->params->post->user
  4. if ($ok){
  5. $this->template='hello.tpl';
  6. }
  7. else{
  8. $this->template='error.tpl';
  9. }
  10. }
  11. ?>


W widoku (w jego częsci pierwsze - logicznej) odowłujemy się poprzez:
  1. <?php
  2. $view->get('sayHello');
  3. ?>


Oczywiście wiele zależy od implementacji warstwy prezentacyjnej.
W czym moim zdaniem jeszcze jest lepsze? Ano. Tak jak wspomniałem - można w banalny sposób użyć kilku róznych systemów szablonów, co jest nieosiiągalne poprzez
  1. {include file="plikzmenu.tpl"}

Nie jest, bo tu z założenia mamy Smarty

Natomiast popatrz na taką prostą modyfikację akcji sayHello()

  1. <?php
  2. function sayHello(){
  3. $ok=$this->params->session->status; //status zalogowania
  4. if ($ok){
  5. $this->setTemplate('hello.tpl', 'smarty'); // dla tego szablonu użyj silnika smarty
  6. }
  7. else{
  8. $this->setTemplate('error.tpl', 'php'); // dla tego użyj tylko php
  9. }
  10.  
  11. $this->data->user=$this->params->session->user; // string - nick usera
  12. }
  13. ?>


I teraz:
hello.tpl - renderowany przez smarty
  1. Cześć {$user}


error.tpl - renderowany przez PHP używające zwykłego include()
  1. Wystąpił błąd - brak użytkownika <?php print $user; ?>


Przykład ten dalej jest obarczony wieloma błędami. np. wybór templatki w akcji jest złym rozwiązaniem.W prawdziwym systemie lepiej odseparować nawet to.
Ja to robię w pliku XML
<view engine="smarty">nazwa_pliku</view>

Wszystkie te operacje powinny być dla użytkownika frameworka przezroczyste. Za pomocą prostych tagów, czy innej konfiguracji powinien wybrać sobie silnik renderowania i po prostu pisać kod. Resztę robi system.

Tak wygląda przykładowa struktura plików, gdzie katalogi reprezentują akcje a plikiw w katalogach to dostępne szablony.
Obrazek

Jednej rzeczy ciągle jeszcze nie rozwiązałem - tzw. skórek - mam pomysły, ale nie jestem do nich przekonany.

uff : )

Pozdrawiam

Ten post edytował Cysiaczek 6.06.2007, 09:15:18
Go to the top of the page
+Quote Post

Posty w temacie


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: 8.10.2025 - 09:59