ГоловнаКаталогБлогРейтингЕ-Пошта 
 
 
Зробити домашньою у вибране  

  Приступаючи до роботи  
Зміст

1. Що таке Smarty?
2. Встановлення
Вимоги
Базове встановлення
Розширене встановлення

Розділ 1. Що таке Smarty?

Smarty - це компілюючий обробник шаблонів для PHP. Кажучи чіткіше, він надає один з інструментів, що дозволяє добитися відділення прикладної логіки і даних від представлення. Це дуже зручно в ситуаціях, коли програміст і верстальник шаблону - різні люди.

Наприклад, скажімо, ви створюєте сторінку, яка показує газетну статтю. Назва статті, автор і сама стаття - елементи, які не містять ніякої інформації про те, як вони будуть представлені. Їх передають в Smarty з додатку, а верстальник шаблону редагує шаблони і використовує комбінацію тегів HTML і тегів шаблону, щоб відформатувати представлення цих елементів (таблиці HTML, фонові кольори, розміри шрифту, стилю і т.д.). Одного разу програміст захоче змінити спосіб зберігання статті (зробити зміни в логіці додатку). Ця зміна не викличе змін в шаблонах. Зміст все ще передаватиметься в шаблон таким самим способом. Аналогічно, якщо верстальник захоче повністю перепроектувати шаблони, це не потребуватиме ніяких змін в прикладній логіці.

Одне з призначень Smarty - це відділення логіки додатку від представлення. Звичайно ж, шаблони можуть містити в собі логіку, але лише за умови, що ця логіка необхідна для правильного представлення даних. Такі завдання, як підключення інших шаблонів, забарвлення рядків, що чергуються, в таблиці, приведення букв до верхнього регістру, циклічний прохід по масиву для його відображення і т.д. - все це є прикладом логіки представлення. Не слід думати, що Smarty примушує вас розділяти логіку додатку і представлення. Smarty не бачить різниці між цими речами, так що поміщати або не поміщати логіку додатку в шаблони - вирішувати вам. Якщо ж ви вважаєте, що в шаблоні взагалі не повинно бути логіки, ви можете обмежитися використанням чистого тексту і змінних.

Одна з унікальних можливостей Smarty - компіляція шаблонів. Це означає, що Smarty читає файли шаблонів і створює PHP-код на їх основі. Код створюється один раз і потім тільки виконується. Тому немає необхідності обробляти файл шаблону для кожного запиту і кожен шаблон може користуватися всіма перевагами таких кешуюших рішень, як Zend Accelerator (http://www.zend.com/) або PHP Accelerator (http://www.php-accelerator.co.uk).

Деякі особливості Smarty:
  • Він дуже швидкий.
  • Він ефективний, оскільки обробник PHP робить за нього брудну роботу.
  • Ніякої зайвої обробки шаблонів, вони компілюються тільки один раз.
  • Перекомпілюються тільки ті шаблони, які змінилися.
  • Ви можете створювати призначені для користувача функції і модифікатори, що робить мову шаблонів надзвичайно розширюваною.
  • Роздільники тегів шаблону, що настроюються, тобто ви можете використовувати {, {, і т.д.
  • Конструкції if/elseif/else/endif передаються обробникові PHP, так що синтаксис виразу {if ...} може бути настільки простим або складним, наскільки вам завгодно.
  • Допустимо необмежене вкладення секцій, умов і т.д.
  • Існує можливість включення PHP-коду прямо у ваш шаблон, проте зазвичай в цьому немає необхідності (і це не рекоммендуєтся), оскільки двигун вельми гнучкий і розширюваний.
  • Вбудований механізм кешування.
  • Довільні джерела шаблонів.
  • Призначені для користувача функції кешування.
  • Компонентна архітектура.

Розділ 2. Встановлення

Вимоги
Базове встановлення
Розширене встановлення


Вимоги

Для встановлення і роботи Smarty необхідний веб-сервер зі встановленим PHP версії 4.0.6 або вище.


Базове встановлення

Скопіюйте файли 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, який автоматично ініціалізував всі настройки для нашого застосування.




  Логін:
  Пароль:
Книга Фріланс на західному ринку
Книга Фріланс на західному ринку

APServer | SiMan CMS | Лічильник відвідувань | Тека сайтів | Рейтинг | Форум | Download | Шаблони сторінок | Посібник Smarty | Підручник PHP | Статті/Огляди