Jump to content
  • 0

Установка Smarty


Vlad
 Share

Question

В дальнейшем будем предполагать, что у вас установлен веб-комплект Денвер и вы тестируете свой сайт на локальном компьютере под управлением Windows.

Вначале скачайте последнюю версию Smarty с сайта http://smary.php.net и распакуйте архив. Несмотря на обилие в архиве директорий и файлов, нас интересует лишь одна папка libs.

Создайте на диске Z, который автоматически подключается после установки Денвера, внутри home папку с именем вашего сайта и в нее добавьте папку libs. Далее создайте еще одну папку с именем smarty, внутри которой располагаются следующие подпапки: cache, config, templates, templates_c. Вся структура папок на примере сайта webimg.ru приведена ниже.

Z:homewebimg.ru

libs

smarty

cache

config

templates

templates_c

www

Имена на приведенной схеме не зря выделены жирным начертанием. Для этих папок необходимо установить права 770 [rwx rwx —] или 775 [rwx rwx r-x]. Поскольку под Windows подобные права никак не меняются, то этот пункт имеет важность только при переносе сайта под *nix-сервер.

Каждая из папок Smarty несет определенную нагрузку. Так, папка cache содержит кэшированные документы, предназначенные для ускорения работы сайта путем сохранения результатов в файлы. Config содержит конфигурационные настройки, templates это основная часть, содержащая все шаблоны, а templates_c ? скомилированные шаблоны. При этом содержимое двух папок ? cache и templates_c формируется автоматически.

В папке libs создайте файл setup.php, который будет содержать следующий код (пример 1).

Пример 1. Содержимое файла setup.php
<?php
require ("Smarty.class.php");
class Smarty_WebImg extends Smarty {
function Smarty_WebImg() {
$this->Smarty();
$this->template_dir = "/home/webimg.ru/smarty/templates/";
$this->compile_dir = "/home/webimg.ru/smarty/templates_c/";
$this->config_dir = "/home/webimg.ru/smarty/configs/";
$this->cache_dir = "/home/webimg.ru/smarty/cache/";
}
}
?>

Класс Smarty_WebImg носит имя, которое устанавливается по желанию. Учтите только, что оно будет применяться повсеместно. Далее идут пути ко всем служебным директориям Smarty.

Теперь создаем шаблон главной страницы сайта, назовем его index.tpl и сохраним в папке templates (пример 2).

Пример 2. Файл шаблона index.tpl
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 //EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1251">
<title>{$title}</title>
</head>
<body>
<h1>Сайт WebImg.ru</h1>
<p>Все работает!</p>
</body>
</html>

Это обычный HTML-документ, единственное, что его отличает, это переменная {$title}, она определяется в файле index.php, который располагается в папке www (пример 3).

Пример 3. Содержимое файла index.php
<?php
require ("/home/webimg.ru/libs/setup.php");
$smarty = new Smarty_WebImg;
$smarty->assign("title", "Сайт WebImg.ru - главная страница");
$smarty->display("index.tpl");
?>

Вначале следует обратиться к файлу setup.php, который располагается в папке libs, чтобы Smarty понимал, в каких папках следует искать шаблоны. Далее создаем экземпляр Smarty с именем Smarty_WebImg (вспоминаем, что ранее сами так его обозвали), при этом все настройки будут заданы автоматически.

Остается определить значение заданных в шаблоне переменных через метод assign и загрузить требуемый шаблон с помощью метода display.

Окончательно проверяем работу всех компонентов, загрузив в браузере сайт webimg.ru. Должна отобразиться страница с надписью ?Все работает!?.

Возможные ошибки при установке

Любые ошибки, возникающие при первой установке и настройки Smarty, как правило, связаны с невнимательностью и решаются проверкой всех компонент, а именно, файлов setup.php, index.tpl и index.php. Тем не менее, приведем некоторые типичные ошибки.

Warning: require(/home/webimg.ru/libs/setup.php) [function.require]: failed to open stream: No such file or directory in z:homewebimg.ruwwwindex.php on line 3

Вызываемый файл setup.php отсутствует в папке /home/webimg.ru/libs.

Fatal error: Class 'Smarty_WebImg' not found in z:homewebimg.ruwwwindex.php on line 5

Имя класса Smarty_WebImg упоминается три раза, два из них в файле setup.php и еще один в файле index.php. Проверьте, чтобы имена в этих документах писались одинаково.

Warning: Smarty error: unable to read resource: "index.tpl" in z:homewebimg.rulibsSmarty.class.php on line 1095

Ошибка в описании путей к требуемым директориям. Откройте файл setup.php и удостоверьтесь, все ли заданные в переменных папки существуют и правильно ли указан к ним путь.

Notice: Undefined variable: title in z:homewebimg.ruwwwindex.php on line 7

Скорее всего, переменная title записана как $title. Хотя в PHP все переменные определяются со знаком $ впереди, Smarty использует это правило не во всех случаях.

Fatal error: Smarty error: [in index.tpl line 5]: syntax error: unrecognized tag 'title' (Smarty_Compiler.class.php, line 580) in z:homewebimg.rulibsSmarty.class.php on line 1095

Здесь ситуация с точностью до наоборот, в файле index.tpl заголовок веб-страницы записан как {title} без знака $.

Заметим также, что если указанный заголовок вообще не отображается, то, скорее всего, переменная title задана неверно. Smarty в подобных случаях не выводит сообщение об ошибке, но и не показывает значение переменной.

Link to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 0

Влад, а скажите пожалуйста как эти все пути к папакам Smarty (cache, config, templates, templates_c) будут выглядеть на реальном сервере? В документации написано

в целях безопасности рекоммендуется располагать эти директории за пределами корневой директории документов сервера

У меня на сервере указано, что коневая папка - /home/my_domen и как попасть вне корневой директории, никак не соображу. Или просто создать любую папку и запретить к ней доступ через браузер с помощью .htaccess. Наверно перечитал документацию мозги слиплись. Как правильно???

Link to comment
Share on other sites

  • 0

Раз нельзя попасть за пределы директории сайта, то это скорее запрещено настройками. В этом случае все папки выкладываются в доступном месте и доступ к ним ограничивается.

Link to comment
Share on other sites

  • 0
Скорее всего, переменная title записана как $title. Хотя в PHP все переменные определяются со знаком $ впереди, Smarty использует это правило не во всех случаях.

Fatal error: Smarty error: [in index.tpl line 5]: syntax error: unrecognized tag 'title' (Smarty_Compiler.class.php, line 580) in z:homewebimg.rulibsSmarty.class.php on line 1095

Здесь ситуация с точностью до наоборот, в файле index.tpl заголовок веб-страницы записан как {title} без знака $.

Можно ли и в файлах .tpl не указывать знак $ ?

А то у меня везде код примерно такой:

{include file="includes/header.tpl"}
{assign var="auth" value=false}
{section loop=$user.groups name="i"}
...

и как следствие ошибка unrecognized tag 'assing'.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy