<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Базовая установка</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.75.1">
<link rel="home" href="index.html" title="Руководство по Smarty">
<link rel="up" href="installation.html" title="Chapter 2. Установка">
<link rel="prev" href="installation.html" title="Chapter 2. Установка">
<link rel="next" href="installing.smarty.extended.html" title="Расширенная установка">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="navheader">
<table width="100%" summary="Navigation header">
<tr><th colspan="3" align="center">Базовая установка</th></tr>
<tr>
<td width="20%" align="left">
<a accesskey="p" href="installation.html">Prev</a> </td>
<th width="60%" align="center">Chapter 2. Установка</th>
<td width="20%" align="right"> <a accesskey="n" href="installing.smarty.extended.html">Next</a>
</td>
</tr>
</table>
<hr>
</div>
<div class="sect1" title="Базовая установка">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="installing.smarty.basic"></a>Базовая установка</h2></div></div></div>
<p>
Скопируйте файлы Smarty, которые находятся в субдиректории
<code class="filename">/libs/</code>
дистрибутива. Редактировать эти PHP-файлы НЕ СЛЕДУЕТ. Они должны
использоваться всеми приложениями и изменяться только при обновлении
Smarty до новой версии.
</p>
<p>
В следующих примерах архив с исходным кодом Smarty был распакован в
</p>
<div class="itemizedlist"><ul class="itemizedlist" type="disc">
<li class="listitem"><p>
<code class="filename">/usr/local/lib/Smarty-v.e.r/</code>
для машин под *nix
</p></li>
<li class="listitem"><p>
и
<code class="filename">c:\webroot\libs\Smarty-v.e.r\</code>
для машин под Windows.
</p></li>
</ul></div>
<p>
</p>
<div class="example">
<a name="id2644205"></a><p class="title"><b>Example 2.1. Необходимые файлы библиотеки Smarty</b></p>
<div class="example-contents"><pre class="screen">
Smarty-v.e.r/
libs/
Smarty.class.php
Smarty_Compiler.class.php
Config_File.class.php
debug.tpl
internals/*.php (все файлы)
plugins/*.php (все файлы)
</pre></div>
</div>
<br class="example-break"><p>
Smarty использует <a class="ulink" href="http://php.net/define" target="_top">константу</a> PHP
<a class="link" href="smarty.constants.html#constant.smarty.dir" title="SMARTY_DIR">
<code class="constant">SMARTY_DIR</code></a>, которая указывает
<span class="bold"><strong>полный путь</strong></span> к директории
<code class="filename">libs/</code> из Smarty.
Обычно, если ваше приложение может
найти файл <code class="filename">Smarty.class.php</code>, то нет необходимости
устанавливать
<a class="link" href="smarty.constants.html#constant.smarty.dir" title="SMARTY_DIR"><code class="constant">SMARTY_DIR</code></a>
- Smarty сам во всём разберётся.
Однако, если
<code class="filename">Smarty.class.php</code> не может
быть найден в вашем include_path или вы не указывали абсолютный путь к
нему в приложении, то вы должны определить
<code class="constant">SMARTY_DIR</code> вручную.
<code class="constant">SMARTY_DIR</code> <span class="bold"><strong>должна включать
завершающий слэш</strong></span>.
</p>
<div class="informalexample">
<p>
Вот как следует создавать экземпляр объекта Smarty в ваших PHP-скриптах:
</p>
<pre class="programlisting">
<?php
// Обратите внимание: в слове Smarty буква 'S' должна быть заглавной
require_once('Smarty.class.php');
$smarty = new Smarty();
?>
</pre>
</div>
<p>
Попробуйте выполнить вышеуказанный код. Если Вы получаете ошибку о том,
что <code class="filename">Smarty.class.php</code> не найден, попробуйте следующие
варианты действий:
</p>
<div class="example">
<a name="id2644346"></a><p class="title"><b>Example 2.2. Ручная установка константы SMARTY_DIR</b></p>
<div class="example-contents"><pre class="programlisting">
<?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();
?>
</pre></div>
</div>
<br class="example-break"><div class="example">
<a name="id2644361"></a><p class="title"><b>Example 2.3. Передача абсолютного пути к файлам библиотеки</b></p>
<div class="example-contents"><pre class="programlisting">
<?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();
?>
</pre></div>
</div>
<br class="example-break"><div class="example">
<a name="id2644398"></a><p class="title"><b>Example 2.4. Добавление библиотеки в путь в файле <code class="filename">php.ini</code></b></p>
<div class="example-contents"><pre class="programlisting">
;;;;;;;;;;;;;;;;;;;;;;;;;
; 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\"
</pre></div>
</div>
<br class="example-break"><div class="example">
<a name="id2644427"></a><p class="title"><b>Example 2.5.
Дописывание include_path из PHP-скрипта используя
<code class="literal"><a class="ulink" href="http://php.net/ini-set" target="_top">ini_set()</a></code>
</b></p>
<div class="example-contents"><pre class="programlisting">
<?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/');
?>
</pre></div>
</div>
<br class="example-break"><p>
Теперь, когда все файлы находятся на своих местах, пришло время
установки директорий Smarty в вашем приложении.
</p>
<div class="itemizedlist"><ul class="itemizedlist" type="disc">
<li class="listitem"><p>
Smarty нужно четыре директории, которые по умолчанию называются
<code class="filename">templates/</code>,
<code class="filename">templates_c/</code>,
<code class="filename">configs/</code> и
<code class="filename">cache/</code>
</p></li>
<li class="listitem"><p>
Каждая из них определяется свойствами класса Smarty:
<a class="link" href="api.variables.html#variable.template.dir" title="$template_dir">
<code class="varname">$template_dir</code></a>,
<a class="link" href="variable.compile.dir.html" title="$compile_dir">
<code class="varname">$compile_dir</code></a>,
<a class="link" href="variable.config.dir.html" title="$config_dir">
<code class="varname">$config_dir</code></a> и
<a class="link" href="variable.cache.dir.html" title="$cache_dir">
<code class="varname">$cache_dir</code></a> соответственно.
Настойчиво рекомендуется использовать разные наборы
этих директорий для каждого приложения, использующего Smarty.
</p></li>
</ul></div>
<p>
В нашем примере мы будем устанавливать Smarty для некоторой гостевой
книги. Приложение было выбрано только для того, чтобы использовать его
имя в именах директорий. Вы можете использовать те же настройки с любым
другим приложением, просто меняя <code class="literal">guestbook/</code>
на имя вашего приложения.
</p>
<div class="example">
<a name="id2644592"></a><p class="title"><b>Example 2.6. Вот как выглядит файловая структура</b></p>
<div class="example-contents"><pre class="screen">
/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
</pre></div>
</div>
<br class="example-break"><p>
Убедитесь, что вы знаете расположение корневой директории документов
вашего веб-сервера. В следующих примерах, корневой директорией документов
является <code class="filename">/web/www.example.com/guestbook/htdocs/</code>.
Доступ к директориям Smarty происходит только из библиотеки Smarty и
никогда не происходит через веб-браузер. Поэтому, в целях безопасности
рекоммендуется располагать эти директории <span class="emphasis"><em>за пределами</em></span>
корневой директории документов сервера, хотя это и не обязательно.
</p>
<p>
Вам понадобиться как минимум один файл внутри корневой директории
документов - это скрипт, вызываемый веб-браузером. Мы назовем наш скрипт
<code class="filename">index.php</code> и положим его в поддиректорию внутри
корневой директории документов <code class="filename">/htdocs/</code>.
</p>
<p>
Smarty понадобятся <span class="bold"><strong>права на запись</strong></span>
(пользователей Windows это не касается) в директории
<a class="link" href="variable.compile.dir.html" title="$compile_dir">
<em class="parameter"><code>$compile_dir</code></em></a> и
<a class="link" href="variable.cache.dir.html" title="$cache_dir">
<em class="parameter"><code>$cache_dir</code></em></a>
(<code class="filename">templates_c/</code> и
<code class="filename">cache/</code>),
так что убедитесь, что у веб-сервера есть эти права.
</p>
<div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Note</h3>
<p>
Обычно это пользователь <span class="quote">“<span class="quote">nobody</span>”</span> и группа
<span class="quote">“<span class="quote">nobody</span>”</span>. Для пользователей OS X, пользователь по умолчанию
- это <span class="quote">“<span class="quote">www</span>”</span> и группа - <span class="quote">“<span class="quote">www</span>”</span>.
Если вы используете Apache, вы можете узнать используемые
имя пользователя и группу из файла <code class="filename">httpd.conf</code>.
</p>
</div>
<p>
</p>
<div class="example">
<a name="id2644776"></a><p class="title"><b>Example 2.7. Установка прав доступа к файлам и директориям</b></p>
<div class="example-contents"><pre class="programlisting">
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/
</pre></div>
</div>
<br class="example-break"><div class="note" title="Примечание" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Примечание</h3>
<p>
<code class="literal">chmod 770</code> даёт достаточно жесткую защиту -
разрешает только пользователю
<span class="quote">“<span class="quote">nobody</span>”</span> и группе <span class="quote">“<span class="quote">nobody</span>”</span> доступ
на чтение и запись в эти директории.
Если вы хотите открыть доступ на чтение для всех (обычно для собственного
удобства при просмотре этих файлов), вы можете использовать значение
<code class="literal">775</code>.
</p>
</div>
<p>
Нам необходимо создать файл <code class="filename">index.tpl</code>,
которы будет загружаться Smarty.
Он будет расположен в
<a class="link" href="api.variables.html#variable.template.dir" title="$template_dir">
<em class="parameter"><code>$template_dir</code></em></a>.
</p>
<div class="example">
<a name="id2644865"></a><p class="title"><b>Example 2.8. /web/www.example.com/guestbook/templates/index.tpl</b></p>
<div class="example-contents"><pre class="screen">
{* Smarty *}
Привет, {$name}! Добро пожаловать в Smarty!
</pre></div>
</div>
<br class="example-break"><div class="note" title="Техническое замечание" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Техническое замечание</h3>
<p>
<code class="literal">{* Smarty *}</code> - это
<a class="link" href="language.basic.syntax.html#language.syntax.comments" title="Комментарии">комментарий</a> шаблона.
Он не является обязательным, но его размещение в начале каждого шаблона
является хорошим тоном. Это позволяет проще различать файлы независимо
от их расширения. К примеру, текстовые редакторы могут узнавать этот
файл и включать особенную подсветку синтаксиса.
</p>
</div>
<p>
Теперь давайте отредактируем <code class="filename">index.php</code>.
Мы создадим экземпляр Smarty,
<a class="link" href="api.assign.html" title="assign()">присвоим</a> значение переменной шаблона и
<a class="link" href="api.display.html" title="display()">отобразим</a> файл
<code class="filename">index.tpl</code>.
</p>
<div class="example">
<a name="id2644942"></a><p class="title"><b>Example 2.9. /web/www.example.com/docs/guestbook/index.php</b></p>
<div class="example-contents"><pre class="programlisting">
<?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');
?>
</pre></div>
</div>
<br class="example-break"><div class="note" title="Примечание" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Примечание</h3>
<p>
В нашем примере мы устанавливаем абсолютные пути ко всем директориям
Smarty. Если <code class="filename">/web/www.example.com/guestbook/</code>
находится в include_path вашего PHP, то эти настройки не обязательны.
Тем не менее, более эффективным и (из опыта) менее глюкоопасным является
использование абсолютных путей. Это придаст уверенность в том, что Smarty
получает файлы из тех директорий, из которых вы хотите.
</p>
</div>
<p>
Теперь перейдите к файлу <code class="filename">index.php</code> при помощи вашего
веб-браузера. Вы должны увидеть надпись
<span class="emphasis"><em>"Привет, Катруська! Добро пожаловать в Smarty!"</em></span>
</p>
<p>
Вы закончили базовую установку Smarty!
</p>
</div>
<div class="navfooter">
<hr>
<table width="100%" summary="Navigation footer">
<tr>
<td width="40%" align="left">
<a accesskey="p" href="installation.html">Prev</a> </td>
<td width="20%" align="center"><a accesskey="u" href="installation.html">Up</a></td>
<td width="40%" align="right"> <a accesskey="n" href="installing.smarty.extended.html">Next</a>
</td>
</tr>
<tr>
<td width="40%" align="left" valign="top">Chapter 2. Установка </td>
<td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td>
<td width="40%" align="right" valign="top"> Расширенная установка</td>
</tr>
</table>
</div>
</body>
</html>