Скопируйте файлы Smarty, которые находятся в субдиректории
/libs/
дистрибутива. Редактировать эти PHP-файлы НЕ СЛЕДУЕТ. Они должны
использоваться всеми приложениями и изменяться только при обновлении
Smarty до новой версии.
В следующих примерах архив с исходным кодом Smarty был распакован в
/usr/local/lib/Smarty-v.e.r/
для машин под *nixи
c:\webroot\libs\Smarty-v.e.r\
для машин под Windows.
Example 2.1. Необходимые файлы библиотеки Smarty
Smarty-v.e.r/ libs/ 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-скриптах:
<?php // Обратите внимание: в слове Smarty буква 'S' должна быть заглавной require_once('Smarty.class.php'); $smarty = new Smarty(); ?>
Попробуйте выполнить вышеуказанный код. Если Вы получаете ошибку о том,
что Smarty.class.php
не найден, попробуйте следующие
варианты действий:
Example 2.2. Ручная установка константы SMARTY_DIR
<?php // стиль *nix (не забывайте о заглавной 'S') define('SMARTY_DIR', '/usr/local/lib/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(); ?>
Example 2.3. Передача абсолютного пути к файлам библиотеки
<?php // стиль *nix (не забывайте о заглавной 'S') require_once('/usr/local/lib/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(); ?>
Example 2.4. Добавление библиотеки в путь в файле php.ini
;;;;;;;;;;;;;;;;;;;;;;;;; ; Paths and Directories ; ;;;;;;;;;;;;;;;;;;;;;;;;; ; *nix: "/path1:/path2" include_path = ".:/usr/share/php:/usr/local/lib/Smarty-v.e.r/libs/" ; Windows: "\path1;\path2" include_path = ".;c:\php\includes;c:\webroot\libs\Smarty-v.e.r\libs\"
Example 2.5.
Дописывание include_path из PHP-скрипта используя
ini_set()
<?php // *nix ini_set('include_path', ini_get('include_path').PATH_SEPARATOR.'/usr/local/lib/Smarty-v.e.r/libs/'); // windows ini_set('include_path', ini_get('include_path').PATH_SEPARATOR.'c:/webroot/lib/Smarty-v.e.r/libs/'); ?>
Теперь, когда все файлы находятся на своих местах, пришло время установки директорий Smarty в вашем приложении.
Smarty нужно четыре директории, которые по умолчанию называются
templates/
,templates_c/
,configs/
иcache/
Каждая из них определяется свойствами класса Smarty:
$template_dir
,$compile_dir
,$config_dir
и$cache_dir
соответственно. Настойчиво рекомендуется использовать разные наборы этих директорий для каждого приложения, использующего Smarty.
В нашем примере мы будем устанавливать Smarty для некоторой гостевой
книги. Приложение было выбрано только для того, чтобы использовать его
имя в именах директорий. Вы можете использовать те же настройки с любым
другим приложением, просто меняя guestbook/
на имя вашего приложения.
Example 2.6. Вот как выглядит файловая структура
/usr/local/lib/Smarty-v.e.r/libs/ Smarty.class.php Smarty_Compiler.class.php Config_File.class.php debug.tpl internals/*.php plugins/*.php /web/www.example.com/ guestbook/ templates/ index.tpl templates_c/ configs/ cache/ htdocs/ index.php
Убедитесь, что вы знаете расположение корневой директории документов
вашего веб-сервера. В следующих примерах, корневой директорией документов
является /web/www.example.com/guestbook/htdocs/
.
Доступ к директориям Smarty происходит только из библиотеки Smarty и
никогда не происходит через веб-браузер. Поэтому, в целях безопасности
рекоммендуется располагать эти директории за пределами
корневой директории документов сервера, хотя это и не обязательно.
Вам понадобиться как минимум один файл внутри корневой директории
документов - это скрипт, вызываемый веб-браузером. Мы назовем наш скрипт
index.php
и положим его в поддиректорию внутри
корневой директории документов /htdocs/
.
Smarty понадобятся права на запись
(пользователей Windows это не касается) в директории
$compile_dir
и
$cache_dir
(templates_c/
и
cache/
),
так что убедитесь, что у веб-сервера есть эти права.
Note
Обычно это пользователь “nobody” и группа
“nobody”. Для пользователей OS X, пользователь по умолчанию
- это “www” и группа - “www”.
Если вы используете Apache, вы можете узнать используемые
имя пользователя и группу из файла httpd.conf
.
Example 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
.
Example 2.8. /web/www.example.com/guestbook/templates/index.tpl
{* Smarty *} Привет, {$name}! Добро пожаловать в Smarty!
Техническое замечание
{* Smarty *}
- это
комментарий шаблона.
Он не является обязательным, но его размещение в начале каждого шаблона
является хорошим тоном. Это позволяет проще различать файлы независимо
от их расширения. К примеру, текстовые редакторы могут узнавать этот
файл и включать особенную подсветку синтаксиса.
Теперь давайте отредактируем index.php
.
Мы создадим экземпляр Smarty,
присвоим значение переменной шаблона и
отобразим файл
index.tpl
.
Example 2.9. /web/www.example.com/docs/guestbook/index.php
<?php require_once(SMARTY_DIR . 'Smarty.class.php'); $smarty = new Smarty(); $smarty->template_dir = '/web/www.example.com/guestbook/templates/'; $smarty->compile_dir = '/web/www.example.com/guestbook/templates_c/'; $smarty->config_dir = '/web/www.example.com/guestbook/configs/'; $smarty->cache_dir = '/web/www.example.com/guestbook/cache/'; $smarty->assign('name', 'Катруська'); //** раскомментируйте следующую строку для отображения отладочной консоли //$smarty->debugging = true; $smarty->display('index.tpl'); ?>
Примечание
В нашем примере мы устанавливаем абсолютные пути ко всем директориям
Smarty. Если /web/www.example.com/guestbook/
находится в include_path вашего PHP, то эти настройки не обязательны.
Тем не менее, более эффективным и (из опыта) менее глюкоопасным является
использование абсолютных путей. Это придаст уверенность в том, что Smarty
получает файлы из тех директорий, из которых вы хотите.
Теперь перейдите к файлу index.php
при помощи вашего
веб-браузера. Вы должны увидеть надпись
"Привет, Катруська! Добро пожаловать в Smarty!"
Вы закончили базовую установку Smarty!