Smarty wymaga serwera sieciowego, na którym zainstalowany jest PHP 4.0.6 lub nowszy.
Zainstaluj pliki bibliotek Smarty znajdujące się w katalogu /libs/ dystrybucji. Są to pliki PHP których NIE POWINENEŚ zmieniać. Są one wydzielone spośród wszystkich aplikacji i zostają zaktualizowane tylko wtedy kiedy zaktualizujesz nową wersje Smarty.
Example 2.1. Pliki bibliotek Smarty
Smarty.class.php Smarty_Compiler.class.php Config_File.class.php debug.tpl /internals/*.php (wszystkie) /plugins/*.php (wszystkie z nich, nalezy je tak zlokalizować a by były bezpieczne - może twoja strona potrzebuje osobnego katalogu )
Smarty używa stałej PHP o nazwie SMARTY_DIR która jest ścieżką systemową katalogu z bibliotekami Smarty. Jeżeli twoja aplikacja potrafi znaleźć plik Smarty.class.php, zazwyczaj nie musisz ustawiawiać SMARTY_DIR. Natomiast, jeżeli Smarty.class.php nie znajduje się w twoim include_path, lub nie dostarczysz ścieżki absolutnej do jego klasy w twojej aplikacji, wtedy musisz zdefiniować SARTY_DIR ręcznie. SMARTY_DIR musi zawierać ostatni slash.
Oto jak tworzyć przykładowy skrypt PHP ze Smarty:
Example 2.2. Tworzenie instancji Smarty
<?php
// NOTE: W Smarty pierwsza litera to duże 'S'
require_once('Smarty.class.php');
$smarty = new Smarty();
?> Spróbuj uruchomić powyższy skrypt. Jeśli w rezultacie zostanie wyświetlony błąd mówiący o tym, że nie można znaleźć pliku Smarty.class.php spróbuj zrobić jedną z następujące rzeczy:
Example 2.3. Ręczne ustawienie SMARTY_DIR
<?php
// dla *nix (pamiętaj o dużym 'S')
define('SMARTY_DIR', '/usr/local/lib/php/Smarty-v.e.r/libs/');
// dla windows
define('SMARTY_DIR', 'c:/webroot/libs/Smarty-v.e.r/libs/');
// wersja działająca zarówno na *nix jak i windows
// Przy założeniu że Smarty znajduje się w katalogu 'includes/' dla konkretnego skryptu
define('SMARTY_DIR',str_replace("\\","/",getcwd()).'/includes/Smarty-v.e.r/libs/');
require_once(SMARTY_DIR . 'Smarty.class.php');
$smarty = new Smarty();
?> Example 2.4. Dostarczenie ścieżki absolutnej do pliku biblioteki
<?php
// dla *nix (pamiętaj o dużym 'S')
require_once('/usr/local/lib/php/Smarty-v.e.r/libs/Smarty.class.php');
// dla windows
require_once('c:/webroot/libs/Smarty-v.e.r/libs/Smarty.class.php');
$smarty = new Smarty();
?> Example 2.5. Dodać katalog biblioteki do php_include path
<?php
// Zmień swój plik php.ini, dodaj katalog biblioteki Smarty
// do include_path, następnie zrestartuj serwer.
// Wtedy następujący kod powinien zadziałać:
require_once('Smarty.class.php');
$smarty = new Smarty();
?> Teraz kiedy pliki bibliotek są na swoim miejscu, czas w twoej aplikacji ustawić katalogi Smarty.
Smarty wymaga czterech katalogów, których domyslne nazwy to 'templates/', 'templates_c/', 'configs/' i 'cache/'.
Każda z tych definiowalnych własności klasy Smarty: $template_dir , $compile_dir, $config_dir i $casche_dir dokładnie odpowiada każdemu katalogowi. Zalecane jest aby rozdzielić te katalogi dla każdej aplikacji używającej Smarty.
Upewnij się, że znasz twój główny katalog dokumentów na twoim serwerze. W naszym przykładzie, główny katalog to "/web/www.mydomain.com/docs/". Katalogi te muszą być dostępne dla biblioteki Smarty, i jednocześnie zawsze niedostępne bezpośrednio z poziomu przeglądarki. Dlatego aby uniknąć obaw związanych z bezpieczeństwem, rekomendowane jest umieszczenie tych katalogów w katalogu poza katalogiem głównym.
Dla przykładu instalacji, będziemy ustawiać otoczenie Smarty dla aplikacji księgi gości. Wybraliśmy tą aplikacje tylko w celu zaproponowania konwencji nazywania katalogów . Możesz używać tego samego otoczenia dla każdej aplikacji zmieniając tylko "guestbook" na nazwę twojej aplikacji. Umieścimy katalogi Smarty w "/web/www.mydomain.com/smarty/guestbook/".
Będziesz potrzebował jednego pliku pod katalogiem głównym, i to jest skrypt otwierany przez przeglądarkę. Nazwiemy nasz skrypt "index.php" i umieścimy go w podkatalogu katalogu głównego nazwanym "/guestbook/" .
Dogodnie jest tak skonfigurować serwer aby "index.php" było domyślnym indexem katalogu, więc jeśli wpiszesz "http://www.mydomain.com/guestbook/", to skrypt będzie wykonany bez wpisania "index.php" w adresie URL. W Apache możesz ustawić taką opcję przez dodanie "index.php" na końcu ustawień DirectoryIndex (oddzielaj każdy wpis spacją).
Spójrzmy na obecną strukturę plików:
Example 2.6. Przykład struktury plików
/usr/local/lib/php/Smarty-v.e.r/libs/Smarty.class.php /usr/local/lib/php/Smarty-v.e.r/libs/Smarty_Compiler.class.php /usr/local/lib/php/Smarty-v.e.r/libs/Config_File.class.php /usr/local/lib/php/Smarty-v.e.r/libs/debug.tpl /usr/local/lib/php/Smarty-v.e.r/libs/internals/*.php /usr/local/lib/php/Smarty-v.e.r/libs/plugins/*.php /web/www.example.com/smarty/guestbook/templates/ /web/www.example.com/smarty/guestbook/templates_c/ /web/www.example.com/smarty/guestbook/configs/ /web/www.example.com/smarty/guestbook/cache/ /web/www.example.com/docs/guestbook/index.php
Smarty będzie potrzebował dostępu (zapis) do $compile_dir i $casche_dir, więc upewnij się, że użytkownik serwera może zapisywać w tych katalogach. Przeważnie jest to użytkownik "nobody" i grupa "nobody". Dla użytkowników OS X, domyślny użytkownik jest nazwany "web" i grupa "web". Jeśli używasz Apache, możesz spojrzeć do pliku httpd.conf ( zazwyczaj w "/usr/local/apache/conf/") aby zobaczyć użytkowników i grupy które są aktualnie używane.
Example 2.7. Ustawienia dostępu do plików
chown nobody:nobody /web/www.example.com/smarty/guestbook/templates_c/ chmod 770 /web/www.example.com/smarty/guestbook/templates_c/ chown nobody:nobody /web/www.example.com/smarty/guestbook/cache/ chmod 770 /web/www.example.com/smarty/guestbook/cache/
chmod 770 zapewni całkowicie szczelną ochronę, pozwala użytkownikom "nobody" i grupą "nobody" na dostęp odczyt/zapis do katalogów. Jeśli chcesz otworzyć dostęp do odczytu dla kogokolwiek (przeważnie dla twojej wygody w przeglądaniu plików), możesz używać 775 zamiast 770.
Musimy stworzyć plik "index.tpl" który będzie ładowany przez Smarty. Ten plik będzie umieszczony w $template_dir.
Example 2.8. Edytowanie /web/www.mydomain.com/smarty/templates/index.tpl
{* Smarty *}
Hello, {$name}!{* Smarty *} jest to komentarz w szablonie. Nie jest wymagany, ale dobrym nawykiem jest zaczynać szablony komentarzem. Czyni to plik łatwiejszy do rozpoznania bez względu na rozszerzenie pliku. Na przykład, edytory tekstu mogły by rozpoznawać plik i włączać podświetlanie specyficznych wyrażeń.
Teraz popracujmy nad index.php. Stworzymy przykład Smarty, przydzielimy zmienne i wyświetlimy plik index.tpl. W naszym przykładzie "/usr/local/lib/php/Smarty" znajduje się w include_path. Upewnij się że zrobiłeś to samo, lub używaj ścieżek absolutnych.
Example 2.9. Edytowanie /web/www.mydomain.com/docs/guestbook/index.php
<?php
// ładwanie biblioteki Smarty
require_once(SMARTY_DIR . 'Smarty.class.php');
$smarty = new Smarty();
$smarty->template_dir = '/web/www.example.com/smarty/guestbook/templates/';
$smarty->compile_dir = '/web/www.example.com/smarty/guestbook/templates_c/';
$smarty->config_dir = '/web/www.example.com/smarty/guestbook/configs/';
$smarty->cache_dir = '/web/www.example.com/smarty/guestbook/cache/';
$smarty->assign('name','Ned');
$smarty->display('index.tpl');
?> W naszym przykładzie, ustawiliśmy absolutne ścieżki do wszystkich katalogów Smarty. Jeżeli '/web/www.mydomain.com/smarty/guestbook/' znajduje się w PHP include_path, to te ustawienia nie są potrzebne. Jednak, ta metoda jest skuteczniejsza i (z doświadczenia) mniej problemogenne. To upewnia Cię że Smarty pobiera pliki z katalogów które sam wprowadziłeś.
Teraz załaduj do przeglądarki plik index.php . Powinieneś zobaczyć "Hello, Ned!" Skończyłeś podstawową instalacje Smarty!
To jest kontynuacja podstawowej instalacji, proszę przeczytaj ją najpierw!
Znacznie zręczniejszym, bardziej elastycznym sposobem zainstalowania Smarty jest rozszerzenie klasy o klasę ustawiającą otoczenie dla Smarty. Więc zamiast powtarzać ustawianie ścieżek katalogów, przydzielać te same zmienne itd., możemy to zrobić w jednym miejscu. Stwórzmy nowy katalog "/php/includes/guestbook/" i stwórzmy nowy plik "setup.php". W naszym przykładzie, "/php/includes/" jest w naszych include_path. Upewnij się czy też to ustawiłeś, lub używaj ścieżek absolutnych.
Example 2.10. Edytowanie /php/includes/guestbook/setup.php
<?php
// Ładowanie biblioteki Smarty
require('Smarty.class.php');
// Plik setup.php jest dobrym miejscem do załadowania
// wymaganych dla aplikacji plików bibliotek, więc możesz
// to zrobic własnie tutaj. Dla przykładu:
// require('guestbook/guestbook.lib.php');
class Smarty_GuestBook extends Smarty {
function Smarty_GuestBook()
{
// Class Constructor.
// These automatically get set with each new instance.
$this->Smarty();
$this->template_dir = '/web/www.example.com/smarty/guestbook/templates/';
$this->compile_dir = '/web/www.example.com/smarty/guestbook/templates_c/';
$this->config_dir = '/web/www.example.com/smarty/guestbook/configs/';
$this->cache_dir = '/web/www.example.com/smarty/guestbook/cache/';
$this->caching = true;
$this->assign('app_name', 'Guest Book');
}
}
?> Teraz zmieńmy plik index.php tak aby używał setup.php:
Example 2.11. Edycja /web/www.mydomain.com/docs/guestbook/index.php
require('guestbook/setup.php');
$smarty = new Smarty_GuestBook;
$smarty->assign('name','Ned');
$smarty->display('index.tpl');Teraz widzisz. że to całkiem proste podać przykład Smarty, użyj tylko Smarty_GuestBook który automatycznie wszystko w naszej aplikacji zainicjalizuje.