![]() |
![]() ![]() |
![]() |
![]()
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: i drugi: (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.
itd. Czy nie wprowadzi to zbyt dużego bałaganu w plikach? Jeśli tak to jakie inne wyjście polecacie? |
|
|
![]()
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 |
|
|
![]()
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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 31 Pomógł: 0 Dołączył: 4.09.2009 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. 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? |
|
|
![]()
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.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 31 Pomógł: 0 Dołączył: 4.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
można to zrobić tak:
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 |
|
|
![]()
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.
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 31 Pomógł: 0 Dołączył: 4.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
no ja chyba też (IMG:style_emoticons/default/haha.gif) a mam jeszcze pytanie o pętle. czy jest sens robienia pętli t.j:
i podstawiania tych danych pod pętle PHP? |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 873 Pomógł: 152 Dołączył: 9.04.2006 Skąd: Berlin Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 31 Pomógł: 0 Dołączył: 4.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
a inne pętle?
|
|
|
![]()
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?
|
|
|
![]()
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 (IMG:style_emoticons/default/haha.gif) wielkie dzięki temat do zamknięcia
|
|
|
![]()
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ć (IMG:style_emoticons/default/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. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 3.10.2025 - 23:53 |