Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Smarty]szkielet strony, jak includować pliki itp.
robos85
post
Post #1





Grupa: Zarejestrowani
Postów: 466
Pomógł: 11
Dołączył: 21.09.2006
Skąd: Szczecin

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


Witam. Troszkę już się zapoznałem ze Smarty. Mam jakiś tam prosty skrypcik oparty o Smarty właśnie. Mam inny problem.
Do tej pory pisałem bez uzycia smarty a szablon dzieliłem na 3 główne pliki. head.php, foot.php i plik z główną zawartością.
Chciałbym dalej tak robić, lecz opierać wszystko na smarty. Przypuśćmy że mam pliki nagłówka i stopki zrobione już w smarty, i jak je teraz poprawnie dodawać do pliku głównego typu wiadomości, ogłoszenia itp....
Mam nadzieję, że rozumiecie o co mi chodzi. nie chcę w każdym pliku zaczynać od deklaracji html.... tylko podczepiać już gotowe pliki, w których już są wykonywane różne rzeczy,np w zależności od tego czy jest się zalogowanym, słowa kluczowe robione dynamicznie.

Czy jeżeli dam dołączenie
Kod
{include file='header.tpl'}
do pliku głównego czyli najpierw include headera.tpl, później zawartość pliku głównego i na koniec include foot.tpl - to kod php odpowiedzialny za te 2 pliki czyli np head.php i foot.php zostanie wykonany?

Chciałbym się dowiedzieć, jak to zrobić najlepiej, żeby później nie robić tego źle.

Z góry dzięki za odp.

Dodam, że pliki główne są w katalogu /templates, a pliki nagłówka i stopki w katalogu: /templates/includes.
Pliki php są w kat. głównym, a pliki nagłówka i stopki w katalogu/includes

Czy taki zapis jest "dobry":
header.php
  1. <?php
  2.  
  3. require_once('smarty/Smarty.class.php');
  4. $smarty = new Smarty;
  5. $smarty->template_dir = "templates/";
  6. $smarty->compile_dir ='smarty/templates_c/';
  7. $smarty->config_dir  = 'smarty/configs/';
  8. $smarty->cache_dir = 'smarty/cache/';
  9.  
  10. $tytul='Tytuł strony';
  11. $smarty -> assign('tytul', $tytul);
  12. $smarty->display('includes/header.tpl');
  13. ?>

header.tpl
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <title>{$tytul}</title>
  3. </head>


index.php
  1. <?php
  2.  
  3. require_once('includes/header.php');
  4.  
  5.  
  6. $smarty->assign('tytul', $tytul);
  7. $smarty->assign('test1', $test1);
  8.  
  9. // klikanie
  10. if(isset($_GET['id'])){
  11. switch ($_GET['id']) {
  12. case 1:
  13. $opcja=1;
  14. break;
  15. case 2:
  16. $opcja=2;
  17. break;
  18. case 3:
  19. $opcja=3;
  20. break;
  21. }
  22. }
  23. else{
  24. $opcja="Brak wybranej opcji.";
  25. }
  26. $smarty->assign('cyfra', $opcja);
  27.  
  28. //tablice
  29. $samochody = array(
  30. 'Ford', 'Opel', 'Fiat', 'BMW', 'Mercedes', 'Renault', 'Citroen', 'Volkswagen'
  31. );
  32. $smarty -> assign('samochody', $samochody);
  33.  
  34. //php dla if'ów
  35. if(isset($_GET['id'])) {
  36. $wyb_opcja=$_GET['id'];
  37. }
  38. $smarty -> assign('wyb_opcja', $wyb_opcja);
  39. //display
  40.  
  41.  
  42. $smarty->display('index.tpl');
  43. require_once('includes/footer.php');
  44.  
  45. ?>

index.tpl
  1. {include file='includes/header.tpl'}
  2. <p>Pierwszy tekst pogrubiony:<strong>{$test1|capitalize}</strong></p>
  3. <p><a href="index.php?id=1">1</a> <a href="index.php?id=2">2</a> <a href="index.php?id=3">3</a></p>
  4. <p>Cyfra zależy od kliknięcia: {$cyfra}</p>
  5. <p>Spis samochodów - tablica prosta:</p>
  6. <ul>
  7. {section name=typ loop=$samochody start=1 step=2}
  8. <li>{$smarty.section.typ.iteration} - {$samochody[typ]}</li>
  9. {/section}
  10. </ul>
  11. <p>Wybrana opcja: {if $wyb_opcja==1}1{elseif $wyb_opcja==2}2{elseif $wyb_opcja==3}3{else}0{/if}</p>
  12. {include file='includes/footer.tpl'}




