Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> System szablonów - parę pytań
krzysiek9394
post
Post #1





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 4.09.2009

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


Witam, mam pare pytań o tworzeniu własnego systemu szablonów.

1. Załóżmy że mamy dwa pliki szablonów:
  1. <title>{tytul}</title>
  2. </head>
  3. <div id='header'>
  4. <img src='header.png' />
  5. </div>
  6. <div id='panele'>
  7. <div id='menu'>
  8. Menu
  9. </div>
  10. <div id='panel1'>
  11. Panel 1
  12. </div>
  13. </div>
  14. <div id='zawartosc'>
  15. {zawartosc}
  16. </div>
  17. <div id='stopka'>
  18. {stopka}
  19. </div>
  20. </body>
  21. </html>


i drugi:

  1. <title>{tytul}</title>
  2. </head>
  3. {include header.tpl}
  4. {include panele.tpl}
  5. <div id='zawartosc'>
  6. {zawartosc}
  7. </div>
  8. {include stopka.tpl}
  9. </body>
  10. </html>


(w tym drugim pliki typu header.tpl czy panele.tpl zawierają divy podane w pierwszym pliku)

I tu kieruję pierwsze pytanie: która z metod jest lepsza (wydajność, porządek).
Pytanie drugie: czy jest sens robienia plików .tpl do każdego pliku .php? np.
  1. index.php
  2. index.tpl
  3. tresc.php
  4. tresc.tpl
  5. uzytkownicy.php
  6. uzytkownicy.tpl
  7. ustawienia.php
  8. ustawienia.tpl
  9. newsy.php
  10. newsy.tpl
  11. artykuly.php
  12. artykuly.tpl

itd. Czy nie wprowadzi to zbyt dużego bałaganu w plikach? Jeśli tak to jakie inne wyjście polecacie?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
Zyx
post
Post #2





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


Ad. 1 - zależy, czego potrzebujesz. Jeśli tego nagłówka potrzebujesz też w innym miejscu, to można rozważyć drugi wariant, w przeciwnym wypadku nie ma sensu. Zresztą statyczny include jest średnio przydatny.

Ad. 2 - a jak niby sobie to inaczej wyobrażałeś? Jeśli nie chcesz bałaganu, to wpakuj to w osobny katalog i tyle.

Nawiasem mówiąc, polecam lekturę: http://www.zyxist.com/pokaz.php/uzyteczne_systemy_szablonow


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
Go to the top of the page
+Quote Post
thek
post
Post #3





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




To, czy robić plik.php i plik.tpl zależy tylko od jednego -> czy dane w tpl są całkowicie statyczne czy nie. Plik.php można przyrównać do kontrolera a plik.tpl do widoku najprościej ujmując. Jeśli więc w widoku nie masz żadnych danych dynamicznych tylko plain-text to robienie dla niego plik.php tylko po to, by móc wywołać plik.tpl mija się z celem. Samo stosowanie php i tpl jest jak najbardziej sensowne, gdyż oddzielasz od siebie strukturę strony od operacji logicznych. Po to jest widok by wyświetlać już przetworzone dane i nic więcej. Może on jedynie minimalnie się zmieniać w zależności od tych danych (jakieś if czy pętle winksmiley.jpg ), ale nic ponadto. Od pobierania, obróbki danych masz plik php. Tpl ma to tylko wyświetlić. Dzięki temu nie musisz sie martwić rzeczami w stylu: "Do licha... Gdzie pomiędzy tym wszystkim wyświetlam tę konkretną daną i co jeśli zmienię coś". Dzięki temu interfejs strony jest w dużym stopniu niezależny od stojącego za nim silnika. Ja niestety pracuję w firmie, gdzie większość serwisów to jeszcze stare php4 i muszę grzebać się w kodzie przez szukanie w jakiej pętli gdzie jest wywoływane echo wyświetlające coś tam i jeszcze porozrzucana całość po pliku w niewiadomym miejscu, bo jest to funkcja wywołana kaskadowo przez kilka funkcji i przyjmująca jako parametry jakieś globale. To jest tragedia w której trzeba spędzić kilka godzin przynajmniej by połapać się co jest gdzie, zwłaszcza, że nazewnictwo plików w stylu srodek1.php, srodek2a.php, srodek3.php to naprawdę "przyjemność". Jedyny plus jest taki, że szef już ulega narzekaniom działu IT (czyli moim i kumpla winksmiley.jpg ) i wszystkie serwisy docelowo będą przepisywane na obiektówkę w php5. Zejdzie nam jeszcze w tej firmie jak nic kawał czasu zanim bazy przekonwertujemy, napiszemy od zera layouty, administracje itp smile.gif No ale po naszej zabawie serisy będa już tylko wprowadzały funkcjonalności jako proste moduły, a nie grzebanie się i poprawianie ze 20 plików naraz i jeszcze liczyć na to, że jedna zmiana w pliku X nie spapra czegoś w pliku Y i Z o czym dowie sie człowiek dopiero po fakcie, bo nie wiedział, że one też czegoś z pliku X używały winksmiley.jpg

EDIT: Ta tyrada była tylko po to, byś mógł docenić sensowność systemu szablonów i tego jak powinny wyglądać.

Ten post edytował thek 11.09.2009, 15:23:47


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
krzysiek9394
post
Post #4





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 4.09.2009

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


Cytat(Zyx @ 11.09.2009, 16:15:00 ) *
Ad. 1 - zależy, czego potrzebujesz. Jeśli tego nagłówka potrzebujesz też w innym miejscu, to można rozważyć drugi wariant, w przeciwnym wypadku nie ma sensu. Zresztą statyczny include jest średnio przydatny.


A zakładając że mamy powiedzmy pliki panelu admina (z 18 plików). I mając .tpl bazujące na pierwszym przykładzie chce zmienić nazwe pliku nagłówka i załóżmy dodać nowy panel. I co, i mam w każdym z tych 18 plików zmieniać nazwe pliku headera i dodawać nowego diva od panelu?
Go to the top of the page
+Quote Post
Zyx
post
Post #5





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


Nie - przeczytaj proszę podany przeze mnie link. Po prostu stworzyłeś sobie zbyt prosty system szablonów i właśnie widzisz, że pokonuje Cię dość prosty problem. Jednym z ograniczeń jest m.in. niemożność wczytania nazwy pliku do dołączenia ze zmiennej szablonu.


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
Go to the top of the page
+Quote Post
krzysiek9394
post
Post #6





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 4.09.2009

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


można to zrobić tak:
  1. <div id='header'>
  2. <img src='{$header_adres}' />
  3. </div>

ale czy nie ma jakiegoś lepszego sposobu? tamtego artykułu jakoś nie trawię

EDIT: a czemu ten pomysł z include jest zły?

odświeżam

Ten post edytował krzysiek9394 11.09.2009, 17:23:28
Go to the top of the page
+Quote Post
bim2
post
Post #7





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

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


A jaki miałby być lepszy sposób? Nie widzę innej możliwości.


--------------------
Go to the top of the page
+Quote Post
krzysiek9394
post
Post #8





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 4.09.2009

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


no ja chyba też haha.gif a mam jeszcze pytanie o pętle. czy jest sens robienia pętli t.j:
  1. {foreach $tablica as $zmienna }
  2. {while $x !== $y}
  3. {for $x<3, $x++}

i podstawiania tych danych pod pętle PHP?
Go to the top of the page
+Quote Post
bim2
post
Post #9





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

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


  1. {foreach=zmienna}
  2. <li>{$zmienna}</li>
  3. {/foreach}

Ja tak robie :]


--------------------
Go to the top of the page
+Quote Post
krzysiek9394
post
Post #10





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 4.09.2009

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


a inne pętle?
Go to the top of the page
+Quote Post
bim2
post
Post #11





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

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


A w templatkach potrzebujesz jakiś innych?


--------------------
Go to the top of the page
+Quote Post
krzysiek9394
post
Post #12





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 4.09.2009

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


Jakby tak pomyśleć to na razie nie haha.gif wielkie dzięki temat do zamknięcia
Go to the top of the page
+Quote Post
Zyx
post
Post #13





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


Bo zamiast tworzyć nowy szablon za każdym razem, gdy masz inny zestaw paneli, możesz ładować dynamicznie te, które potrzebujesz. I nagle okazuje się, że nie potrzebujesz nagłówka przenosić do osobnego pliku.

Kod
<html>
<head>
<title>{tytul}</title>
</head>
<body>
<div id='header'>
     <img src='header.png' />
</div>
<div id='panele'>
     {foreach $panele as $panel}
     <div id='{$panel.id}'>
          {include $panel.file}
     </div>
     {/foreach}
</div>
...


Aby odpowiedzieć na kolejne pytanie, spróbuję ogólnie streścić ideę tekstu, który Ci podsunąłem i którego nie wiedzieć czemu, nie trawisz. Robisz system szablonów, zatem aby nadawał się on do użytku, musi oferować odpowiednie możliwości, gdyż inaczej polegnie on na najprostszej rzeczy. Takie elementarne cegiełki, które są właściwie niezbędne, to np. instrukcje warunkowe i właśnie pętle, o które się pytasz. Tak więc pytanie nie brzmi: "czy powinno się te pętle dodawać" tylko "dlaczego ich jeszcze nie zaimplementowałeś".

OK, masz już system szablonów z pętlami i tego typu bajerami. I odpowiedz sobie teraz na kolejne pytania:

1. Skoro doszedłeś do takiego poziomu, to czy nie lepiej było wykorzystać jakiś gotowy system, który oferował takie coś od ręki?
2. Czym się te Twoje szablony różnią od pisania w czystym PHP? Chyba jedynie tym, że masz klamerki zamiast <?php ... ?>, bo jedną połowę rzeczy robisz dokładnie tak samo, jak w PHP, a drugą robisz 2 razy dłużej, bo sobie nie możesz pomóc funkcjami czy obiektówką. Ergo, władowałeś kupę pracy tylko po to, by się ograniczyć smile.gif.

Jeśli piszesz system szablonów, by się czegoś nauczyć, to OK, ale jeżeli myślisz o poważnym zastosowaniu, to jest to ślepa uliczka. Żeby taki system faktycznie pomagał, musi się niestety wyróżniać czymś więcej, niż zastąpieniem <?php ... ?> klamerkami, a "to coś" już nie jest tak łatwe do wymyślenia, o implementacji nie wspominając.


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
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: 22.08.2025 - 11:01