Оглавление

32.1. Установка и настройка

Со  страницы  http://www.smarty.net/download  скачиваем  архив Smarty-3.1.8.zip (На момент написания, возможно, есть более свежая версия) и распаковываем его в текущую папку. Из этого архива нам понадобится папка libs. Переименовываем  ее  в smarty и копируем  в C:\Apache2.

 
Таким  образом,  файл Smarty.class.php  должен  быть  расположен  в C:\Apache2\smarty. Путь к этой папке следует указать внутри скрипта в константе SMARTY_DIR:
define('SMARTY_DIR', 'C:/Apache2/smarty/');

 
В C:\Apache2\smarty создаем каталог site1, а внутри него четыре папки:
□ templates — здесь будем размещать создаваемые шаблоны;
□ templates_c — при первой загрузке шаблона он автоматически преобразуется  в  соответствующий PHP-код,  который  сохраняется  в  этой  папке. PHP-код  создается  только  один  раз  при  первом  запуске,  а  также  после изменения текущего шаблона. Каждый последующий запуск скрипта, использующего шаблон, будет приводить к выполнению PHP-кода, а не новой  компиляции  шаблона.  Изменять  файлы  из  этой  папки  вручную  не следует;

□ configs — для файлов с глобальными переменными. Файлы из этой папки следует загружать внутри шаблона с помощью инструкции {config_load};
□ cache — для кэшированных страниц.

 

Местоположение  этих  папок  задается  с  помощью  свойств  template_dir, compile_dir,  config_dir  и  cache_dir  соответственно.  Чтобы  в  каждом скрипте не указывать путь, создадим новый класс, наследующий все свойства и методы класса Smarty, а также определяющий местоположение папок (листинг 75).

 
Листинг 75. Содержимое файла MySmarty.php

<?php
define('SMARTY_DIR', 'C:/Apache2/smarty/');
require_once(SMARTY_DIR . 'Smarty.class.php');
class MySmarty extends Smarty {
   function MySmarty() { // Конструктор класса
      $this->Smarty();
      $this->template_dir = 'C:/Apache2/smarty/site1/templates/';
      $this->compile_dir = 'C:/Apache2/smarty/site1/templates_c/';
      $this->config_dir = 'C:/Apache2/smarty/site1/configs/';
      $this->cache_dir = 'C:/Apache2/smarty/site1/cache/';
   }
}
?>

Этот файл мы будем подключать во всех скриптах. Разместить файл необходимо в одной папке со скриптом или в одном из каталогов, указанных в директиве include_path.

 

Теперь  проверим Smarty  на  работоспособность.  Для  этого  в  папке C:\Apache2\smarty\site1\templates  создаем  файл index.tpl  и  добавляем  в  него код из листинга 76.

 
Листинг 76. Содержимое шаблона C:\Apache2\smarty\site1\templates\index.tpl

{* Smarty *}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
         "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
 <title>{$title}</title>
 <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body>
 {* Это комментарий внутри шаблона. В HTML не попадет *}
 <!-- Это HTML-комментарий. Отображается в HTML-документе -->
 <div>Привет, {$name}. Smarty работает!</div>
</body>
</html>
Листинг 5.77. Содержимое файла C:\Apache2\htdocs\index.php
<?php
require_once('MySmarty.php'); // См. листинг 5.75
$smarty = new MySmarty();
// Указываем значения для переменных внутри шаблона
$smarty->assign('title', 'Первый шаблон');
$smarty->assign('name', 'Николай');
// Выводим шаблон
$smarty->display('index.tpl');
?>

 

Все, что расположено между символами {* и *}, является комментарием, который доступен только внутри шаблона. Он не попадает в исходный HTML-код страницы. Инструкции {$title} и {$name} в дальнейшем будут заменены на значения, указанные в методе assign() (листинг 77).

 
Листинг 77. Содержимое файла C:\Apache2\htdocs\index.php

<?php
require_once('MySmarty.php'); // См. листинг 5.75
$smarty = new MySmarty();
// Указываем значения для переменных внутри шаблона
$smarty->assign('title', 'Первый шаблон');
$smarty->assign('name', 'Николай');
// Выводим шаблон
$smarty->display('index.tpl');
?>

 

В  первой  строке  подключается  файл,  содержащий  класс  MySmarty (листинг 75). В  следующей  строке  создается  экземпляр  класса. Далее  с  помощью метода assign() указываются значения для переменных внутри шаблона.  Чтобы  вывести  результат  в  окно Web-браузера  вызывается  метод display(),  в  параметре  которого  указывается  название шаблона.  Результат выполнения программы приведен в листинге 78.

 
Листинг 78. Результат выполнения листинга 77

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
         "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
 <title>Первый шаблон</title>
 <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body>
  <!-- Это HTML-комментарий. Отображается в HTML-документе -->
 <div>Привет, Николай. Smarty работает!</div>
</body>
</html>

 

Как  видно  из  примера,  инструкции  {$title}  и  {$name}  были  заменены  на значения, указанные в методе assign(). Никаких признаков Smarty в исходном HTML-коде нет. Теперь откроем файл, который был автоматически создан  в  папке C:\Apache2\smarty\site1\templates_c  после  компиляции шаблона. Содержимое файла показано в листинге 79.

 
Листинг 79. Результат компиляции шаблона index.tpl

<?php /* Smarty version 2.6.26, created on 2009-11-16 12:27:00
         compiled from index.tpl */ ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
         "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
 <title><?php echo $this->_tpl_vars['title']; ?>
</title>
 <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body>
  <!-- Это HTML-комментарий. Отображается в HTML-документе -->
 <div>Привет, <?php echo $this->_tpl_vars['name']; ?>
. Smarty работает!</div>
</body>
</html>

 

Все инструкции Smarty в этом файле заменены на фрагменты PHP-кода. Данный файл создается только один раз и изменяется только после редактирования шаблона. Во всех остальных случаях запускается PHP-код из этого файла.  Таким  образом  достигается  высокая  производительность.  Еще  раз напомним, что изменять этот файл вручную не следует. Все изменения должны вноситься в шаблон.

Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити