Smarty

Z PHPEdia.pl
Skocz do: nawigacji, wyszukiwania

Podstawy

Smarty - jest jednym z najpopularniejszych systemów do obsługi szablonów napisanych w PHP. Smarty możemy ściągnąć ze strony twórców, smarty.net, gdzie znajdziemy także szczegółową dokumentację dotyczącą instalacji oraz przykład tworzenia szablonów.

Opis

Smarty (jak i inne systemy szablonów) pozwala na oddzielenie warstwy prezentacji - graficznej struktury witryny (HTML, XHTML) od logiki aplikacji (PHP). Jest to przydatne, gdy nad projektem pracuje kilka osób (np. grafik, projektant baz danych, programista, itp.), ponieważ mogą oni swobodnie wykonywać swoją prace bez przypadkowej ingerencji w część witryny na której się nie znają (np. grafik na logice witryny). Stwarza to o wiele większe możliwości rozwoju serwisu niż w przypadku użycia standardowej metody połączenia kodu (X)HTML z PHP.

Zalety

Modyfikacja witryny

Smarty zostało skonstruowane tak, aby w łatwy sposób można było zmienić strukturę dokumentu (X)HTML bez zmiany przewidywanej w danym miejscu treści. Pozwala to na stosowanie różnych wersji witryny (wersji graficznych), zawierających tą samą treść.

Kompilacja szablonów

Cechą Smarty jest kompilowanie szablonów do PHP. Są one parsowane za pierwszym razem (bądź po każdej modyfikacji szablonu) do kodu PHP, który zostaje wykonany przy każdym wyświetleniu treści. Przeparsowany kod przechowywany jest w odpowiednim katalogu na serwerze.

Kompilacja przebiega automatycznie, w sposób niewidoczny dla programisty.

Cache'owanie wyjścia

Smarty nie tylko przechowuje szablony sparsowane do kodu PHP, ale pozwala także zapisywać sam wyjściowy (X)HTML, wraz z treścią - dzięki czemu przy wyświetlaniu szablon nie jest wykonywany. Efektem jest oczywiście przyspieszenie generowania stron, szczególnie tych bardziej złożonych.

Rozszerzanie funkcjonalności

Inną zaletą Smarty jest łatwa możliwość pisania pluginów do tej biblioteki, dzięki czemu możemy poszerzyć jej, i tak już duże, możliwości.

Wady

Krytycy Smarty uważają, że rolę języka opisu szablonów dobrze spełnia PHP, a system szablonów narzuca konieczność nauki nowego języka.

Zarzucić można też toporność - klasy Smarty mają łącznie ponad 150 kB, co przy zastosowaniu w małych projektach wydaje się być dużą liczbę.

Używanie Smarty

Instalacja

Po ściągnięciu archiwum zawierającego Smarty, należy je rozpakować. Po rozpakowaniu musimy przenieść zawartość folderu libs do katalogu z naszą witryną. Musimy także utworzyć takie foldery jak: templates (zawiera szablony), tempalates_c (przechowuje skompilowane szablony), cache (buforowanie wyjścia) i configs (pliki konfiguracyjne dla szablonów) i pamiętać o przyznaniu praw zapisu (chmod 777) katalogom przeznaczonym do zapisu (templates_c, cache).

Tworzenie szablonów

Szablony to nic innego jak zwykłe pliki HTML, tyle że zawierające specjalne znaczniki Smarty. Szablony zapisujemy do folderu templates (można to także zmienić w skrypcie). Rozszerzenie plików szablonów jest dowolne, choć zwyczajowo zwykle stosuje się .tpl bądź .html.

Przykładowy szablon

Oto bardzo prosty przykład szablonu: (szablon1.tpl)

Niepoprawny język.

Musisz wybrać język w następujący sposób: <source lang="html4strict">...</source>

Języki obsługiwane w podświetlaniu składni:

4cs, 6502acme, 6502kickass, 6502tasm, 68000devpac, abap, actionscript, actionscript3, ada, algol68, apache, applescript, apt_sources, arm, asm, asp, asymptote, autoconf, autohotkey, autoit, avisynth, awk, bascomavr, bash, basic4gl, bf, bibtex, blitzbasic, bnf, boo, c, c_loadrunner, c_mac, caddcl, cadlisp, cfdg, cfm, chaiscript, cil, clojure, cmake, cobol, coffeescript, cpp, cpp-qt, csharp, css, cuesheet, d, dcl, dcpu16, dcs, delphi, diff, div, dos, dot, e, ecmascript, eiffel, email, epc, erlang, euphoria, f1, falcon, fo, fortran, freebasic, freeswitch, fsharp, gambas, gdb, genero, genie, gettext, glsl, gml, gnuplot, go, groovy, gwbasic, haskell, haxe, hicest, hq9plus, html4strict, html5, icon, idl, ini, inno, intercal, io, j, java, java5, javascript, jquery, kixtart, klonec, klonecpp, latex, lb, ldif, lisp, llvm, locobasic, logtalk, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, magiksf, make, mapbasic, matlab, mirc, mmix, modula2, modula3, mpasm, mxml, mysql, nagios, netrexx, newlisp, nsis, oberon2, objc, objeck, ocaml, ocaml-brief, octave, oobas, oorexx, oracle11, oracle8, oxygene, oz, parasail, parigp, pascal, pcre, per, perl, perl6, pf, php, php-brief, pic16, pike, pixelbender, pli, plsql, postgresql, povray, powerbuilder, powershell, proftpd, progress, prolog, properties, providex, purebasic, pycon, pys60, python, q, qbasic, rails, rebol, reg, rexx, robots, rpmspec, rsplus, ruby, sas, scala, scheme, scilab, sdlbasic, smalltalk, smarty, spark, sparql, sql, stonescript, systemverilog, tcl, teraterm, text, thinbasic, tsql, typoscript, unicon, upc, urbi, uscript, vala, vb, vbnet, vedit, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xbasic, xml, xorg_conf, xpp, yaml, z80, zxbasic


<html>
<head>
<title>{$tytul}</title>
</head>
<body bgcolor="{$kolor}">
To jest nasz {$numer} przykładowy
szablon smarty.

Copyright (c) {$rok} php.pl
</body>
</html>

Jak widzimy jest to zwykły dokument HTML, w którym dodatkowo umieszczono znaczniki Smarty. Znaczniki te zapisujemy między ogranicznikami - standardowo są to nawiasy klamrowe: { i }. Zapis {$zmienna} spowoduje wyświetlenie zmiennej, której to wartość przypiszemy w skrypcie PHP - w naszym przykładzie: w {$tytul} będzie tytuł dokumentu, za {$kolor} podstawimy kolor tła, za ($numer} numer przykładowego szablonu ("pierwszy"), w {$rok} wstawimy aktualny rok.

Kod PHP: (index.php)

<?php
 
// załączamy klasą Smarty
include('Smarty.class.php');
 
// tworzymy obiekt szablonu
$smarty = new Smarty;
 
// przypisujemy zmiennym ich wartości
$tytul = "przykładowy tytuł strony";
$kolor = "red";
$numer = "pierwszy";
$rok = date("Y");
 
// przypisujemy wartości zmiennych do szablonu
$smarty->assign('tytul',  $tytul);
$smarty->assign('kolor', $kolor);
$smarty->assign('numer', $numer);
$smarty->assign('rok', $rok);
 
// i wyświetlamy szablon
$smarty->display('szablon1.tpl');
 
?>

Linki zewnętrzne