W takim układzie header i footer się 2x wykonuje:/

Ten post edytował robos85 6.09.2008, 12:20:30
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 13)
Shili
post
Post #2





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

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


Nic dziwnego - wywołujesz je dwa razy.

Jak dwa razy wywołasz w php include(plik) to również jesteś zdziwiony, że masz to na ekranie dwa razy?

Na Twoim miejscu zrobiłabym to tak:
  1. <?php
  2.  
  3. require_once('includes/header.php');
  4.  
  5. // jakiś tam kod
  6.  
  7. require_once('includes/footer.php');
  8. $smarty->display('index.tpl');
  9. ?>

A w header i footer nie wywoływała smarty->display.
Go to the top of the page
+Quote Post
robos85
post
Post #3





Grupa: Zarejestrowani
Postów: 466
Pomógł: 11
Dołączył: 21.09.2006
Skąd: Szczecin

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


yhm, dzięki za wskazówkę:)

A co do mojego szablonu - takie tworzenie w smarty całego szkieletu jest ok?
Czy można top jakoś lepiej zrobić?
Go to the top of the page
+Quote Post
Shili
post
Post #4





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

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


Cytat
A co do mojego szablonu - takie tworzenie w smarty całego szkieletu jest ok?
Szkieletu czego? Wyglądu?

Jeśli się już zdecydowałeś na smarty (które jest wolne, ale ma zabójczo dobrą pomoc i jest po prostu rozpowszechnione), to tak - w samym wyglądzie strony (plikach .tpl) nie zaleca się już używania php. Po to masz na przykład instrukcje warunkowe, pętle i inne przydatne rzeczy, żeby wszystko było możliwe do osiągnięcia za pomocą smarty i języków "po stronie przeglądarki" (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
robos85
post
Post #5





Grupa: Zarejestrowani
Postów: 466
Pomógł: 11
Dołączył: 21.09.2006
Skąd: Szczecin

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


yhm, a co to znaczy wolne. Czy są jakieś lepsze systemy oddzielania htmla od php?
Jeżeli tak to jakie:). Ale czytałem o smarty i wszyscy zachwalają.
Go to the top of the page
+Quote Post
Shili
post
Post #6





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

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


Smarty jest mocno rozbudowane, obiektowe i tak dalej. To znaczy proste do modyfikacji, dodawania własnych funkcji i modyfikatorów, bardzo wygodne w użytkowaniu, ale szybkością nie zachwyca.

Nie znaczy to oczywiście, że każda strona będzie się ładować latami, ale jednak na wydajności trochę straci.

Najszybsze są szablony macierzyste - czyli zwykłe php, z tym że w plikach z htmlem bardzo okrojone. Są smarty, open power template, można wszystko robić za pomocą xml i xslt i wielu, wielu innych. Uważam jednak, że tak czy siak trzeba choćby podstawy smartów znać - bardzo często są wykorzystywane, głównie w projektach nad którymi pracuje kilka osób.

Uważasz, że smarty są ok - nie ma sprawy, rób w smarty. Jednak warto przy tym wszystkim zdawać sobie sprawę, że będzie to sporo wolniejsze od czystego phpa. I tyle (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
robos85
post
Post #7





Grupa: Zarejestrowani
Postów: 466
Pomógł: 11
Dołączył: 21.09.2006
Skąd: Szczecin

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


Yhm, tylko skoro jest wolna, to czemu tak dużo programistów z niej korzysta?
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




przesadzają z tą powolnością. Smarty kompiluje swoje szablony do czystego kodu php wiec ostatecznie to i tak kod php sie wykonuje a nie szablon smartiego.
Oczywiscie w fazie produkcji nalezy ustawic by zawsze kompilowal szablon, ale gdy sie juz aplikacje wystawi na serwer jako ostateczną wersje to nalezy ustawic by kompilowal tylko raz a kazde nastepne odwolanie bylo juz do kodu php.

Ze smarty jak z obiektowką: niby spowalnia ale i tak wszyscy uzywaja. Owszem, każde dodanie nowych rzeczy, bajerow spowalnia wykonywanie skryptu, ale znacznie przyspiesza jego tworzenie i jego czytelnośc. Coś za coś.
Go to the top of the page
+Quote Post
robos85
post
Post #9





Grupa: Zarejestrowani
Postów: 466
Pomógł: 11
Dołączył: 21.09.2006
Skąd: Szczecin

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


Cytat(nospor @ 6.09.2008, 16:34:53 ) *
przesadzają z tą powolnością. Smarty kompiluje swoje szablony do czystego kodu php wiec ostatecznie to i tak kod php sie wykonuje a nie szablon smartiego.
Oczywiscie w fazie produkcji nalezy ustawic by zawsze kompilowal szablon, ale gdy sie juz aplikacje wystawi na serwer jako ostateczną wersje to nalezy ustawic by kompilowal tylko raz a kazde nastepne odwolanie bylo juz do kodu php.


A jak jest z moim przykładem? Poprawnie? Bo nie wiem gdzie się takie coś ustawia
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
A jak jest z moim przykładem? Poprawnie?
Pytasz oco? O szablon? No ten na poczatku to byl zly ale nie wiem jak masz teraz bo Shili pare poprawek ci zarzuciła.

Cytat
Bo nie wiem gdzie się takie coś ustawia
To na serwerze by nie kompilowal?
  1. <?php
  2. $smarty->force_compile = ...
  3. $smarty->compile_check = ...
  4. ?>

Doczytaj sobie co tam wstawic by dzialo sie co chcesz (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Shili
post
Post #11





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

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


Cytat
przesadzają z tą powolnością.
Smarty jest jednym z wolniejszych jeśli chodzi o szablony php. Nigdzie nie twierdzę, że jest zły, trzeba to jednak brać czasem pod uwagę. A już szczególnie trzeba o tym wiedzieć, jeśli się chce używać moim zdaniem (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Choćby dlatego, że przy wizytówce która ma wszystkiego 5 podstron nie opłaca się dodanie smartów - są lepsze rozwiązania. I w tym przypadku nawet na czytelności niewiele się traci.
Go to the top of the page
+Quote Post
grzanka
post
Post #12





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 6.09.2008

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


Poczytaj sobie tą dokumentację: http://www.rzseattle.org/docs/smartypl/ . Jest po polsku i dość przystępnie napisana
Go to the top of the page
+Quote Post
nospor
post
Post #13





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Smarty jest jednym z wolniejszych jeśli chodzi o szablony php

Ale mowisz juz o sytuacji gdy smarty ma juz kod w postaci czystego php? A co tam jest wowczas wolniejsze? Przeciez szablonu juz nie parsuje.
Jesli jednak mowisz wlasnie o tym to jakies bencharki masz moze?
Go to the top of the page
+Quote Post
robos85
post
Post #14





Grupa: Zarejestrowani
Postów: 466
Pomógł: 11
Dołączył: 21.09.2006
Skąd: Szczecin

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


Cytat(nospor @ 6.09.2008, 18:46:35 ) *
Pytasz oco? O szablon? No ten na poczatku to byl zly ale nie wiem jak masz teraz bo Shili pare poprawek ci zarzuciła.

To na serwerze by nie kompilowal?
  1. <?php
  2. $smarty->force_compile = ...
  3. $smarty->compile_check = ...
  4. ?>

Doczytaj sobie co tam wstawic by dzialo sie co chcesz (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)


W tym moim pierwszym kodzie co podałem wprowadziłem tylko zmiany, które podała Shili i teraz działa, tylko pytanie czy to co zrobiłem jest optymalne w miarę.
Co do $compile_check doczytałem, że jest domyślnie na TRUE i taką wartość należy ustawić podczas projektowania, gdy szablon nie jest skończony. Na FALSE należy nastawić gdy szablon jest skończony i gotowy do użytku publicznego.

A co do $force_compile to jest domyślnie na FALSE. Jeżeli jest TRUE wymusza rekompilację szablonu i powinno być na true podczas projektowania - podobnie jak funkcja poprzednia.

Dobrze rozumuję? Jeżeli tak muszę pamiętać, aby $compile_check ustawić na false po opublikowaniu gotowej strony:)


btw. im więcej czytam o smarty, tym bardziej czytelne, łatwiejsze i "użyteczne" się staje:)

Ten post edytował robos85 6.09.2008, 20:06:53
Go to the top of the page
+Quote Post

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: 3.10.2025 - 04:09