Базове встановлення
Скопіюйте файли Smarty, які знаходяться в підтеці /libs/ дистрибутива. Редагувати ці PHP-файли НЕ СЛІД. Вони повинні використовуватися всіма застосуваннями і змінюватися тільки при оновленні Smarty до нової версії.
Приклад 2-1. Необхідні файли бібліотеки Smarty
Smarty.class.php
Smarty_Compiler.class.php
Config_File.class.php
debug.tpl
/internals/*.php (всі файли)
/plugins/*.php (всі файли, але окремому сайту можуть знадобитися не все)
Smarty використовує константу PHP SMARTY_DIR, яка вказує повний шлях до директорії 'libs/' Smarty. Зазвичай, якщо ваш додаток може знайти файл Smarty.class.php, то немає необхідності встановлювати SMARTY_DIR - Smarty сам у всьому розбереться. Проте, якщо Smarty.class.php не може бути знайдений у вашому include_path або ви не вказували абсолютний шлях до нього в додатку, то ви повинні визначити SMARTY_DIR вручну. SMARTY_DIR повинен включати завершуючий слеш.
Ось як слід створювати екземпляр об'єкту Smarty у ваших PHP-скриптах:
Приклад 2-2. Створення обекту Smarty
<?php
// Зверніть увагу: у слові Smarty буква 'S' повинна бути великою
require_once('Smarty.class.php');
$smarty = new Smarty();
?>
Спробуйте виконати вищевказаний код. Якщо Ви отримуєте помилку про те, що Smarty.class.php не знайдений, спробуйте наступні варіанти дій:
Приклад 2-3. Ручне встановлення константи SMARTY_DIR
<?php
// стиль *nix (не забувайте про велику 'S')
define('SMARTY_DIR', '/usr/local/lib/php/Smarty-v.e.r/libs/');
// стиль windows
define('SMARTY_DIR', 'c:/webroot/libs/Smarty-v.e.r/libs/');
// приклад для роботи одночасно з *nix та windows
// вважаємо, що Smarty знаходиться в теці 'includes/' відносно даного скрипту
define('SMARTY_DIR', str_replace("\\", "/", getcwd()).'/includes/Smarty-v.e.r/libs/');
require_once(SMARTY_DIR . 'Smarty.class.php');
$smarty = new Smarty();
?>
Приклад 2-4. Передача абсолютного шляху до файлів бібліотеки
<?php
// стиль *nix (не забувайте про велику 'S')
require_once('/usr/local/lib/php/Smarty-v.e.r/libs/Smarty.class.php');
// стиль windows
require_once('c:/webroot/libs/Smarty-v.e.r/libs/Smarty.class.php');
$smarty = new Smarty();
?>
Приклад 2-5. Додавання файлів бібліотеки до include_path PHP
<?php
// Відредагуйте Ваш файл php.ini, додавши теку
// бібліотеки Smarty в include_path та перезапустіть веб-сервер.
// після цього повинен працювати наступний код:
require_once('Smarty.class.php');
$smarty = new Smarty();
?>
Тепер, коли всі файли знаходяться на своїх місцях, прийшов час встановлення тек Smarty у вашому додатку. Smarty вимагає чотири директорії, які по замовчуванню називаються 'templates/', 'templates_c/', 'configs/' і 'cache/'. Кожна з них визначається властивостями класу Smarty: $template_dir, $compile_dir, $config_dir і $cache_dir відповідно. Наполегливо рекомендується використовувати різні набори цих директорій для кожного додатку, який використовує Smarty.
Переконаєтеся, що ви знаєте розташування кореневої теки для документів вашого веб-серверу. У нашому прикладі це /web/www.example.com/docs/. Оскільки доступ до тек Smarty отримує тільки бібліотека Smarty і вони ніколи не запрошуються безпосередньо веб-сервером-браузером, вам рекомендується винести директорії Smarty за межі кореневої директорії для документів, щоб уникнути зайвого неспокою щодо безпеки.
У нашому прикладі ми встановлюватимемо Smarty для деякої гостьової книги. Додаток був вибраний тільки для того, щоб використовувати його ім'я в іменах тек. Ви можете використовувати ті ж налаштування з будь-яким іншим додатком, просто змінюючи "guestbook" на ймення вашого додатку. Ми ж розмістимо наші теки Smarty тут: web/www.example.com/smarty/guestbook/
Вам знадобиться як мінімум один файл в кореневій директорії для документів - це скрипт, до якого звертається веб-оглядач. Ми назвемо наш скрипт 'index.php' і помістимо його в підтеку /guestbook/ кореневої теки для документів.
Технічне зауваження: Буває зручно налаштувати веб-сервер так, щоб 'index.php' розцінювався як індексний файл теки за замовчуванням, щоб при запиті сторінки http://www.example.com/guestbook/ викликався скрипт 'index.php' без 'index.php' в кінці адресного рядка. У веб-сервері-сервері Apache ви можете зробити це, додавши "index.php" у кінець директиви DirectoryIndex (записи розділяються пропусками), як в прикладі з httpd.conf
DirectoryIndex index.htm index.html index.php index.php3 default.html index.cgi
Поглянемо на поточну файлову структуру:
Приклад 2-6. Файлова структура прикладу
/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 знадобляться права на запис (користувачів Windows це не стосується) в $compile_dir і $cache_dir, отже переконайтеся, що у веб-сервера-сервера є ці права. Зазвичай сервер запущений від імені користувача "nobody" групи "nobody". Для користувачів OS X користувачем за умовчанням є "www" групи "www". Якщо ви використовуєте Apache, ви можете заглянути у ваш файл httpd.conf (який зазвичай розташований в "/usr/local/apache/conf/") щоб дізнатися, який користувач і група використовуються.
Приклад 2-7. Установка прав доступу до файлів
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 дає достатньо жорсткий захист - вирішує тільки користувачеві "nobody" і групі "nobody" доступ на читання і запис в ці теки. Якщо ви хочете відкрити доступ на читання для всіх (зазвичай для власної зручності при прогляданні цих файлів), ви можете використовувати значення 775.
Нам необхідно створити файл 'index.tpl', котори завантажуватиметься Smarty. Він буде розташований в $template_dir.
Приклад 2-8. Редагування /web/www.example.com/smarty/guestbook/templates/index.tpl
{* Smarty *}
Привіт, {$name}! Ласкаво просимо в Smarty!
Технічне зауваження: {* Smarty *} - це коментар шаблону. Він не є обов'язковим, але його розміщення на початку кожного шаблону є хорошим тоном. Це дозволяє простіше розрізняти файли незалежно від їх розширення. Наприклад, текстові редактори можуть визначити цей файл і включати особливе підсвічування синтаксису.
Тепер давайте відредагуємо 'index.php'. Ми створимо екземпляр Smarty, привласнимо значення змінної шаблону і відобразимо файл 'index.tpl'.
Приклад 2-9. Редагування /web/www.example.com/smarty/guestbook/index.php
<?php
// завантажуємо бібліотеку 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', 'Христина');
$smarty->display('index.tpl');
?>
Технічне зауваження: У нашому прикладі ми встановлюємо абсолютні шляхи до всіх тек Smarty. Якщо /web/www.example.com/smarty/guestbook/ знаходиться в include_path вашого PHP, то ці налаштування не обов'язкові. Проте, ефективнішим і (з досвіду) менш глюкобезпечним є використання абсолютних шляхів. Це додасть упевненість в тому, що Smarty отримує файли з тих директорій, з яких ви хочете.
Тепер перейдіть до файлу index.php за допомогою вашого веб-оглядача. Ви повинні побачити напис "Привіт, Христина! Ласкаво просимо в Smarty!"
Ви закінчили базове встановлення Smarty!
Розширене встановлення
Цей розділ є продовженням базового встановлення; будь ласка, спершу прочитайте його.
Трохи більш гнучким способом встановлення Smarty є наслідування класу і ініціалізація вашого власного оточення Smarty. Таким чином, замість того, щоб постійно встановлювати шляхи директорій, присвоювати одні і ті ж змінні і т.д., ми можемо все це зробити в одному місці. Давайте створимо нову директорію "/php/includes/guestbook/",а в ній - новий файл, який назвемо setup.php. За умовами нашого прикладу, "/php/includes" знаходиться в include_path. Переконаєтеся, щоб те ж саме було і у вас, або використайте абсолютні шляхи.
Приклад 2-10. Редагування /web/www.example.com/smarty/guestbook/setup.php
<?php
// завантажуємо бібліотеку Smarty
require_once(SMARTY_DIR . 'Smarty.class.php');
// Файл setup.php - хороше місце для
// підключення бібліотечних файлів Вашого додатку.
// Ви можее зробити це прямо тут. Приклад:
// require('guestbook/guestbook.lib.php');
class Smarty_GuestBook extends Smarty
{
function Smarty_GuestBook()
{
// Конструктор класу.
// Він викликається автоматично при створенні нового об'єкту.
$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');
}
}
?>
Тепер змінимо index.php для того, щоб він використовував setup.php:
Приклад 2-11. Редагування /web/www.example.com/smarty/guestbook/index.php
<?php
require('guestbook/setup.php');
$smarty = new Smarty_GuestBook;
$smarty->assign('name','Ned');
$smarty->display('index.tpl');
?>
Тепер ви бачите, що створити екземпляр Smarty досить просто - потрібно лише використовувати Smarty_GuestBook, який автоматично ініціалізував всі настройки для нашого застосування.