diff --git a/docs/ru/appendixes/bugs.xml b/docs/ru/appendixes/bugs.xml
new file mode 100644
index 00000000..44127673
--- /dev/null
+++ b/docs/ru/appendixes/bugs.xml
@@ -0,0 +1,29 @@
+
+
+
+ BUGS
+
+ Check the BUGS file that comes with the latest distribution of Smarty, or
+ check the website.
+
+
+
diff --git a/docs/ru/appendixes/resources.xml b/docs/ru/appendixes/resources.xml
new file mode 100644
index 00000000..5f32b21a
--- /dev/null
+++ b/docs/ru/appendixes/resources.xml
@@ -0,0 +1,33 @@
+
+
+
+ Источники
+
+ Домашняя страница Smarty: &url.smarty;
+ Для подписки на новости, надо послать письмо на
+ &ml.general.sub;.
+ Архив подписки доступен на
+ &url.ml.archive;.
+
+
+
diff --git a/docs/ru/appendixes/tips.xml b/docs/ru/appendixes/tips.xml
new file mode 100644
index 00000000..9f041cb8
--- /dev/null
+++ b/docs/ru/appendixes/tips.xml
@@ -0,0 +1,350 @@
+
+
+
+ Уловки
+
+
+
+ Обработка пустых переменных
+
+ Иногда, например, для того чтобы фон таблицы работал корректно,
+ необходимо вывести вместо пустого значения переменной, значение
+ по умолчанию " ". Многие бы использовали конструкцию {if},
+ но есть более короткий путь в Smatry используя default
+ модификатор переменной.
+
+
+Вывод когда переменная пуста
+
+
+{* длинный путь *}
+
+{if $title eq ""}
+
+{else}
+ {$title}
+{/if}
+
+
+{* короткий путь *}
+
+{$title|default:" "}
+
+
+
+
+ Обработка переменных по умлочанию
+
+ Если переменная встречается часто, то использование модификатора
+ default каждый раз можно избежать, используя функцию
+ assign.
+
+
+Назначение переменной шаблона значения по умолчанию
+
+{* вверху шаблона *}
+{assign var="title" value=$title|default:"no title"}
+
+{* если переменная $title была пустой, то сейчас она содержит "no title" *}
+{$title}
+
+
+
+ Присвоение переменной заголовка (title) заголовку шаблона.
+
+ Rогда большинство ваших шаблонов имеют похожие верхние части
+ и нижние, то имеет смысл вынести их в отдельные файлы. Но если
+ шапка должна иметь различные заголовки на различных страницах?
+ Вы можете передать заголовок в шапку, когда она присоединяеться.
+
+
+Присвоение переменной заголовка (title) заголовку шаблона.
+
+
+mainpage.tpl
+------------
+
+{include file="header.tpl" title="Main Page"}
+{* тело шаблона *}
+{include file="footer.tpl"}
+
+
+archives.tpl
+------------
+
+{config_load file="archive_page.conf"}
+{include file="header.tpl" title=#archivePageTitle#}
+{* тело шаблонаe *}
+{include file="footer.tpl"}
+
+
+header.tpl
+----------
+<HTML>
+<HEAD>
+<TITLE>{$title|default:"BC News"}</TITLE>
+</HEAD>
+<BODY>
+
+
+footer.tpl
+----------
+</BODY>
+</HTML>
+
+
+ Если выводится главная страница, то заголовок будет "Main Page",
+ если архивы, то заголовк берется из файла конфигурации. Если
+ заголовок будет пустой, то выведеться значение по умолчанию "BC News".
+
+
+
+ Даты
+
+ Обычно даты в Smarty всегда передаются как timestamps, что
+ позволяет проектировщикам шаблона использовать date_format
+ для полного над форматированием даты, и также делает легким
+ сравнение дат если необходимо.
+
+
+ ЗАМЕЧАНИЕ: От Smarty 1.4.0 вы можете передавать даты как unix
+ timestamps, mysql timestamps, или любые другие даты, которые
+ обработаются strtotime().
+
+
+использование date_format
+
+{$startDate|date_format}
+
+ВЫВОД:
+
+Jan 4, 2001
+
+
+{$startDate|date_format:"%Y/%m/%d"}
+
+ВЫВОД:
+
+2001/01/04
+
+
+{if $date1 < $date2}
+ ...
+{/if}
+
+
+ Когда {html_select_date} используется в шаблоне, программисты обычно
+ хотят получить дату виде timestamp. Фот функция, которая поможет это
+ сделать.
+
+
+Преобразование элементов формы ввода даты назад к timestamp
+
+// Предполагается, что ваши элементы формы названы
+// startDate_Day, startDate_Month, startDate_Year
+
+$startDate = makeTimeStamp($startDate_Year,$startDate_Month,$startDate_Day);
+
+function makeTimeStamp($year="",$month="",$day="")
+{
+ if(empty($year))
+ $year = strftime("%Y");
+ if(empty($month))
+ $month = strftime("%m");
+ if(empty($day))
+ $day = strftime("%d");
+
+ return mktime(0,0,0,$month,$day,$year);
+}
+
+
+
+ WAP/WML
+
+ WAP/WML шаблоны требуют, чтобы PHP content-type заголовки были
+ переданы вместе с шаблоном. Простейший путь - написать
+ пользовательскую функцию, которая будет выводить заголовки.
+ Так как мы будем пользоваться тэгами insert то заголовки не будут
+ кэшироваться. Так же ничего не должно выводиться в браузер до
+ шаблона, иначе заголовки могут быть неправильно восприняты.
+
+
+Bспользование insert для записи WML Content-Type заголовков
+
+// Apache должен быть сконфигурирован с .wml расширением!
+// поместите эту функцию в приложение, или в Smarty.addons.php
+function insert_header() {
+ // this function expects $content argument
+ extract(func_get_arg(0));
+ if(empty($content))
+ return;
+ header($content);
+ return;
+}
+
+// шаблон ДОЛЖЕН начинаться с тэга insert. Пример:
+{insert name=header content="Content-Type: text/vnd.wap.wml"}
+
+<?xml version="1.0"?>
+<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
+
+<!-- begin new wml deck -->
+<wml>
+<!-- begin first card -->
+<card>
+<do type="accept">
+<go href="#two"/>
+</do>
+<p>
+Welcome to WAP with Smarty!
+Press OK to continue...
+</p>
+</card>
+<!-- begin second card -->
+<card id="two">
+<p>
+Pretty easy isn't it?
+</p>
+</card>
+</wml>
+
+
+
+ Составные шаблоны
+
+ This tip is a bit of a hack, but still a neat idea. Use at your own
+ risk. ;-)
+
+
+ Traditionally, programming templates into your applications goes as
+ follows: First, you accumulate your variables within your PHP
+ application, (maybe with database queries.) Then, you instantiate your
+ Smarty object, assign the variables and display the template. So lets
+ say for example we have a stock ticker on our template. We would
+ collect the stock data in our application, then assign these variables
+ in the template and display it. Now wouldn't it be nice if you could
+ add this stock ticker to any application by merely including the
+ template, and not worry about fetching the data up front?
+
+
+ You can embed PHP into your templates with the {php}{/php} tags.
+ With this, you can setup self contained templates with their own
+ data structures for assigning their own variables. With the logic
+ embedded like this, you can keep the template & logic together. This
+ way no matter where the template source is coming from, it is always
+ together as one component.
+
+
+componentized template
+
+{* Smarty *}
+
+{php}
+
+ // setup our function for fetching stock data
+ function fetch_ticker($symbol,&$ticker_name,&$ticker_price) {
+ // put logic here that fetches $ticker_name
+ // and $ticker_price from some resource
+ }
+
+ // call the function
+ fetch_ticker("YHOO",$ticker_name,$ticker_price);
+
+ // assign template variables
+ $this->assign("ticker_name",$ticker_name);
+ $this->assign("ticker_price",$ticker_price);
+
+{/php}
+
+Stock Name: {$ticker_name} Stock Price: {$ticker_price}
+
+
+ As of Smarty 1.5.0, there is even a cleaner way. You can include php in
+ your templates with the {include_php ...} tag. This way you can keep
+ your PHP logic separated from the template logic. See the include_php function for
+ more information.
+
+
+componentized template with include_php
+
+load_ticker.php
+---------------
+
+<?php
+ // setup our function for fetching stock data
+ function fetch_ticker($symbol,&$ticker_name,&$ticker_price) {
+ // put logic here that fetches $ticker_name
+ // and $ticker_price from some resource
+ }
+
+ // call the function
+ fetch_ticker("YHOO",$ticker_name,$ticker_price);
+
+ // assign template variables
+ $this->assign("ticker_name",$ticker_name);
+ $this->assign("ticker_price",$ticker_price);
+?>
+
+
+index.tpl
+---------
+
+{* Smarty *}
+
+{include_php file="load_ticker.php"}
+
+Stock Name: {$ticker_name} Stock Price: {$ticker_price}
+
+
+
+ Obfuscating E-mail Addresses
+
+ Do you ever wonder how your E-mail address gets on so many spam mailing
+ lists? One way spammers collect E-mail addresses is from web pages. To
+ help combat this problem, you can make your E-mail address show up in
+ scrambled javascript in the HTML source, yet it it will look and work
+ correctly in the browser. This is done with the mailto plugin.
+
+
+Example of Obfuscating an E-mail Address
+
+
+index.tpl
+---------
+
+Send inquiries to
+{mailto address=$EmailAddress encode="javascript" subject="Hello"}
+
+
+
+
+ Technical Note
+
+ This method isn't 100% foolproof. A spammer could conceivably program his
+ e-mail collector to decode these values, but not likely.
+
+
+
+
+
diff --git a/docs/ru/appendixes/troubleshooting.xml b/docs/ru/appendixes/troubleshooting.xml
new file mode 100644
index 00000000..22b09657
--- /dev/null
+++ b/docs/ru/appendixes/troubleshooting.xml
@@ -0,0 +1,77 @@
+
+
+
+ Troubleshooting
+
+
+ Smarty/PHP errors
+
+ Smarty может распознать много ошибок типа отсутствующих признаков признака
+ Или уродливые переменные названия(имена). Если это случается, Вы будете видеть ошибку
+ Подобный следующему:
+
+ Smarty can catch many errors such as missing tag attributes
+ or malformed variable names. If this happens, you will see an error
+ similar to the following:
+
+
+
+Smarty errors
+
+Warning: Smarty: [in index.tpl line 4]: syntax error: unknown tag - '%blah'
+ in /path/to/smarty/Smarty.class.php on line 1041
+
+Fatal error: Smarty: [in index.tpl line 28]: syntax error: missing section name
+ in /path/to/smarty/Smarty.class.php on line 1041
+
+
+
+ Smarty shows you the template name, the line number and the error.
+ After that, the error consists of the actual line number in the Smarty
+ class that the error occured.
+
+
+
+ There are certain errors that Smarty cannot catch, such as missing
+ close tags. These types of errors usually end up in PHP compile-time
+ parsing errors.
+
+
+
+PHP parsing errors
+
+Parse error: parse error in /path/to/smarty/templates_c/index.tpl.php on line 75
+
+
+
+ When you encounter a PHP parsing error, the error line number will
+ correspond to the compiled PHP script, not the template itself. Usually
+ you can look at the template and spot the syntax error. Here are some
+ common things to look for: missing close tags for {if}{/if} or
+ {section}{/section}, or syntax of logic within an {if} tag. If you
+ can't find the error, you might have to open the compiled PHP file and
+ go to the line number to figure out where the corresponding error is in
+ the template.
+
+
+
+
diff --git a/docs/ru/bookinfo.xml b/docs/ru/bookinfo.xml
new file mode 100755
index 00000000..0eef6623
--- /dev/null
+++ b/docs/ru/bookinfo.xml
@@ -0,0 +1,44 @@
+
+
+
+ Smarty - машина сборки PHP шаблонов
+
+
+ MonteOhrt <monte@ispi.net>
+
+
+ AndreiZmievski <andrei@php.net>
+
+
+
+
+ SergeiSuslenkov <student@bsuir-fcd.org>
+
+
+ &build-date;
+
+ 2001-2004
+ ispi of Lincoln, Inc.
+
+
+
+
diff --git a/docs/ru/designers/chapter-debugging-console.xml b/docs/ru/designers/chapter-debugging-console.xml
new file mode 100644
index 00000000..e6bbc881
--- /dev/null
+++ b/docs/ru/designers/chapter-debugging-console.xml
@@ -0,0 +1,55 @@
+
+
+
+ Консоль Отладки
+
+ В Smarty включена консоль отладки. Консоль позволяет узнать все включенные
+ файлы, переменные присвоенные или из файлов конфигураций для текущей
+ обработки шаблона. Шаблон "debug.tpl", поставляемый вместе со Smarty,
+ управляет видом консоли. Установите опцию Smarty $debugging в true, и если надо,
+ укажите в $debug_tpl путь ресурса шаблона debug.tpl (по умолчанию это SMARTY_DIR).
+ Когда вы загружаете страницу, должно появиться всплывающие окно и вывести консоль
+ отладки. Для вывода доступных переменных для специфического шаблона, см функцию
+ {debug}. Для отключения консоли
+ отладки, установите $debugging в false. Можно также опционально включить консоль
+ отладки, добавив SMARTY_DEBUG в URL, если включена опция $debugging_ctrl.
+
+
+ Техническое Замечание
+
+ Консоль отладки не работает, когда используется функция API fetch().
+ Необходимо использовать только функцию display(). Она генерирует
+ javascript код вначале каждой сгенерированной страницы. Если вам не
+ нравиться javascript, можно отредатировать debug.tpl для изменения
+ способа отображения по вашему вкусу. Отладочная информация не кэшируется
+ и в отладочную информацию не включается информация о debug.tpl.
+
+
+
+
+ Время загрузки каждого шаблона и файла конфигурации выводятся в секундах или
+ в милисекундах.
+
+
+
+
diff --git a/docs/ru/designers/config-files.xml b/docs/ru/designers/config-files.xml
new file mode 100644
index 00000000..49fbb30f
--- /dev/null
+++ b/docs/ru/designers/config-files.xml
@@ -0,0 +1,90 @@
+
+
+
+ Файлы Конфигурации
+
+ Файлами конфигурации дизайнеру удобно управлять глобальными
+ переменными из одного файлаю. На пример, цвета шаблонов. Обычно, если
+ вы хотите сменить цветувую схему, то необходимо просмотреть каждый шаблон
+ и в них изменять цвета. С помощью файла конфигурации, все цвета могут быть
+ вынесены в отдельный файл, и только один файл надо будет исправлять.
+
+
+ Пример файла конфигурации
+
+# глобальные переменные
+pageTitle = "Main Menu"
+bodyBgColor = #000000
+tableBgColor = #000000
+rowBgColor = #00ff00
+
+[Customer]
+pageTitle = "Customer Info"
+
+[Login]
+pageTitle = "Login"
+focus = "username"
+Intro = """Значение, которое знаимает больше
+ чем одну строку должно быть заключено
+ в тройные кавычки."""
+
+# спрятанная секция
+[.Database]
+host=my.domain.com
+db=ADDRESSBOOK
+user=php-user
+pass=foobar
+
+
+ Значения переменных могут заключаться в кавычки, но это не обязательно.
+ Можно использовать как двойные, так и одинарные кавычки. Есил у вас есть
+ знчение, которое знанимает больше, чем одну строку, необходимо заключить
+ его в тройные кавычки ("""). Можно включать комментарии в файл конфигурации
+ используя любой синтакиси, который не являеться допустимым синтаксисом
+ файлов конфигурации. Рекомендуется исползовать символ #
+ (hash) в начале строки.
+
+
+ Пример файла конфигурации имеет две секции. Названия секций заключены в
+ квадратные скобки []. Навзания секций могут быть произвольными строками,
+ не содержащими символов [ или ]. Четыре
+ переменные вначале - глобальные переменные или переменные вне секций.
+ Эти переменные всегда загружаются из файла конфигурации. Если загружаеться
+ определенная секция, то глобалные переменные и переменные из этой секции
+ становятся доступными. Если переменная существует как глобальная, так и
+ внутри секции, то используется версия из секции. Если есть две одинаковые
+ переменные в пределах одной секции, то используеться последний встретившийся
+ вариант.
+
+
+ Файлы конфигурации загружаются в шаблон в помощью функции
+ config_load.
+
+
+ Можно спрятать отдельные переменные или целые секции, добавив к названию
+ точку в начале. Это полезно, когда ваше приложение берет некоторые
+ переменные, не нужные в шаблоне, из файла конфигурации. Если шаблоны могут
+ редактировать третьи лица, то вы можете быть спокойны за ценную информацию
+ из файлов конфигураций: они не смогут ее загрузить в шаблон.
+
+
+
diff --git a/docs/ru/designers/language-basic-syntax.xml b/docs/ru/designers/language-basic-syntax.xml
new file mode 100644
index 00000000..fff5f9e6
--- /dev/null
+++ b/docs/ru/designers/language-basic-syntax.xml
@@ -0,0 +1,159 @@
+
+
+
+ Базовый синтаксис
+
+ Все тэги шаблонов Smarty располагаются между специальными
+ разделителями. По умолчанию это { и
+ }, но они могут быть изменены.
+
+
+ Для наших примеров мы будем использовать стандартные разделители.
+ Smarty все содержимое вне разделителей отображает как статическое
+ содержание, без изменений. Когда Smarty встречает тэги, то пытается
+ интерпретировать их и вывести вместо них соответствующий результат.
+
+
+
+ Комментарии
+
+ Комментарии в шаблонах заключаются в звездочки(*) окруженные .
+ разделителями, например: {* это комментарий *}. Комментарии не
+ отображаются в выводе шаблона. Они используются для внутренних
+ примечаний в шаблонах.
+
+
+ Комментарии
+
+{* шаблон Smarty *}
+
+{* подключаем шапку шаблона *}
+{include file="header.tpl"}
+
+{include file=$includeFile}
+
+{include file=#includeFile#}
+
+{* выпадающий список *}
+<SELECT name=company>
+{html_options values=$vals selected=$selected output=$output}
+</SELECT>
+
+
+
+
+ Функции
+
+ Каждый тэг Smarty либо выводит значение переменной, либо вызывает
+ некоторую функцию. Для вызова функции надо название функции и ее
+ параметры заключить в разделители, например: {funcname attr1="val"
+ attr2="val"}.
+
+
+ Синтаксис функций
+
+{config_load file="colors.conf"}
+
+{include file="header.tpl"}
+
+{if $highlight_name}
+ Welcome, <font color="{#fontColor#}">{$name}!</font>
+{else}
+ Welcome, {$name}!
+{/if}
+
+{include file="footer.tpl"}
+
+
+ И встроенные, и пользовательские функции используются с одинаковым
+ синтаксисом. Встроенные функции реализованы внутри Smarty и не
+ могут быть изменены или переопределены. Это такие функции, как
+ if, section,
+ strip. Пользовательские функции реализуются через
+ плагины. Они могут быть изменены по вашему желанию, также вы можете
+ написать новые. Примеры пользовательских функций:
+ html_options, html_select_date.
+
+
+
+
+ Параметры
+
+ Большинство функций принимает параметры, которые уточняют или
+ изменяют ее поведение. Параметры в Smarty очень похожи на
+ параметры в HTML. Не обязательно заключать статические значения
+ в кавычки, хотя текст рекомендуется заключать в кавычки. Переменные
+ также могут быть использованы в качестве параметров, и не должны
+ заключаться в кавычки.
+
+
+ Некоторые параметры принимают логические значения (правда или ложь).
+ Они могут быть указаны словами true,
+ on, и yes, или
+ false, off, и
+ no без кавычек.
+
+
+ Синтаксис параметров функции
+
+{include file="header.tpl"}
+
+{include file=$includeFile}
+
+{include file=#includeFile#}
+
+{html_select_date display_days=yes}
+
+<SELECT name=company>
+{html_options values=$vals selected=$selected output=$output}
+</SELECT>
+
+
+
+ Внедренные переменные в двойных кавычках
+
+ Smarty распознает переменные, если они встречаются в строках,
+ заключенных в двойные кавычки. Распознаются переменные,
+ состоящие из чисел, букв, символов _,[,]. Если надо использовать
+ другие символы для указания переменной (точка или -> (ссылка в
+ объект)), то переменная необходимо заключить в обратные кавычки ``.
+
+
+ Синтаксис внедренных переменных
+
+Пример синтаксиса:
+{func var="test $foo test"} <-- ищет $foo
+{func var="test $foo_bar test"} <-- ищет $foo_bar
+{func var="test $foo[0] test"} <-- ищет $foo[0]
+{func var="test $foo[bar] test"} <-- ищет $foo[bar]
+{func var="test $foo.bar test"} <-- ищет $foo (не $foo.bar)
+{func var="test `$foo.bar` test"} <-- ищет $foo.bar
+
+Практические примеры:
+{include file="subdir/$tpl_name.tpl"} <-- заменит $tpl_name на ее значение
+{cycle values="one,two,`$smarty.config.myval`"} <-- надо заключать в обратные кавычки
+
+
+
+
+
diff --git a/docs/ru/designers/language-builtin-functions.xml b/docs/ru/designers/language-builtin-functions.xml
new file mode 100644
index 00000000..0c29b93b
--- /dev/null
+++ b/docs/ru/designers/language-builtin-functions.xml
@@ -0,0 +1,1430 @@
+
+
+
+ Встроенные функции
+
+ В smarty включены несколько встроенных функций. Встроенные функции
+ интегрированы в язык шаблонов. Нельзя создавать пользовательские
+ функции с такими же названиями или как-либо модифицировать
+ встроенные функции..
+
+
+ capture
+
+ capture используется, чтобы присвоить вывод шаблона какой-либо
+ переменной вместо его вывода. Любое содержание между {capture
+ name="foo"} и {/capture} сохраняется в переменную, указанную в
+ атрибуте name. Затем его можно использовать в шаблоне с помощью
+ специальной переменной $smarty.capture.foo, где foo - значение,
+ переданное атрибуту name. Если аттрибут name не указан, то
+ используется default. Каждая комманда {capture} должна иметь пару
+ {/capture}. capture поддерживает вложение.
+
+
+ Техническое замечание
+
+ Smarty 1.4.0 - 1.4.4 помещало захваченный вывод в переменную $return.
+ С версии 1.4.5 поведение было изменено на использование атрибута name,
+ так что обновите ваши шаблоны соответственно.
+
+
+
+
+ Будте осторожны, сохраняя вывод комманды insert.
+ Есил вы используете кэширование и встречаются комманды
+ insert в области кэированния, то
+ не сохраняйте данный вывод.
+
+
+
+
+ Сохранение вывода шаблона
+
+{* we don't want to print a table row unless content is displayed *}
+{capture name=banner}
+{include file="get_banner.tpl"}
+{/capture}
+{if $smarty.capture.banner ne ""}
+ <tr>
+ <td>
+ {$smarty.capture.banner}
+ </td>
+ </tr>
+{/if}
+
+
+
+
+ config_load
+
+
+
+
+
+
+
+
+
+ Имя аттрибута
+ Тип
+ Обязателен
+ По умолчанию
+ Описание
+
+
+
+
+ file
+ строка (string)
+ Да
+ n/a
+ Имя config файла для загрузки
+
+
+ section
+ строка (string)
+ Нет
+ n/a
+ Имя секции для загрузки
+
+
+ scope
+ строка (string)
+ Нет
+ local
+
+ Способ обработки области видимости загруженных
+ переменных. Должен быть одинм из local, parent
+ или global. local означает, что переменные загружены
+ в контекст локального шаблона. parent означает, что
+ переменные загружены в контекст как локального, так
+ и родительского шаблона. global означает, что
+ переменные доступны из любого шаблона.
+
+
+
+ global
+ логический (boolean)
+ Нет
+ No
+
+ Доступны ли переменные из родительского шаблона.
+ Аналогичен scope=parent. ЗАМЕЧАНИЕ: Этот аттрибут
+ перекрывается аттрибутом scope, но все еще
+ поддерживается. Если scope указан, то это значение
+ игнорируется.
+
+
+
+
+
+
+ Эта функция используется для загрузки переменных в
+ шаблон из файлов конфигруации. Смотри
+ Файлы конфигурации
+ для дополнительной информации.
+
+
+функция config_load
+
+
+{config_load file="colors.conf"}
+
+<html>
+<title>{#pageTitle#}</title>
+<body bgcolor="{#bodyBgColor#}">
+<table border="{#tableBorderSize#}" bgcolor="{#tableBgColor#}">
+ <tr bgcolor="{#rowBgColor#}">
+ <td>First</td>
+ <td>Last</td>
+ <td>Address</td>
+ </tr>
+</table>
+</body>
+</html>
+
+
+ Файлы конфигурации также могут содержать секции. Можно загрузить
+ переменные из определенной секции, указав аттрибут
+ section.
+
+
+ ЗАМЕЧАНИЕ: Секции файлов конфигурации и встроенная
+ функция section не имеют ничего общего, кроме
+ схожего названия.
+
+
+функция config_load с указанием секции
+
+{config_load file="colors.conf" section="Customer"}
+
+<html>
+<title>{#pageTitle#}</title>
+<body bgcolor="{#bodyBgColor#}">
+<table border="{#tableBorderSize#}" bgcolor="{#tableBgColor#}">
+ <tr bgcolor="{#rowBgColor#}">
+ <td>First</td>
+ <td>Last</td>
+ <td>Address</td>
+ </tr>
+</table>
+</body>
+</html>
+
+
+
+ foreach,foreachelse
+
+
+
+
+
+
+
+
+
+ Имя аттрибута
+ Тип
+ Обязателен
+ По умолчанию
+ Описание
+
+
+
+
+ from
+ строка (string)
+ Да
+ n/a
+ Имя массива, по которому надо пройтись
+
+
+ item
+ строка (string)
+ Да
+ n/a
+ Имя переменной, которая будет выступать в
+ качестве значения текущего елемента
+
+
+ key
+ строка (string)
+ Нет
+ n/a
+ Имя переменной, которая будет выступать в
+ качестве ключа текущего елемента
+
+
+ name
+ строка (string)
+ Нет
+ n/a
+ Название цикла foreach для доступа к его
+ свойствам
+
+
+
+
+
+ Циклы foreach являются альтернативой
+ циклам section. Циклы
+ foreach используются для прохождения
+ по одному массиву. Синтаксис foreach
+ намного проще, чем section, но его
+ можно использовать только для одного массива.
+ Тэг foreach должен иметь в пару тэг
+ /foreach. Обязательные параметры -
+ from и item. Название
+ цикла foreach может быть любой последовательностью букв, цифр
+ и знаков подчеркиваний _. Циклы foreach
+ могут быть вложенные, и имена вложенных циклов должны быть
+ уникальные. Переменная from (обычно
+ массив значений) указывает количество итераций цикла.
+ foreachelse выполняется, если нету значений
+ в переменной from.
+
+
+foreach
+
+
+{* выводятся все значния массива $custid *}
+{foreach from=$custid item=curr_id}
+ id: {$curr_id}<br>
+{/foreach}
+
+OUTPUT:
+
+id: 1000<br>
+id: 1001<br>
+id: 1002<br>
+
+
+
+foreach key
+
+{* The key contains the key for each looped value
+
+assignment looks like this:
+
+$smarty->assign("contacts", array(array("phone" => "1", "fax" => "2", "cell" => "3"),
+ array("phone" => "555-4444", "fax" => "555-3333", "cell" => "760-1234")));
+
+*}
+
+{foreach name=outer item=contact from=$contacts}
+ {foreach key=key item=item from=$contact}
+ {$key}: {$item}<br>
+ {/foreach}
+{/foreach}
+
+OUTPUT:
+
+phone: 1<br>
+fax: 2<br>
+cell: 3<br>
+phone: 555-4444<br>
+fax: 555-3333<br>
+cell: 760-1234<br>
+
+
+
+ Циклы foreach имеют свои свойства, доступ к которым реализуется через
+ {$smarty.foreach.foreachname.varname}, где foreachname это название цикла
+ (значение аттрибута name), а varname - имя свойства.
+
+
+
+
+ iteration
+
+ Количество отработанных итераций.
+
+
+ Отсчет начинается с 1 и увеличивается на единицу на каждой итерации.
+
+
+
+
+ first
+
+ first устанавливается в true, если текущая итерация первая.
+
+
+
+
+ last
+
+ last устанавливается в true, если текущая итерация последняя.
+
+
+
+
+ show
+
+ Аттрибут show может принимать логические
+ значения (истина или ложь). Если ложь, то цикл foreach не будет
+ отображаться. Если присутствует тэг foreachelse, то он будет
+ отображен.
+
+
+
+
+ total
+
+ total хранит количество итераций цикла.
+ Может быть использовано как в цикле, так и вне его..
+
+
+
+
+
+
+ include
+
+
+
+
+
+
+
+
+
+ Имя аттрибута
+ Тип
+ Обязателен
+ По умолчанию
+ Описание
+
+
+
+
+ file
+ строка (string)
+ Да
+ n/a
+ Имя файла шаблона для включения
+
+
+ assign
+ строка (string)
+ Нет
+ n/a
+ Имя переменной, которой присвоится вывод
+ шаблона
+
+
+ [var ...]
+ [var type]
+ Нет
+ n/a
+ Переменные, переданные в локальную область
+ включаемого шаблона
+
+
+
+
+
+ Тэги include используются для включения других шаблонов в текущий.
+ Любые переменные, доступные в текущем шаблоне, доступны и во
+ включаемом. Тэг include должен иметь аттрибут "file", который
+ указывает имя ресурса шаблона.
+
+
+ Опциональный аттрибут assign указывает, что
+ вывод шаблона будет присвоен переменной вместо отображения.
+
+
+функция include
+
+{include file="header.tpl"}
+
+{* тело шаблона *}
+
+{include file="footer.tpl"}
+
+
+ Вы также можете передать переменные в подключаемый шаблон в
+ виде атрибутов. Любая переменная, переданная в подключаемый
+ шаблон, доступны только в области видимости подключаемого
+ файла. Переданные переменные имеют преимущество перед
+ существующими переменными с аналогичными именами.
+
+
+функция include: передача переменных
+
+{include file="header.tpl" title="Main Menu" table_bgcolor="#c0c0c0"}
+
+{* тело шаблона *}
+
+{include file="footer.tpl" logo="http://my.domain.com/logo.gif"}
+
+
+ Для подключения файлов вне папки $template_dir можно
+ указывать файл с помощью ресурсов.
+
+
+функция include: пример использвоания ресурсов
+
+{* абсолютный путь к файлу *}
+{include file="/usr/local/include/templates/header.tpl"}
+
+{* абсолютный путь к файлу (аналогично) *}
+{include file="file:/usr/local/include/templates/header.tpl"}
+
+{* абсолютный путь к файлу в стиле windows (НЕОБХОДИМО использвоать превикс "file:") *}
+{include file="file:C:/www/pub/templates/header.tpl"}
+
+{* подключить шаблон из ресурса "db" *}
+{include file="db:header.tpl"}
+
+
+
+ include_php
+
+
+
+
+
+
+
+
+
+ Имя аттрибута
+ Тип
+ Обязателен
+ По умолчанию
+ Описание
+
+
+
+
+ file
+ строка (string)
+ Да
+ n/a
+ Имя подключаемого php файла
+
+
+ once
+ логический (boolean)
+ Нет
+ true
+ Укзаывает подключать файл или нет,
+ если он уже был однажды подключен
+
+
+ assign
+ строка (string)
+ Нет
+ n/a
+ Название переменной, которой будет
+ присвоен вывод include_php
+
+
+
+
+
+ Тэг include_php используется для подключения php скрипта в шаблон.
+ Если security включен, то php скрипт должен быть расположен в папке
+ $trusted_dir. Тэг include_php должен иметь атрибут "file", который
+ указывает путь подключаемого php файла (относительный к
+ $trusted_dir или абсолютный путь).
+
+
+ include_php это хороший путь для управления компонентными шаблонами,
+ держать PHP код вне файлов шаблонов. Допустим у вас есть шаблон,
+ который выводит навигацию сайта, информация о которой динамически
+ загружается из базы данных. Вы можете хранить php файл, который
+ получает данные из базы данных, в отдельной папке, и подключать его
+ в начале шаблона. Теперь можно подключать этот файл шаблона в любом
+ месте, не волнуясь о происхождении информации (база данных или нет).
+
+
+ По умолчанию, php файлы подключаются только один раз, даже если
+ вызываются несколько раз в шаблоне. Можно указать, что файл должен
+ быть подключен каждый раз, указав атрибут once.
+ Установив once в ложь (false) указывает, что файл должен быть
+ подключен вне зависимости от того, был ли он подключен раньше.
+
+
+ Можно указать опциональный атрибут assign,
+ который указывает имя переменной, которой будет присвоен вывод
+ include_php вместо отображения.
+
+
+ Объект smarty доступен в подключаемом php файле как $this.
+
+
+функция include_php
+
+load_nav.php
+-------------
+
+<?php
+
+ // Загрузка переменных из базы данных mysql и передача их в шаблон
+ require_once("MySQL.class.php");
+ $sql = new MySQL;
+ $sql->query("select * from site_nav_sections order by name",SQL_ALL);
+ $this->assign('sections',$sql->record);
+
+?>
+
+
+index.tpl
+---------
+
+{* абсолютный путь или относительный относительно $trusted_dir *}
+{include_php file="/path/to/load_nav.php"}
+
+{foreach item="curr_section" from=$sections}
+ <a href="{$curr_section.url}">{$curr_section.name}</a><br>
+{/foreach}
+
+
+
+ insert
+
+
+
+
+
+
+
+
+
+ Имя аттрибута
+ Тип
+ Обязателен
+ По умолчанию
+ Описание
+
+
+
+
+ name
+ строка (string)
+ Да
+ n/a
+ Имя функции вставки (insert_name)
+
+
+ assign
+ строка (string)
+ Нет
+ n/a
+ Имя переменной, которой будет
+ присвоен вывод
+
+
+ script
+ строка (string)
+ Нет
+ n/a
+ Bмя php файла, который будет подключен
+ перед вызовом функции вставки
+
+
+ [var ...]
+ [var type]
+ Нет
+ n/a
+ Переменные, передаваемые в
+ функцию вставки
+
+
+
+
+
+ Тэг insert очень похож на тэг include, кроме случая, когда
+ кэширование включено. Insert
+ тэг не кешируется. Он будет выполнен каждый раз, при обращении
+ к шаблону.
+
+
+ Допустим вы имеете шаблон с баннером вверху страницы.
+ Баннер может содержать любую смесь HTML, исзображенй,
+ flash и т.д., то есть нельзя использовать просто
+ статическую ссылку, и мы не хотим, чтобы код баннера
+ кэшировался с остальной страницей. Тогда используем
+ тэг insert: шаблон знает значения #banner_location_id# и
+ #site_id# (взяты из файла конфигурации) и должен вызвать
+ функцию, чтобы получить код баннера.
+
+
+функция insert
+
+{* пример установки баннера *}
+{insert name="getBanner" lid=#banner_location_id# sid=#site_id#}
+
+
+ В этом примере мы используем имя "getBanner" и передаем параметры
+ #banner_location_id# и #site_id#. Smarty попробует вызывать
+ функцию insert_getBanner() в вашей PHP программе, передав
+ значения #banner_location_id# и #site_id# первым параметром в виде
+ ассоциативного массива. Все имена функций вставки должны начинаться
+ с "insert_" для предотвращения возможных конфликтов имен. Функция
+ insert_getBanner() должна обработать переданные переменные и
+ вернуть результат. Он будет отображен в шаблоне вместо тэга insert.
+ В данном случае Smarty вызовет функцию insert_getBanner(array("lid"
+ => "12345","sid" => "67890")); и выведет результат на месте тэга
+ insert.
+
+
+ Если указан аттрибут "assign", то вывод функции вставки будет
+ присвоен указанной переменной вместо отображения. ЗАМЕЧАНИЕ:
+ присвоение вывода тэга insert переменной шаблона не очень
+ полезно, когда кеширование включено.
+
+
+ Если указан аттрибут "script", то указанный php файл будет
+ подключен (только однажды) перед вызовом функции вставки.
+ Это удобно, когда функция может не сущетсвовать, и должен быть
+ подключен php файл, чтобы определить функцию. Путь к файлу
+ должен быть либо абслотныю, либо относительным относительно
+ $trusted_dir. Когда security активирована, то php файл должен
+ быть в папке $trusted_dir.
+
+
+ Обьект Smarty передается в функцию как второй параметр.
+ Так вы можете использовать и модифицировать информацию
+ из объекта Smarty в функциях вставки.
+
+
+ Техническое Замечание
+
+ Возможно иметь части шаблона не кешированными.
+ Если активировано кэширование,
+ то тэг insert все равно не будет кэширован. Он будет вызван
+ каждый раз при генерации страницы, даже из кешированных
+ страниц. Это полезно для таких вещей, как баннеры, опросы,
+ прогнозы погоды, результаты поиска, области обратной связи
+ и т.д.
+
+
+
+
+ if,elseif,else
+
+ Конструкция if в Smarty такая же гибкая, как и аналогичная
+ конструкциия в php, только с несколько расширенными
+ возможностями.
+ with a few added features for the template engine.
+ Каждый тэг if должен иметь пару
+ /if. else и
+ elseif так же допустимы. "eq", "ne",
+ "neq", "gt", "lt", "lte", "le", "gte" "ge", "is even",
+ "is odd", "is not even", "is not odd", "not", "mod",
+ "div by", "even by", "odd by", "==", "!=", ">", "<", "<=",
+ ">=" -- допустимые квалификаторы условий. Они должны быть
+ отделены от окружающих елементов пробелами.
+
+
+кострукция if
+
+{if $name eq "Fred"}
+ Welcome Sir.
+{elseif $name eq "Wilma"}
+ Welcome Ma'am.
+{else}
+ Welcome, whatever you are.
+{/if}
+
+{* пример с логикой ИЛИ ("or") *}
+{if $name eq "Fred" or $name eq "Wilma"}
+ ...
+{/if}
+
+{* аналогичен предыдущему *}
+{if $name == "Fred" || $name == "Wilma"}
+ ...
+{/if}
+
+{* следующий синтаксис не будет работать. квалификаторы условий должны
+ быть отделены от окружающих элементов пробелами *}
+{if $name=="Fred" || $name=="Wilma"}
+ ...
+{/if}
+
+
+{* допускаются скобки *}
+{if ( $amount < 0 or $amount > 1000 ) and $volume >= #minVolAmt#}
+ ...
+{/if}
+
+{* можно также вызывать встроенные функции php *}
+{if count($var) gt 0}
+ ...
+{/if}
+
+{* проверка значения на четность *}
+{if $var is even}
+ ...
+{/if}
+{if $var is odd}
+ ...
+{/if}
+{if $var is not odd}
+ ...
+{/if}
+
+{* проверка на делимость на 4 *}
+{if $var is div by 4}
+ ...
+{/if}
+
+{* проверка на "четность" групируя по 2. т.е.,
+0=четно, 1=четно, 2=нечетно, 3=нечетно, 4=четно, 5=четно, и т.д. *}
+{if $var is even by 2}
+ ...
+{/if}
+
+{* 0=четно, 1=четно, 2=четно, 3=нечетно, 4=нечетно, 5=нечетно, и т.д. *}
+{if $var is even by 3}
+ ...
+{/if}
+
+
+
+ ldelim,rdelim
+
+ ldelim и rdelim используются для отображения разделителей.
+ В нашем случае это "{" и "}". Smarty всегда пытаеться
+ интерпретировать разделители, то есть это это единственный
+ способ вывнсти их.
+
+
+ldelim, rdelim
+
+{* будут выведены разделители в шаблона *}
+
+{ldelim}funcname{rdelim} is how functions look in Smarty!
+
+
+OUTPUT:
+
+{funcname} is how functions look in Smarty!
+
+
+
+ literal
+
+ Тэг Literal позволяет указать блок данных, который не должен
+ быть обработан Smarty. Это удобно для вывода javascript кода,
+ когда символы { и } могут быть не правильно поняты парсером
+ шаблонов. Все, что окружено тэгами {literal} и {/literal}
+ не обрабатывается и просто отображается как есть.
+
+
+тэг literal
+
+{literal}
+ <script language=javascript>
+
+ <!--
+ function isblank(field) {
+ if (field.value == '')
+ { return false; }
+ else
+ {
+ document.loginform.submit();
+ return true;
+ }
+ }
+ // -->
+
+ </script>
+{/literal}
+
+
+
+ php
+
+ Тэг php позволяет вставлять php код прямо в шаблон. Он не
+ будет как-либо изменен, независимо от $php_handling настроек.
+ Этот тэг тко для продвинутых пользователей, так как обычно
+ не требуется.
+
+
+тэг php
+
+{php}
+ // подключение php скрипта прямо
+ // из шаблона
+ include("/path/to/display_weather.php");
+{/php}
+
+
+
+ section,sectionelse
+
+
+
+
+
+
+
+
+
+ Имя аттрибута
+ Тип
+ Обязателен
+ По умолчанию
+ Описание
+
+
+
+
+ name
+ строка (string)
+ Да
+ n/a
+ Название секции
+
+
+ loop
+ [$variable_name]
+ Да
+ n/a
+ Имя переменной цикла, для определения
+ количества итераций цикла.
+
+
+ start
+ целое (integer)
+ Нет
+ 0
+ Индекс позиции, с которой будет начинаться
+ цикл. Если значение отрицательное, то начальная позиция
+ вычисляется от конца массива. Например, если в переменной
+ цикла 7 элементов и значение атрибута start равно -2, то
+ начальный индекс будет 5. Неверные значения (значения, вне
+ массива) автоматически обрезаются до ближайшего верного
+ значения.
+
+
+ step
+ целое (integer)
+ Нет
+ 1
+ Значение шага, которое используется для прохода по
+ массиву. Например, step=2 указывает обход массива
+ по элементам 0,2,4... Если шаг отрицателен, то обход
+ массива будет производится в обратном направлении.
+
+
+ max
+ целое (integer)
+ Нет
+ 1
+ Максимальное количество итераций цикла.
+
+
+ show
+ логический (boolean)
+ Нет
+ true
+ Указывает, показывать или нет эту секцию
+
+
+
+
+
+ Секции используются для обхода массива данных. Все тэги
+ section должны иметь в пару тэг
+ /section. Обязательные параметры:
+ name и loop. Имя
+ секции может быть какой угодно последовательностью букв,
+ цифр и знаков подчеркиваний. Секции могут быть вложенными.
+ Имена вложенных секций должны отличаться друг от друга.
+ Переменная цикла (обычно массив) определяет количество итериций
+ цикла. Когда отображаем переменную цикла, имя секции должно
+ быть указана после имени переменной в квадратных скобках [].
+ Тэг sectionelse выполняется, когда
+ переменная цикла пуста.
+
+
+section
+
+
+{* этот пример выведет все значения массива $custid *}
+{section name=customer loop=$custid}
+ id: {$custid[customer]}<br>
+{/section}
+
+OUTPUT:
+
+id: 1000<br>
+id: 1001<br>
+id: 1002<br>
+
+
+
+section loop variable
+
+{* Переменная цикла определяет только количество итераций цикла.
+ Вы имеете доступ к любой переменной шаблона в секции.
+ Этот пример подразумевает, что каждый из массивов $custid, $name и $address
+ содержат одинаковое количество значений *}
+{section name=customer loop=$custid}
+ id: {$custid[customer]}<br>
+ name: {$name[customer]}<br>
+ address: {$address[customer]}<br>
+ <p>
+{/section}
+
+
+OUTPUT:
+
+id: 1000<br>
+name: John Smith<br>
+address: 253 N 45th<br>
+<p>
+id: 1001<br>
+name: Jack Jones<br>
+address: 417 Mulberry ln<br>
+<p>
+id: 1002<br>
+name: Jane Munson<br>
+address: 5605 apple st<br>
+<p>
+
+
+
+имена секций
+
+{* имя секции может быть любым и используется для указания
+ данных в секции *}
+{section name=mydata loop=$custid}
+ id: {$custid[mydata]}<br>
+ name: {$name[mydata]}<br>
+ address: {$address[mydata]}<br>
+ <p>
+{/section}
+
+
+
+вложенные секции
+
+{* секции могут быть неограничено вложеннымиas. С помощью вложенных секций
+ вы можете организовать доступ к комплексным стрктурам информации, таким
+ как многомерные массивы. В данном примере $contact_type[customer] является
+ массивом, где содержатся типа контактов данного клиент. *}
+{section name=customer loop=$custid}
+ id: {$custid[customer]}<br>
+ name: {$name[customer]}<br>
+ address: {$address[customer]}<br>
+ {section name=contact loop=$contact_type[customer]}
+ {$contact_type[customer][contact]}: {$contact_info[customer][contact]}<br>
+ {/section}
+ <p>
+{/section}
+
+
+OUTPUT:
+
+id: 1000<br>
+name: John Smith<br>
+address: 253 N 45th<br>
+home phone: 555-555-5555<br>
+cell phone: 555-555-5555<br>
+e-mail: john@mydomain.com<br>
+<p>
+id: 1001<br>
+name: Jack Jones<br>
+address: 417 Mulberry ln<br>
+home phone: 555-555-5555<br>
+cell phone: 555-555-5555<br>
+e-mail: jack@mydomain.com<br>
+<p>
+id: 1002<br>
+name: Jane Munson<br>
+address: 5605 apple st<br>
+home phone: 555-555-5555<br>
+cell phone: 555-555-5555<br>
+e-mail: jane@mydomain.com<br>
+<p>
+
+
+
+секции и ассоциативные массивы
+
+{* Пример вывода ассоциативного массива. *}
+{section name=customer loop=$contacts}
+ name: {$contacts[customer].name}<br>
+ home: {$contacts[customer].home}<br>
+ cell: {$contacts[customer].cell}<br>
+ e-mail: {$contacts[customer].email}<p>
+{/section}
+
+
+OUTPUT:
+
+name: John Smith<br>
+home: 555-555-5555<br>
+cell: 555-555-5555<br>
+e-mail: john@mydomain.com<p>
+name: Jack Jones<br>
+home phone: 555-555-5555<br>
+cell phone: 555-555-5555<br>
+e-mail: jack@mydomain.com<p>
+name: Jane Munson<br>
+home phone: 555-555-5555<br>
+cell phone: 555-555-5555<br>
+e-mail: jane@mydomain.com<p>
+
+
+
+
+
+sectionelse
+
+{* sectionelse обработается, когда $custid не содержит значений *}
+{section name=customer loop=$custid}
+ id: {$custid[customer]}<br>
+{sectionelse}
+ there are no values in $custid.
+{/section}
+
+
+ Секции также имеют свои собственные аттрибуты, которые определяют
+ определенные настройки секции. Они указываются примерно так:
+ {$smarty.section.sectionname.varname}
+
+
+ ЗАМЕЧАНИЕ: Начиная со Smarty версии 1.5.0, синтаксис аттрибутов секций
+ изменился с {%sectionname.varname%} на {$smarty.section.sectionname.varname}.
+ Старый синтаксис пока поддерживается, но вы встретите только новый стиль в
+ прмиерах данного руководства.
+
+
+ index
+
+ index хранит текущий индекс цикла, начиная с 0 (или значения аттрибута
+ start), и увеличивается на единицу (или на значение аттрибута step).
+
+
+ Техническое Замечание
+
+ Если аттрибуты step и start не указаны, то index
+ аналогичен аттрибуту секции iteration, кроме того,
+ что начинается с 0, а не с 1.
+
+
+
+ аттрибут секции index
+
+ {section name=customer loop=$custid}
+ {$smarty.section.customer.index} id: {$custid[customer]}<br>
+ {/section}
+
+
+ OUTPUT:
+
+ 0 id: 1000<br>
+ 1 id: 1001<br>
+ 2 id: 1002<br>
+
+
+
+
+ index_prev
+
+ index_prev хранит предыдущий индекс цикла.
+ На первой итерации устанавливается в -1.
+
+
+ аттрибут секции index_prev
+
+ {section name=customer loop=$custid}
+ {$smarty.section.customer.index} id: {$custid[customer]}<br>
+ {* FYI, $custid[customer.index] and $custid[customer] are identical in meaning *}
+ {if $custid[customer.index_prev] ne $custid[customer.index]}
+ The customer id changed<br>
+ {/if}
+ {/section}
+
+
+ OUTPUT:
+
+ 0 id: 1000<br>
+ The customer id changed<br>
+ 1 id: 1001<br>
+ The customer id changed<br>
+ 2 id: 1002<br>
+ The customer id changed<br>
+
+
+
+
+ index_next
+
+ index_next хранит следующий индекс цикла. На последней итерации цикла
+ будет иметь значение на единицу больше текущего индекса (или на другое
+ значение, если указан аттрибут step).
+
+
+ аттрибут секции index_next
+
+ {section name=customer loop=$custid}
+ {$smarty.section.customer.index} id: {$custid[customer]}<br>
+ {* FYI, $custid[customer.index] and $custid[customer] are identical in meaning *}
+ {if $custid[customer.index_next] ne $custid[customer.index]}
+ The customer id will change<br>
+ {/if}
+ {/section}
+
+
+ OUTPUT:
+
+ 0 id: 1000<br>
+ The customer id will change<br>
+ 1 id: 1001<br>
+ The customer id will change<br>
+ 2 id: 1002<br>
+ The customer id will change<br>
+
+
+
+
+ iteration
+
+ iteration хранит текущую итерацию цикла.
+
+
+ ЗАМЕЧАНИЕ: Значение не зависит от аттрибутов start, step и max, в отличии
+ аттрибута index. Итерации также начинаются с 1, а не с 0, как index.
+ rownum является синонимом для iteration.
+
+
+ аттрибут секции iteration
+
+ {section name=customer loop=$custid start=5 step=2}
+ current loop iteration: {$smarty.section.customer.iteration}<br>
+ {$smarty.section.customer.index} id: {$custid[customer]}<br>
+ {* FYI, $custid[customer.index] and $custid[customer] are identical in meaning *}
+ {if $custid[customer.index_next] ne $custid[customer.index]}
+ The customer id will change<br>
+ {/if}
+ {/section}
+
+
+ OUTPUT:
+
+ current loop iteration: 1
+ 5 id: 1000<br>
+ The customer id will change<br>
+ current loop iteration: 2
+ 7 id: 1001<br>
+ The customer id will change<br>
+ current loop iteration: 3
+ 9 id: 1002<br>
+ The customer id will change<br>
+
+
+
+
+ first
+
+ first имеет значение истина, если текущая итерация цикла - первая.
+
+
+ аттрибут секции first
+
+ {section name=customer loop=$custid}
+ {if $smarty.section.customer.first}
+ <table>
+ {/if}
+
+ <tr><td>{$smarty.section.customer.index} id:
+ {$custid[customer]}</td></tr>
+
+ {if $smarty.section.customer.last}
+ </table>
+ {/if}
+ {/section}
+
+
+ OUTPUT:
+
+ <table>
+ <tr><td>0 id: 1000</td></tr>
+ <tr><td>1 id: 1001</td></tr>
+ <tr><td>2 id: 1002</td></tr>
+ </table>
+
+
+
+
+ last
+
+ last имеет значение истина, если текущая итерация цикла - последняя.
+ one.
+
+
+ аттрибут секции last
+
+ {section name=customer loop=$custid}
+ {if $smarty.section.customer.first}
+ <table>
+ {/if}
+
+ <tr><td>{$smarty.section.customer.index} id:
+ {$custid[customer]}</td></tr>
+
+ {if $smarty.section.customer.last}
+ </table>
+ {/if}
+ {/section}
+
+
+ OUTPUT:
+
+ <table>
+ <tr><td>0 id: 1000</td></tr>
+ <tr><td>1 id: 1001</td></tr>
+ <tr><td>2 id: 1002</td></tr>
+ </table>
+
+
+
+
+ rownum
+
+ rownum хранит текущую итерацию цикла, начиная с 1.
+ rownum - синоним для iteration.
+
+
+ аттрибут секции rownum
+
+ {section name=customer loop=$custid}
+ {$smarty.section.customer.rownum} id: {$custid[customer]}<br>
+ {/section}
+
+
+ OUTPUT:
+
+ 1 id: 1000<br>
+ 2 id: 1001<br>
+ 3 id: 1002<br>
+
+
+
+
+ loop
+
+ loop хранит последний отработанный индекс цикла. Может быть использован
+ как внутри секции, так и после нее.
+
+
+ аттрбут секции index
+
+ {section name=customer loop=$custid}
+ {$smarty.section.customer.index} id: {$custid[customer]}<br>
+ {/section}
+
+ There were {$smarty.section.customer.loop} customers shown above.
+
+ OUTPUT:
+
+ 0 id: 1000<br>
+ 1 id: 1001<br>
+ 2 id: 1002<br>
+
+ There were 3 customers shown above.
+
+
+
+
+ show
+
+ Аттрибут show может принимать логические
+ значения (истина или ложь). Если ложь, то цикл foreach не будет
+ отображаться. Если присутствует тэг foreachelse, то он будет
+ отображен.
+
+
+ аттрибут секции show
+
+ {* $show_customer_info может быть передана из PHP программы
+ укаызвая, показывать или нет эту секцию *}
+ {section name=customer loop=$custid show=$show_customer_info}
+ {$smarty.section.customer.rownum} id: {$custid[customer]}<br>
+ {/section}
+
+ {if $smarty.section.customer.show}
+ the section was shown.
+ {else}
+ the section was not shown.
+ {/if}
+
+
+ OUTPUT:
+
+ 1 id: 1000<br>
+ 2 id: 1001<br>
+ 3 id: 1002<br>
+
+ the section was shown.
+
+
+
+
+ total
+
+ total хранит количество всех итераций цикла. Может быть использвован
+ как в секции, так и после нее.
+
+
+ аттрибут секции total
+
+ {section name=customer loop=$custid step=2}
+ {$smarty.section.customer.index} id: {$custid[customer]}<br>
+ {/section}
+
+ There were {$smarty.section.customer.total} customers shown above.
+
+ OUTPUT:
+
+ 0 id: 1000<br>
+ 2 id: 1001<br>
+ 4 id: 1002<br>
+
+ There were 3 customers shown above.
+
+
+
+
+
+ strip
+
+ Часто вебдизайнеры сталкиваются с проблемой, что пробелы и переносы
+ строк влияют на отображение HTML в броузере ("фишки" броузера), то
+ есть может понадобится склеить все теги в шаблоне вместе, чтобы получить
+ желаемый результат. Но в результате получается нечитаемый или
+ трудноредактируемый шаблон.
+
+
+ В выводимом тексте, заключенном между тэгами {strip} и {/strip},
+ удаляются повторные пробелы и переносы строк, перед отображением.
+ Так вы можете сохранив шаблон читаемым не волноваться насчет
+ лишних пробелов.
+
+
+ Техническое Замечание
+
+ {strip}{/strip} не влияет на содержимое переменных шаблона.
+ См. модификатор strip.
+
+
+
+тэг strip
+
+{* следующее будет выведено в виде одной строки *}
+{strip}
+<table border=0>
+ <tr>
+ <td>
+ <A HREF="{$url}">
+ <font color="red">This is a test</font>
+ </A>
+ </td>
+ </tr>
+</table>
+{/strip}
+
+
+OUTPUT:
+
+<table border=0><tr><td><A HREF="http://my.domain.com"><font color="red">This is a test</font></A></td></tr></table>
+
+
+ Заметте, что в данном примере все строки начинаются и заканчиваются HTML
+ тэгами. Notice that in the above example, all the lines begin and end
+ with HTML tags. Учтите, что все строки склеиваются вместе. Если есть
+ обычный текст в начале строки, то может не получиться желаемый результат.
+
+
+
+
diff --git a/docs/ru/designers/language-combining-modifiers.xml b/docs/ru/designers/language-combining-modifiers.xml
new file mode 100644
index 00000000..1e13252d
--- /dev/null
+++ b/docs/ru/designers/language-combining-modifiers.xml
@@ -0,0 +1,56 @@
+
+
+
+ Комбинирование модификаторов
+
+ Можно применять любой количество модификаторов к переменной. Они будут
+ применять в порядке их упоминания слева направо. Модификаторы должны
+ быть разделены символом | (вертикальная черта).
+
+
+ комбинирование модификаторов
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('articleTitle', 'Smokers are Productive, but Death Cuts Efficiency.');
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{$articleTitle}
+{$articleTitle|upper|spacify}
+{$articleTitle|lower|spacify|truncate}
+{$articleTitle|lower|truncate:30|spacify}
+{$articleTitle|lower|spacify|truncate:30:". . ."}
+
+
+OUTPUT:
+
+Smokers are Productive, but Death Cuts Efficiency.
+S M O K E R S A R E P R O D U C T I V E , B U T D E A T H C U T S E F F I C I E N C Y .
+s m o k e r s a r e p r o d u c t i v e , b u t d e a t h c u t s...
+s m o k e r s a r e p r o d u c t i v e , b u t . . .
+s m o k e r s a r e p. . .
+
+
+
diff --git a/docs/ru/designers/language-custom-functions.xml b/docs/ru/designers/language-custom-functions.xml
new file mode 100644
index 00000000..1b51de4d
--- /dev/null
+++ b/docs/ru/designers/language-custom-functions.xml
@@ -0,0 +1,2624 @@
+
+
+
+ Пользовательские Функции
+
+ Smarty поставляется с несколькими пользовательскими
+ функциями, которые вы можете использовать в шаблонах.
+
+
+ assign
+
+
+
+
+
+
+
+
+
+ Имя аттрибута
+ Тип
+ Обязателен
+ По умолчанию
+ Описание
+
+
+
+
+ var
+ строка (string)
+ Да
+ n/a
+ Имя переменной, значение которой будет
+ устанавливаться
+
+
+ value
+ строка (string)
+ Да
+ n/a
+ Устанавливаемое значение
+
+
+
+
+
+ assign используется для установки значения переменной в
+ процессе выполнения шаблона.
+
+
+assign
+
+{assign var="name" value="Bob"}
+
+Значение $name - {$name}.
+
+OUTPUT:
+
+Значение $name - Bob.
+
+
+
+ counter
+
+
+
+
+
+
+
+
+
+ Имя аттрибута
+ Тип
+ Обязателен
+ По умолчанию
+ Описание
+
+
+
+
+ name
+ строка (string)
+ Нет
+ default
+ Имя счетчика
+
+
+ start
+ number
+ Нет
+ 1
+ Начальное значение счетчика
+
+
+ skip
+ number
+ Нет
+ 1
+ Шаг счетчика
+
+
+ direction
+ строка (string)
+ Нет
+ up
+ Направление (вверх - up/вниз - down)
+
+
+ print
+ логический (boolean)
+ Нет
+ true
+ выводить значение счетчика или нет
+
+
+ assign
+ строка (string)
+ Нет
+ n/a
+ Имя переменной, которой будет присвоен
+ вывод
+
+
+
+
+
+ counter используется для управления счетчиком. counter запоминает
+ количество итераций. Можно регулировать начало, интервал и
+ направление отсчета, а также указать, выводить ил значение
+ счетчика или нет. Можно запустить несколько счетчиков одновременно,
+ указав уникальное имя для каждого. Если имя счетчика не указано,
+ будет использовано по умолчанию 'default'.
+
+
+ Если указан аттрибут "assign", то вывод тэга counter будет присвоен
+ переменной шаблона, вместо отображения.
+
+
+counter
+
+{* инициализируем счетчик *}
+{counter start=0 skip=2 print=false}
+
+{counter}<br>
+{counter}<br>
+{counter}<br>
+{counter}<br>
+
+OUTPUT:
+
+2<br>
+4<br>
+6<br>
+8<br>
+
+
+
+ cycle
+
+
+
+
+
+
+
+
+
+ Имя аттрибута
+ Тип
+ Обязателен
+ По умолчанию
+ Описание
+
+
+
+
+ name
+ строка (string)
+ Нет
+ default
+ Название цикла
+
+
+ values
+ mixed
+ Да
+ N/A
+ Значения, по которым будет производиться цикл.
+ Либо список, разделеный запятыми (либо другим указанным
+ разделителем), либо массив значений.
+
+
+ print
+ логический (boolean)
+ Нет
+ true
+ Выводить значение, или нет
+
+
+ advance
+ логический (boolean)
+ Нет
+ true
+ Переключаться или нет на следующее значение
+
+
+ delimiter
+ строка (string)
+ Нет
+ ,
+ Разделитель, используемый в аттрибуте values.
+
+
+ assign
+ строка (string)
+ Нет
+ n/a
+ Имя переменной, которой будет присвоен вывод тэга
+
+
+
+
+
+ Cycle используется для прохода через множество значений.
+ С его помощью можно легко реализовать переключение между
+ двумя и более цветами в таблице, или пройти цикл через
+ массив.
+
+
+ Можно проходить через несколько множеств значений одновременно,
+ указав аттрибут name. Имена должны быть уникальными.
+
+
+ Можно не отображать данный элемент, установив аттрибут print в
+ ложь (false). Удобно для пропуска значения, без его вывода.
+
+
+ Аттрибут advance используется для повтора значения. Если
+ установлен в истина (true), то при следующем вызове cycle
+ будет выведено то же значение.
+
+
+ Если указан специальный аттрибут "assign", то вывод cycle
+ присваивается переменной, вместо отображения.
+
+
+cycle
+
+{section name=rows loop=$data}
+<tr bgcolor="{cycle values="#eeeeee,#d0d0d0"}">
+ <td>{$data[rows]}</td>
+</tr>
+{/section}
+
+OUTPUT:
+
+<tr bgcolor="#eeeeee">
+ <td>1</td>
+</tr>
+<tr bgcolor="#d0d0d0">
+ <td>2</td>
+</tr>
+<tr bgcolor="#eeeeee">
+ <td>3</td>
+</tr>
+
+
+
+
+ debug
+
+
+
+
+
+
+
+
+
+ Имя аттрибута
+ Тип
+ Обязателен
+ По умолчанию
+ Описание
+
+
+
+
+ output
+ строка (string)
+ Нет
+ html
+ Тип вывода (html или javascript)
+
+
+
+
+
+ {debug} выводит консоль отладки. Это работает независимо от
+ значения опции debug.
+ Так как этот тэг обрабатывается в процесе выполнения, то возможно
+ вывести только присвоенные переменные, но не используемые шаблоны.
+ Но вы видите все переменные, доступные в области видимости текущего
+ шаблона.
+
+
+
+ eval
+
+
+
+
+
+
+
+
+
+ Имя аттрибута
+ Тип
+ Обязателен
+ По умолчанию
+ Описание
+
+
+
+
+ var
+ mixed
+ Да
+ n/a
+ Переменная (или строка) для обработки
+
+
+ assign
+ строка (string)
+ Нет
+ n/a
+ Имя переменной, которой будет присвоен вывод
+
+
+
+
+
+ eval используется для обработки переменной, как шаблона. Можно
+ использовать для таких вещей, как хранение шаблонных
+ тэгов/переменных в переменной или в файлах конфигруации.
+
+
+ Если указан специальный аттрибут "assign", то вывод тэга eval
+ присваивается переменной, вместо отображения.
+
+
+ Техническое Замечание
+
+ Переменные шаблоны обрабатываются так же, как и обычные шаблоны.
+ Они подвластны тем же правилам и ограничениям безопасности.
+
+
+
+ Техническое Замечание
+
+ Переменные шаблоны компилируются при каждоv обращении.
+ Откомпилированные версии не сохраняются! Однако, если
+ кэширование включено, то вывод будет закэширован с
+ остальной частью шаблона.
+
+
+
+eval
+
+setup.conf
+----------
+
+emphstart = <b>
+emphend = </b>
+title = Welcome to {$company}'s home page!
+ErrorCity = You must supply a {#emphstart#}city{#emphend#}.
+ErrorState = You must supply a {#emphstart#}state{#emphend#}.
+
+
+index.tpl
+---------
+
+{config_load file="setup.conf"}
+
+{eval var=$foo}
+{eval var=#title#}
+{eval var=#ErrorCity#}
+{eval var=#ErrorState# assign="state_error"}
+{$state_error}
+
+OUTPUT:
+
+This is the contents of foo.
+Welcome to Foobar Pub & Grill's home page!
+You must supply a <b>city</b>.
+You must supply a <b>state</b>.
+
+
+
+
+
+ fetch
+
+
+
+
+
+
+
+
+
+ Имя аттрибута
+ Тип
+ Обязателен
+ По умолчанию
+ Описание
+
+
+
+
+ file
+ строка (string)
+ Да
+ n/a
+ файл, http или ftp сайт для отображния
+
+
+ assign
+ строка (string)
+ Нет
+ n/a
+ Имя переменной, которой будет присвоен вывод
+
+
+
+
+
+ fetch используется для отображения локальных файлов, http или ftp
+ страниц. Есил файл начинается с "http://", то вебстраница будет
+ получена и выведена. Если файл начинается с "ftp://", то файл будет
+ получен с ftp сервера и выведен. Для локальных файлов должен быть
+ указан либо абсолютный путь, либо путь относительно выполняемого
+ php файла.
+
+
+ Если указать специалньый аттрибут "assign", то вывод функции fetch
+ будет присвоен переменной вместо отображения. Добавлено в
+ Smarty версии 1.5.0.
+
+
+ Техническое Замечание
+
+ HTTP переадресация не поддерживается. Убедитесь, что указываете
+ завершающие слэши, где это необходимо.
+
+
+
+ Техническое Замечание
+
+ Если включена security и указан файл из локальной файловой
+ системы, то отобразятся лишь файлы, который находятся в
+ указаных безопасных папках ($secure_dir).
+
+
+
+fetch
+
+{* включаем javascript в шаблон *}
+{fetch file="/export/httpd/www.domain.com/docs/navbar.js"}
+
+{* Добавляем немного прогноза погоды с сервера погоды *}
+{fetch file="http://www.myweather.com/68502/"}
+
+{* новостную ленту берем с ftp сервера *}
+{fetch file="ftp://user:password@ftp.domain.com/path/to/currentheadlines.txt"}
+
+{* присваиваем полученный файл переменной *}
+{fetch file="http://www.myweather.com/68502/" assign="weather"}
+{if $weather ne ""}
+ <b>{$weather}</b>
+{/if}
+
+
+
+ html_checkboxes
+
+
+
+
+
+
+
+
+
+ Имя аттрибута
+ Тип
+ Обязателен
+ По умолчанию
+ Описание
+
+
+
+
+ name
+ строка (string)
+ Нет
+ checkbox
+ название списка флажков
+
+
+ values
+ массив
+ Да, если не указан аттрибут options
+ n/a
+ Массив значений для флажков
+
+
+ output
+ массив
+ Да, если не указан аттрибут options
+ n/a
+ массив названий флажков
+
+
+ checked
+ строка (string)
+ Нет
+ пусто
+ выбранный флажок
+
+
+ options
+ ассоциативный массив
+ Да, если не указаны аттрибуты values и output
+ n/a
+ Ассоциативнй массив значений и названий
+
+
+ separator
+ строка (string)
+ Нет
+ пусто
+ строка разделяющая каждый флажок
+
+
+
+
+
+ Пользовательская функция html_checkboxes генерирует группу
+ HTML фложков по указанной информации. Также заботится об
+ флажках, которые выбраны по умолчанию. параметры vslues и output
+ обязательны, если не указан аттрибут options. Весь вывод
+ совместим с XHTML.
+
+
+ Все параметры, которые не указаны в списке выводятся в виде
+ пар name/value в каждом созданном тэге <input>.
+
+
+html_checkboxes
+
+index.php:
+
+require('Smarty.php.class');
+$smarty = new Smarty;
+$smarty->assign('cust_ids', array(1000,1001,1002,1003));
+$smarty->assign('cust_names', array('Joe Schmoe','Jack Smith','Jane
+Johnson','Charlie Brown'));
+$smarty->assign('customer_id', 1001);
+$smarty->display('index.tpl');
+
+
+index.tpl:
+
+{html_checkboxes values=$cust_ids checked=$customer_id output=$cust_names separator="<br />"}
+
+
+index.php:
+
+require('Smarty.php.class');
+$smarty = new Smarty;
+$smarty->assign('cust_checkboxes', array(
+ 1001 => 'Joe Schmoe',
+ 1002 => 'Jack Smith',
+ 1003 => 'Jane Johnson','Charlie Brown'));
+$smarty->assign('customer_id', 1001);
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{html_checkboxes name="id" options=$cust_checkboxes checked=$customer_id separator="<br />"}
+
+
+OUTPUT: (both examples)
+
+<input type="checkbox" name="id[]" value="1000">Joe Schmoe<br />
+<input type="checkbox" name="id[]" value="1001" checked="checked"><br />
+<input type="checkbox" name="id[]" value="1002">Jane Johnson<br />
+<input type="checkbox" name="id[]" value="1003">Charlie Brown<br />
+
+
+
+ html_image
+
+
+
+
+
+
+
+
+
+ Имя аттрибута
+ Тип
+ Обязателен
+ По умолчанию
+ Описание
+
+
+
+
+ file
+ строка (string)
+ Да
+ n/a
+ название/путь к изображению
+
+
+ border
+ строка (string)
+ Нет
+ 0
+ размер рамки вокруг изображения
+
+
+ height
+ строка (string)
+ Нет
+ реальная высота изображения
+ высота изображения
+
+
+ width
+ строка (string)
+ Нет
+ реальная ширина изображения
+ ширина изображения
+
+
+ basedir
+ строка (string)
+ Нет
+ корень веб сервера
+ папка, от которой указаны относительные пути
+
+
+ link
+ строка (string)
+ Нет
+ n/a
+ значение href, куда ссылается картинка
+
+
+
+
+
+ Пользовательская функция html_image генерирует HTML для изображения.
+ Ширина и высота автоматически вычисляются из файла изображения, если
+ не указаны явно.
+
+
+ basedir - базовая папка для относительных путей. Если не указана,
+ то используется корень веб сервер (переменная окружени DOCUMENT_ROOT).
+ Если security включено, то путь к изображения должен быть в пределах
+ безопасных папок.
+
+
+ Аттрибут link указывает, куда ссылается изображение. Аттрибут
+ link устанавливает значение аттрибута href тэга А. Если указан
+ аттрибут link, то изображение окружается выражениями <a
+ href="LINKVALUE"> и <a>.
+
+
+ Техническое Замечание
+
+ html_image требует обращение к диску lzk чтения изображения
+ и вычисления его размеров. Если не используется кэширование
+ шаблонов, то тогда лушче не пользоваться тэгом html_image
+ и вставлять статические тэги изображений, для достижения
+ оптимального быстродействия.
+
+
+
+html_image
+
+index.php:
+
+require('Smarty.php.class');
+$smarty = new Smarty;
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{html_image file="pumpkin.jpg"}
+{html_image file="/path/from/docroot/pumpkin.jpg"}
+{html_image file="../path/relative/to/currdir/pumpkin.jpg"}
+
+OUTPUT: (possible)
+
+<img src="pumpkin.jpg" border="0" width="44" height="68">
+<img src="/path/under/docroot/pumpkin.jpg" border="0" width="44" height="68">
+<img src="../path/relative/to/currdir/pumpkin.jpg" border="0" width="44" height="68">
+
+
+
+ html_options
+
+
+
+
+
+
+
+
+
+ Имя аттрибута
+ Тип
+ Обязателен
+ По умолчанию
+ Описание
+
+
+
+
+ values
+ массив
+ Да, если не указан аттрибут options
+ n/a
+ массив значений для выпадающего списка
+
+
+ output
+ массив
+ Да, если не указан аттрибут options
+ n/a
+ массив названий для выпадающего списка
+
+
+ selected
+ string/array
+ Нет
+ пусто
+ Выбранный элемент(ы)
+
+
+ options
+ ассоциативный массив
+ Да, если не указаны аттрибуты values и output
+ n/a
+ ассоциативный массив значений и названий
+
+
+ name
+ строка (string)
+ Нет
+ пусто
+ Название выпадающего списка
+
+
+
+
+
+ пользовательская функция html_options генерирует группу html тэгов
+ option по указанной информации. Также заботится о выбранных по
+ умолчанию элементах. Аттрибуты values и output обязательны, если не
+ указан аттрибут options.
+
+
+ Если данное значение - массив, то оно будет представлено в виде
+ html OPTGROUP. Рекурсия с OPTGROUP поддерживается. Весь вывод
+ совместим с XHTML.
+
+
+ Если указан необязательный аттрибут name,
+ то группа опций заключится в тэг <select
+ name="groupname"> и </select>, иначе сгенерируется только
+ группа опций.
+
+
+ Все параметры, которые не указаны выше, выводятся в виде
+ пары name/value внутри тэга <select>-tag. Они игнорируются,
+ если аттрибут name не указан.
+
+
+html_options
+
+index.php:
+
+require('Smarty.php.class');
+$smarty = new Smarty;
+$smarty->assign('cust_ids', array(1000,1001,1002,1003));
+$smarty->assign('cust_names', array('Joe Schmoe','Jack Smith','Jane
+Johnson','Carlie Brown'));
+$smarty->assign('customer_id', 1001);
+$smarty->display('index.tpl');
+
+index.tpl:
+
+<select name=customer_id>
+ {html_options values=$cust_ids selected=$customer_id output=$cust_names}
+</select>
+
+
+index.php:
+
+require('Smarty.php.class');
+$smarty = new Smarty;
+$smarty->assign('cust_options', array(
+ 1001 => 'Joe Schmoe',
+ 1002 => 'Jack Smith',
+ 1003 => 'Jane Johnson',
+ 1004 => 'Charlie Brown'));
+$smarty->assign('customer_id', 1001);
+$smarty->display('index.tpl');
+
+index.tpl:
+
+<select name=customer_id>
+ {html_options options=$cust_options selected=$customer_id}
+</select>
+
+
+OUTPUT: (both examples)
+
+<select name=customer_id>
+ <option value="1000">Joe Schmoe</option>
+ <option value="1001" selected="selected">Jack Smith</option>
+ <option value="1002">Jane Johnson</option>
+ <option value="1003">Charlie Brown</option>
+</select>
+
+
+
+ html_radios
+
+
+
+
+
+
+
+
+
+ Имя аттрибута
+ Тип
+ Обязателен
+ По умолчанию
+ Описание
+
+
+
+
+ name
+ строка (string)
+ Нет
+ radio
+ название элементов выбора
+
+
+ values
+ массив
+ Да, если не указан аттрибут options
+ n/a
+ массив значений элементов выбора
+
+
+ output
+ массив
+ Да, если не указан аттрибут options
+ n/a
+ массив названий элементов выбора
+
+
+ checked
+ строка (string)
+ Нет
+ пусто
+ Значение выбранного элемента
+
+
+ options
+ ассоциативный массив
+ Да, если не указаны аттрибуты values и output
+ n/a
+ ассоциативный массив значений и названий
+ элементов выбора
+
+
+ separator
+ строка (string)
+ Нет
+ пусто
+ текст, разделяющий элементы выбора
+
+
+
+
+
+ Пользовательсякая функция html_radios генерирует HMTL код
+ группы элементов выбора (radio button group). Автоматически
+ устанавливает выбранное значение, если оно укзано. Требует
+ наличия аттрибутов values и output или аттрибута options.
+ Сгенерированный HMTL код совместим с XHTML.
+
+
+ Все параметры, которые не указаны в таблице выше, передаются
+ и выводятся внутри каждого созданного тэга <input>.
+
+
+
+html_radios
+
+index.php:
+
+require('Smarty.php.class');
+$smarty = new Smarty;
+$smarty->assign('cust_ids', array(1000,1001,1002,1003));
+$smarty->assign('cust_names', array('Joe Schmoe','Jack Smith','Jane
+Johnson','Carlie Brown'));
+$smarty->assign('customer_id', 1001);
+$smarty->display('index.tpl');
+
+
+index.tpl:
+
+{html_radios values=$cust_ids checked=$customer_id output=$cust_names separator="<br />"}
+
+
+index.php:
+
+require('Smarty.php.class');
+$smarty = new Smarty;
+$smarty->assign('cust_radios', array(
+ 1001 => 'Joe Schmoe',
+ 1002 => 'Jack Smith',
+ 1003 => 'Jane Johnson',
+ 1004 => 'Charlie Brown'));
+$smarty->assign('customer_id', 1001);
+$smarty->display('index.tpl');
+
+
+index.tpl:
+
+{html_radios name="id" options=$cust_radios checked=$customer_id separator="<br />"}
+
+
+OUTPUT: (both examples)
+
+<input type="radio" name="id[]" value="1000">Joe Schmoe<br />
+<input type="radio" name="id[]" value="1001" checked="checked"><br />
+<input type="radio" name="id[]" value="1002">Jane Johnson<br />
+<input type="radio" name="id[]" value="1003">Charlie Brown<br />
+
+
+
+ html_select_date
+
+
+
+
+
+
+
+
+
+ Имя аттрибута
+ Тип
+ Обязателен
+ По умолчанию
+ Описание
+
+
+
+
+ prefix
+ строка (string)
+ Нет
+ Date_
+ префикс названий переменных
+
+
+ time
+ timestamp/ГГГГ-ММ-ДД
+ Нет
+ текущее время в формате unix timestamp
+ или ГГГГ-ММ-ДД
+ используемое время
+
+
+ start_year
+ строка (string)
+ Нет
+ текущий год
+ Начальный год в выпадающем спииске. Либо указывается
+ явно, либо относительно текущего года (+/- N)
+
+
+ end_year
+ строка (string)
+ Нет
+ аналогично start_year
+ Конечный год в вырадающем списке. Либо указывается
+ явно, либо относительно текущего года (+/- N)
+
+
+ display_days
+ логический (boolean)
+ Нет
+ true
+ выводить ли список дней
+
+
+ display_months
+ логический (boolean)
+ Нет
+ true
+ выводить ли список месяцев
+
+
+ display_years
+ логический (boolean)
+ Нет
+ true
+ выводить ли список лет
+
+
+ month_format
+ строка (string)
+ Нет
+ %B
+ Формат названия месяцев (strftime)
+
+
+ day_format
+ строка (string)
+ Нет
+ %02d
+ формат названия дней (sprintf)
+
+
+ day_value_format
+ строка (string)
+ Нет
+ %d
+ формат значения дней (sprintf)
+
+
+ year_as_text
+ логический (boolean)
+ Нет
+ false
+ Выводить ли значение года текстом
+
+
+ reverse_years
+ логический (boolean)
+ Нет
+ false
+ Выводить года в обратном порядке
+
+
+ field_array
+ строка (string)
+ Нет
+ null
+ название переменной (name), которая будет
+ содержать выбранные значения в виде массива:
+ name[Day], name[Year], name[Month].
+
+
+
+ day_size
+ строка (string)
+ Нет
+ null
+ Устанавливает аттрибут size тэга select
+ для дней
+
+
+ month_size
+ строка (string)
+ Нет
+ null
+ Устанавливает аттрибут size тэга select
+ для месяцев
+
+
+ year_size
+ строка (string)
+ Нет
+ null
+ Устанавливает аттрибут size тэга select
+ для лет
+
+
+ all_extra
+ строка (string)
+ Нет
+ null
+ Устанавливает дополнительные аттрибуты для
+ всех тэгов select/input
+
+
+ day_extra
+ строка (string)
+ Нет
+ null
+ Устанавливает дополнительные аттрибуты тэгов
+ select/input для дней
+
+
+ month_extra
+ строка (string)
+ Нет
+ null
+ Устанавливает дополнительные аттрибуты тэгов
+ select/input для месяцев
+
+
+ year_extra
+ строка (string)
+ Нет
+ null
+ Устанавливает дополнительные аттрибуты тэгов
+ select/input для лет
+
+
+ field_order
+ строка (string)
+ Нет
+ MDY
+ Порядок следования полей (МДГ)
+
+
+ field_separator
+ строка (string)
+ Нет
+ \n
+ текст, раздляющий поля
+
+
+ month_value_format
+ строка (string)
+ Нет
+ %m
+ формат значения месяца (strftime).
+ По умолчанию - %m (номер месяца).
+
+
+
+
+
+ пользовательская функция html_select_date генерирует поля выбора
+ даты.
+
+
+html_select_date
+
+{html_select_date}
+
+
+OUTPUT:
+
+<select name="Date_Month">
+<option value="1">January</option>
+<option value="2">February</option>
+<option value="3">March</option>
+<option value="4">April</option>
+<option value="5">May</option>
+<option value="6">June</option>
+<option value="7">July</option>
+<option value="8">August</option>
+<option value="9">September</option>
+<option value="10">October</option>
+<option value="11">November</option>
+<option value="12" selected>December</option>
+</select>
+<select name="Date_Day">
+<option value="1">01</option>
+<option value="2">02</option>
+<option value="3">03</option>
+<option value="4">04</option>
+<option value="5">05</option>
+<option value="6">06</option>
+<option value="7">07</option>
+<option value="8">08</option>
+<option value="9">09</option>
+<option value="10">10</option>
+<option value="11">11</option>
+<option value="12">12</option>
+<option value="13" selected>13</option>
+<option value="14">14</option>
+<option value="15">15</option>
+<option value="16">16</option>
+<option value="17">17</option>
+<option value="18">18</option>
+<option value="19">19</option>
+<option value="20">20</option>
+<option value="21">21</option>
+<option value="22">22</option>
+<option value="23">23</option>
+<option value="24">24</option>
+<option value="25">25</option>
+<option value="26">26</option>
+<option value="27">27</option>
+<option value="28">28</option>
+<option value="29">29</option>
+<option value="30">30</option>
+<option value="31">31</option>
+</select>
+<select name="Date_Year">
+<option value="2001" selected>2001</option>
+</select>
+
+
+
+
+html_select_date
+
+
+{* start and end year can be relative to current year *}
+{html_select_date prefix="StartDate" time=$time start_year="-5" end_year="+1" display_days=false}
+
+OUTPUT: (current year is 2000)
+
+<select name="StartDateMonth">
+<option value="1">January</option>
+<option value="2">February</option>
+<option value="3">March</option>
+<option value="4">April</option>
+<option value="5">May</option>
+<option value="6">June</option>
+<option value="7">July</option>
+<option value="8">August</option>
+<option value="9">September</option>
+<option value="10">October</option>
+<option value="11">November</option>
+<option value="12" selected>December</option>
+</select>
+<select name="StartDateYear">
+<option value="1999">1995</option>
+<option value="1999">1996</option>
+<option value="1999">1997</option>
+<option value="1999">1998</option>
+<option value="1999">1999</option>
+<option value="2000" selected>2000</option>
+<option value="2001">2001</option>
+</select>
+
+
+
+ html_select_time
+
+
+
+
+
+
+
+
+
+ Имя аттрибута
+ Тип
+ Обязателен
+ По умолчанию
+ Описание
+
+
+
+
+ prefix
+ строка (string)
+ Нет
+ Time_
+ префикс названий переменных
+
+
+ time
+ timestamp
+ Нет
+ текущее время
+ используемое время
+
+
+ display_hours
+ логический (boolean)
+ Нет
+ true
+ выводить часы
+
+
+ display_minutes
+ логический (boolean)
+ Нет
+ true
+ выводить минуты
+
+
+ display_seconds
+ логический (boolean)
+ Нет
+ true
+ выводить секунды
+
+
+ display_meridian
+ логический (boolean)
+ Нет
+ true
+ выводить меридиан (am/pm)
+
+
+ use_24_hours
+ логический (boolean)
+ Нет
+ true
+ использовать 24-часовой формат времени
+
+
+ minute_interval
+ целое (integer)
+ Нет
+ 1
+ интервал элементов выпадающего списка минут
+
+
+ second_interval
+ целое (integer)
+ Нет
+ 1
+ интервал элементов выпадающего списка секунд
+
+
+ field_array
+ строка (string)
+ Нет
+ n/a
+ название переменной, в которую передадутся
+ выбранные значения в виде массива.
+
+
+ all_extra
+ строка (string)
+ Нет
+ null
+ указывает дополнительные аттрибуты для
+ всех тэгов select/input
+
+
+ hour_extra
+ строка (string)
+ Нет
+ null
+ указывает дополнительные аттрибуты для
+ тэгов select/input для выбора часов
+
+
+ minute_extra
+ строка (string)
+ Нет
+ null
+ указывает дополнительные аттрибуты для
+ тэгов select/input для выбора минут
+
+
+ second_extra
+ строка (string)
+ Нет
+ null
+ указывает дополнительные аттрибуты для
+ тэгов select/input для выбора секунд
+
+
+ meridian_extra
+ строка (string)
+ Нет
+ null
+ указывает дополнительные аттрибуты для
+ тэгов select/input для выбора меридиан
+
+
+
+
+
+ пользовательская функция html_select_time генерирует HTML поля
+ выбора времени.
+
+
+html_select_time
+
+{html_select_time use_24_hours=true}
+
+
+OUTPUT:
+
+<select name="Time_Hour">
+<option value="00">00</option>
+<option value="01">01</option>
+<option value="02">02</option>
+<option value="03">03</option>
+<option value="04">04</option>
+<option value="05">05</option>
+<option value="06">06</option>
+<option value="07">07</option>
+<option value="08">08</option>
+<option value="09" selected>09</option>
+<option value="10">10</option>
+<option value="11">11</option>
+<option value="12">12</option>
+<option value="13">13</option>
+<option value="14">14</option>
+<option value="15">15</option>
+<option value="16">16</option>
+<option value="17">17</option>
+<option value="18">18</option>
+<option value="19">19</option>
+<option value="20">20</option>
+<option value="21">21</option>
+<option value="22">22</option>
+<option value="23">23</option>
+</select>
+<select name="Time_Minute">
+<option value="00">00</option>
+<option value="01">01</option>
+<option value="02">02</option>
+<option value="03">03</option>
+<option value="04">04</option>
+<option value="05">05</option>
+<option value="06">06</option>
+<option value="07">07</option>
+<option value="08">08</option>
+<option value="09">09</option>
+<option value="10">10</option>
+<option value="11">11</option>
+<option value="12">12</option>
+<option value="13">13</option>
+<option value="14">14</option>
+<option value="15">15</option>
+<option value="16">16</option>
+<option value="17">17</option>
+<option value="18">18</option>
+<option value="19">19</option>
+<option value="20" selected>20</option>
+<option value="21">21</option>
+<option value="22">22</option>
+<option value="23">23</option>
+<option value="24">24</option>
+<option value="25">25</option>
+<option value="26">26</option>
+<option value="27">27</option>
+<option value="28">28</option>
+<option value="29">29</option>
+<option value="30">30</option>
+<option value="31">31</option>
+<option value="32">32</option>
+<option value="33">33</option>
+<option value="34">34</option>
+<option value="35">35</option>
+<option value="36">36</option>
+<option value="37">37</option>
+<option value="38">38</option>
+<option value="39">39</option>
+<option value="40">40</option>
+<option value="41">41</option>
+<option value="42">42</option>
+<option value="43">43</option>
+<option value="44">44</option>
+<option value="45">45</option>
+<option value="46">46</option>
+<option value="47">47</option>
+<option value="48">48</option>
+<option value="49">49</option>
+<option value="50">50</option>
+<option value="51">51</option>
+<option value="52">52</option>
+<option value="53">53</option>
+<option value="54">54</option>
+<option value="55">55</option>
+<option value="56">56</option>
+<option value="57">57</option>
+<option value="58">58</option>
+<option value="59">59</option>
+</select>
+<select name="Time_Second">
+<option value="00">00</option>
+<option value="01">01</option>
+<option value="02">02</option>
+<option value="03">03</option>
+<option value="04">04</option>
+<option value="05">05</option>
+<option value="06">06</option>
+<option value="07">07</option>
+<option value="08">08</option>
+<option value="09">09</option>
+<option value="10">10</option>
+<option value="11">11</option>
+<option value="12">12</option>
+<option value="13">13</option>
+<option value="14">14</option>
+<option value="15">15</option>
+<option value="16">16</option>
+<option value="17">17</option>
+<option value="18">18</option>
+<option value="19">19</option>
+<option value="20">20</option>
+<option value="21">21</option>
+<option value="22">22</option>
+<option value="23" selected>23</option>
+<option value="24">24</option>
+<option value="25">25</option>
+<option value="26">26</option>
+<option value="27">27</option>
+<option value="28">28</option>
+<option value="29">29</option>
+<option value="30">30</option>
+<option value="31">31</option>
+<option value="32">32</option>
+<option value="33">33</option>
+<option value="34">34</option>
+<option value="35">35</option>
+<option value="36">36</option>
+<option value="37">37</option>
+<option value="38">38</option>
+<option value="39">39</option>
+<option value="40">40</option>
+<option value="41">41</option>
+<option value="42">42</option>
+<option value="43">43</option>
+<option value="44">44</option>
+<option value="45">45</option>
+<option value="46">46</option>
+<option value="47">47</option>
+<option value="48">48</option>
+<option value="49">49</option>
+<option value="50">50</option>
+<option value="51">51</option>
+<option value="52">52</option>
+<option value="53">53</option>
+<option value="54">54</option>
+<option value="55">55</option>
+<option value="56">56</option>
+<option value="57">57</option>
+<option value="58">58</option>
+<option value="59">59</option>
+</select>
+<select name="Time_Meridian">
+<option value="am" selected>AM</option>
+<option value="pm">PM</option>
+</select>
+
+
+
+ html_table
+
+
+
+
+
+
+
+
+
+ Имя аттрибута
+ Тип
+ Обязателен
+ По умолчанию
+ Описание
+
+
+
+
+ loop
+ массив
+ Да
+ n/a
+ массив данных, по которому будет произведен обход
+
+
+ cols
+ целое (integer)
+ Нет
+ 3
+ количество колонок таблицы
+
+
+ table_attr
+ строка (string)
+ Нет
+ border="1"
+ дополнительные аттрибуты тэга table
+
+
+ tr_attr
+ строка (string)
+ Нет
+ пусто
+ дополнительные аттрибуты тэга tr (если указан
+ массив, то его элементы циклически повторяються)
+
+
+ td_attr
+ строка (string)
+ Нет
+ пусто
+ дополнительные аттрибуты тэга td (если указан
+ массив, то его элементы циклически повторяються)
+
+
+ trailpad
+ строка (string)
+ Нет
+
+ значение остаточных ячеек на последней
+ строке табилцы
+
+
+
+
+
+ Пользовательская функция html_table выводит
+ массив в виде HTML таблицы. Аттрибут cols
+ указывает количество колонок. Аттрибуты table_attr,
+ tr_attr и td_attr указывают
+ дополнительные аттрибуты тэго table, tr и td. Если значение
+ tr_attr или td_attr - массив,
+ то кго значения циклический повторяются. Атрибут
+ trailpad устанавливает значения для остаточных
+ ячеек на послденей строке таблицы.
+
+
+html_table
+
+index.php:
+
+require('Smarty.php.class');
+$smarty = new Smarty;
+$smarty->assign('data',array(1,2,3,4,5,6,7,8,9));
+$smarty->assign('tr',array('bgcolor="#eeeeee"','bgcolor="#dddddd"'));
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{html_table loop=$data}
+{html_table loop=$data cols=4 table_attr='border="0"'}
+{html_table loop=$data cols=4 tr_attr=$tr}
+
+OUTPUT:
+
+<table border="1">
+<tr><td>1</td><td>2</td><td>3</td></tr>
+<tr><td>4</td><td>5</td><td>6</td></tr>
+<tr><td>7</td><td>8</td><td>9</td></tr>
+</table>
+<table border="0">
+<tr><td>1</td><td>2</td><td>3</td><td>4</td></tr>
+<tr><td>5</td><td>6</td><td>7</td><td>8</td></tr>
+<tr><td>9</td><td> </td><td> </td><td> </td></tr>
+</table>
+<table border="1">
+<tr bgcolor="#eeeeee"><td>1</td><td>2</td><td>3</td><td>4</td></tr>
+<tr bgcolor="#dddddd"><td>5</td><td>6</td><td>7</td><td>8</td></tr>
+<tr bgcolor="#eeeeee"><td>9</td><td> </td><td> </td><td> </td></tr>
+</table>
+
+
+
+ math
+
+
+
+
+
+
+
+
+
+ Имя аттрибута
+ Тип
+ Обязателен
+ По умолчанию
+ Описание
+
+
+
+
+ equation
+ строка (string)
+ Да
+ n/a
+ математической выражение
+
+
+ format
+ строка (string)
+ Нет
+ n/a
+ формат рузультата (sprintf)
+
+
+ var
+ numeric
+ Да
+ n/a
+ переменная выражения
+
+
+ assign
+ строка (string)
+ Нет
+ n/a
+ переменная шаблона, которой будет присвоен
+ вывод
+
+
+ [var ...]
+ numeric
+ Да
+ n/a
+ дополнительные переменные выражения
+
+
+
+
+
+ пользовательская функция math позволяет дизайнерам шаблонов
+ вычислять математические выражения в шаблоне. Любая численная
+ переменная шаблона может быть использована в выражении. Переменные,
+ используемые в выражении, передаються в качестве параметров,
+ которые могут быть как и переменные шаблона, так и статические
+ щначения. Допустимые операторы: +, -, /, *, abs, ceil, cos,
+ exp, floor, log, log10, max, min, pi, pow, rand, round, sin, sqrt,
+ srans и tan. Ознакомтесь с php документацией под данным функциям.
+
+
+ Если указан аттрибут "assign", то вывод будет присвоен переменной,
+ вместо отображения.
+
+
+ Техническое Замечание
+
+ использование функции math значительно сказывается на
+ времени выполнения программы, так как реализована с помощью
+ php функции eval(). Выполнение математических операций в php
+ программе более эффективно, то есть следует везде, где возможно,
+ делать вычисления в программе и передавать результ в шаблон.
+ Следует также избегать повторяющегося вызова функции math
+ (например в циклах).
+
+
+
+math
+
+{* $height=4, $width=5 *}
+
+{math equation="x + y" x=$height y=$width}
+
+OUTPUT:
+
+9
+
+
+{* $row_height = 10, $row_width = 20, #col_div# = 2, assigned in template *}
+
+{math equation="height * width / division"
+ height=$row_height
+ width=$row_width
+ division=#col_div#}
+
+OUTPUT:
+
+100
+
+
+{* можно использовать скобки *}
+
+{math equation="(( x + y ) / z )" x=2 y=10 z=2}
+
+OUTPUT:
+
+6
+
+
+{* можно указать формат результата (sprintf) *}
+
+{math equation="x + y" x=4.4444 y=5.0000 format="%.2f"}
+
+OUTPUT:
+
+9.44
+
+
+
+ mailto
+
+
+
+
+
+
+
+
+
+ Имя аттрибута
+ Тип
+ Обязателен
+ По умолчанию
+ Описание
+
+
+
+
+ address
+ строка (string)
+ Да
+ n/a
+ адрес e-mail
+
+
+ text
+ строка (string)
+ Нет
+ n/a
+ название ссылки. По умолчанию:
+ адрес e-mail
+
+
+ encode
+ строка (string)
+ Нет
+ none
+ Способ кодирования e-mail.
+ Может быть одним из none,
+ hex или javascript.
+
+
+ cc
+ строка (string)
+ Нет
+ n/a
+ адреса e-mail для точной копии.
+ Адреса разделяются запятыми.
+
+
+ bcc
+ строка (string)
+ Нет
+ n/a
+ адреса e-mail для "слепой" копии.
+ Адреса разделяются запятыми.
+
+
+ subject
+ строка (string)
+ Нет
+ n/a
+ тема письма.
+
+
+ newsgroups
+ строка (string)
+ Нет
+ n/a
+ в какие конференции передовать.
+ конференции разделяются запятыми.
+
+
+ followupto
+ строка (string)
+ Нет
+ n/a
+ addresses to follow up to.
+ Адреса разделяются запятыми.
+
+
+ extra
+ строка (string)
+ Нет
+ n/a
+ Дополнительный аттрибуты, передаваемые в ссылку
+ такие как стили (style)
+
+
+
+
+
+ пользовательская функция mailto автоматизирует создание ссылок
+ на e-mail адреса с возможностью кодирования их. Кодирование
+ усложняет работу web-пауков, которые собирают e-mail адреса
+ с вашего сайта.
+
+
+ Техническое Замечание
+
+ javascript - скорее всего наиболее полная форма кодирования,
+ хотя вы так же можете использовать шестнадцатиричное
+ кодирование.
+
+
+
+mailto
+
+{mailto address="me@domain.com"}
+{mailto address="me@domain.com" text="send me some mail"}
+{mailto address="me@domain.com" encode="javascript"}
+{mailto address="me@domain.com" encode="hex"}
+{mailto address="me@domain.com" subject="Hello to you!"}
+{mailto address="me@domain.com" cc="you@domain.com,they@domain.com"}
+{mailto address="me@domain.com" extra='class="email"'}
+
+OUTPUT:
+
+<a href="mailto:me@domain.com" >me@domain.com</a>
+<a href="mailto:me@domain.com" >send me some mail</a>
+<SCRIPT language="javascript">eval(unescape('%64%6f%63%75%6d%65%6e%74%2e%77%72%6
+9%74%65%28%27%3c%61%20%68%72%65%66%3d%22%6d%61%69%6c%74%6f%3a%6d%65%40%64%6f%6d%
+61%69%6e%2e%63%6f%6d%22%20%3e%6d%65%40%64%6f%6d%61%69%6e%2e%63%6f%6d%3c%2f%61%3e
+%27%29%3b'))</SCRIPT>
+<a href="mailto:%6d%65@%64%6f%6d%61%69%6e.%63%6f%6d" >me@d&
+#x6f;main.com</a>
+<a href="mailto:me@domain.com?subject=Hello%20to%20you%21" >me@domain.com</a>
+<a href="mailto:me@domain.com?cc=you@domain.com%2Cthey@domain.com" >me@domain.com</a>
+<a href="mailto:me@domain.com" class="email">me@domain.com</a>
+
+
+
+ popup_init
+
+ функция popup реализует интеграцию с библиотекой overLib, которая
+ используется для создания высплывающих окон. Они могут использоваться
+ для вывода контекстно-зависимой информации, такой как контекстная
+ помощь или высплывающие подсказки. функция popup_init должна быть
+ вызвана один раз в начале страницы, где планируется вызов функции
+ popup. Библиотеку
+ overLib написал Эрик Босрап (Erik Bosrup). Домашняя страница расположена
+ по адресу http://www.bosrup.com/web/overlib/.
+
+
+ Начиная со Smarty версии 2.1.2, библиотека overLib не включается
+ в релиз. Скачайте библиотеку overLib, поместите файл overlib.js
+ в корень документов (DOCUMENT_ROOT) или глубже. При вызове функции
+ popup_init передайте относительный путь к этому файлу в качестве
+ параметра src.
+
+
+popup_init
+
+{* popup_init должен быть вызван один раз в начале страницы *}
+{popup_init src="/javascripts/overlib.js"}
+
+
+
+ popup
+
+
+
+
+
+
+
+
+
+ Имя аттрибута
+ Тип
+ Обязателен
+ По умолчанию
+ Описание
+
+
+
+
+ text
+ строка (string)
+ Да
+ n/a
+ HTML код (текст), который будет выводиться
+ в высплывающем окне.
+
+
+ trigger
+ строка (string)
+ Нет
+ onMouseOver
+ Способ вызова окна. Может быть либо
+ onMouseOver, либо onClick
+
+
+ sticky
+ логический (boolean)
+ Нет
+ false
+ Makes the popup stick around until closed
+
+
+ caption
+ строка (string)
+ Нет
+ n/a
+ устанавливает заголовок
+
+
+ fgcolor
+ строка (string)
+ Нет
+ n/a
+ цвет внутри окна
+
+
+ bgcolor
+ строка (string)
+ Нет
+ n/a
+ цвет границы окна
+
+
+ textcolor
+ строка (string)
+ Нет
+ n/a
+ цвет текста в окне
+
+
+ capcolor
+ строка (string)
+ Нет
+ n/a
+ цвет заголовка окна
+
+
+ closecolor
+ строка (string)
+ Нет
+ n/a
+ цвет текста текста "Close" (Закрыть)
+
+
+ textfont
+ строка (string)
+ Нет
+ n/a
+ шрифт текста в окне
+
+
+ captionfont
+ строка (string)
+ Нет
+ n/a
+ шрифт заголовка окна
+
+
+ closefont
+ строка (string)
+ Нет
+ n/a
+ шрифт текста "Close" (Закрыть)
+
+
+ textsize
+ строка (string)
+ Нет
+ n/a
+ размер шрифта в окне
+
+
+ captionsize
+ строка (string)
+ Нет
+ n/a
+ размер шрифта заголовка
+
+
+ closesize
+ строка (string)
+ Нет
+ n/a
+ размер шрифта текста "Close" (Закрыть)
+
+
+ width
+ целое (integer)
+ Нет
+ n/a
+ ширина окна
+
+
+ height
+ целое (integer)
+ Нет
+ n/a
+ высота окна
+
+
+ left
+ логический (boolean)
+ Нет
+ false
+ создавать окно слева от курсора мыши
+
+
+ right
+ логический (boolean)
+ Нет
+ false
+ создавать окно справа от курсора мыши
+
+
+ center
+ логический (boolean)
+ Нет
+ false
+ создавать окно на месте мыши
+
+
+ above
+ логический (boolean)
+ Нет
+ false
+ создает окно выше курсора мыши. ЗАМЕЧАНИЕ: возможно
+ только если указан аттрибут height
+
+
+ below
+ логический (boolean)
+ Нет
+ false
+ создает окно под курсором мыши
+
+
+ border
+ целое (integer)
+ Нет
+ n/a
+ толщина границы окна
+
+
+ offsetx
+ целое (integer)
+ Нет
+ n/a
+ горизонтальное смещение окна от курсора мыши.
+
+
+ offsety
+ целое (integer)
+ Нет
+ n/a
+ вертикальное смещение окна от курсора мыши
+
+
+ fgbackground
+ url to image
+ Нет
+ n/a
+ определяет фоновое изображение текста,
+ вместо fgcolor.
+
+
+ bgbackground
+ url to image
+ Нет
+ n/a
+ определяет фоновое изображение для границ окна,
+ вместо bgcolor. ЗАМЕЧАНИЕ: Может понадобиться установить
+ bgcolor в "" или будет показан цвет, а не зиображение.
+ ЗАМЕЧАНИЕ: При наличии ссылки "Close" Netscape перерисовывает
+ ячейки таблицы, что приводит к некоректному отображению.
+
+
+ closetext
+ строка (string)
+ Нет
+ n/a
+ устанвливает текст вместо "Close"
+
+
+ noclose
+ логический (boolean)
+ Нет
+ n/a
+ не отображать текст "Close"
+
+
+ status
+ строка (string)
+ Нет
+ n/a
+ установить значение строки статуса в браузере
+
+
+ autostatus
+ логический (boolean)
+ Нет
+ n/a
+ установить значение строки статуса в браузере
+ в текст окна. ЗАМЕЧАНИЕ: отменяет значение status
+
+
+ autostatuscap
+ строка (string)
+ Нет
+ n/a
+ установить значение строки статуса в браузере
+ в текст заголовка. ЗАМЕЧАНИЕ: отменяет начение autostatus
+
+
+ inarray
+ целое (integer)
+ Нет
+ n/a
+ указывает, что текст окна следует взять из указанного
+ элемента массива ol_text, расположенного в overlib.js. Этот
+ параметр может использоваться вместо text
+
+
+ caparray
+ целое (integer)
+ Нет
+ n/a
+ указывает, что заголовок окна следует взять из
+ указанного элемента массива ol_caps
+
+
+ capicon
+ url
+ Нет
+ n/a
+ выводит изображение перед заголовком окна.
+
+
+ snapx
+ целое (integer)
+ Нет
+ n/a
+ ровняет окно к горизонтальной сетке
+
+
+ snapy
+ целое (integer)
+ Нет
+ n/a
+ ровняет окно к вертикальной сетке
+
+
+ fixx
+ целое (integer)
+ Нет
+ n/a
+ закрепляет горизонтальное положение окна.
+ Замечание: отменяет все остальные параметры
+ горизонтального положения
+
+
+ fixy
+ целое (integer)
+ Нет
+ n/a
+ закрепляет вертикалнное положение окна.
+ Замечание: отменяет все остальные параметры
+ вертикального положения
+
+
+ background
+ url
+ Нет
+ n/a
+ указывает фоновое изображение окна
+
+
+ padx
+ integer,integer
+ Нет
+ n/a
+ дополняет фоновое изображение горизонтальными
+ отступами к тексту. Обратите внимание: этот параметр
+ принимает два значения
+
+
+ pady
+ integer,integer
+ Нет
+ n/a
+ дополняет фоновое изображение вертикальными
+ отступами к тексту. Обратите внимание: этот параметр
+ принимает два значения
+
+
+ fullhtml
+ логический (boolean)
+ Нет
+ n/a
+ Позволяет полностью контролировать HMTL над
+ фоновым изображением. HTML код ожидается в
+ параметре text
+
+
+ frame
+ строка (string)
+ Нет
+ n/a
+ Контролировать высплывающие окна в различных
+ фрэймах. См. сайт overlib для дополнительной информации
+ по этой функции
+
+
+ timeout
+ строка (string)
+ Нет
+ n/a
+ вызывает цказанную javascript функцию и
+ использует результат как текст окна
+
+
+ delay
+ целое (integer)
+ Нет
+ n/a
+ врремя жизни окна в милисекундах. Позволяет
+ реализовывать высплываюющие подсказки.
+
+
+ hauto
+ логический (boolean)
+ Нет
+ n/a
+ автоматическое опредление горизонтального
+ местоположения окна относительно мыши.
+
+
+ vauto
+ логический (boolean)
+ Нет
+ n/a
+ автоматическое опредление вертикального
+ местоположения окна относительно мыши.
+
+
+
+
+
+ функция popup используеться для генерации javascript кода,
+ который создаст высплывающее окно.
+
+
+popup
+
+{* popup_init должен быть вызван один раз в начале страницы *}
+{popup_init src="/javascripts/overlib.js"}
+
+{* создаем ссылку с всплывающим окном, которое появляеться при наведении мыши *}
+<A href="mypage.html" {popup text="This link takes you to my page!"}>mypage</A>
+
+{* можно использовать html, ссылки и т.п. в высплывающем окне *}
+<A href="mypage.html" {popup sticky=true caption="mypage contents"
+text="<UL><LI>links<LI>pages<LI>images</UL>" snapx=10 snapy=10}>mypage</A>
+
+OUTPUT:
+
+(Посетите официальный сайт Smarty для рабочих прммеров.)
+
+
+
+ textformat
+
+
+
+
+
+
+
+
+
+ Имя аттрибута
+ Тип
+ Обязателен
+ По умолчанию
+ Описание
+
+
+
+
+ style
+ строка (string)
+ Нет
+ n/a
+ предустановленный стиль
+
+
+ indent
+ number
+ Нет
+ 0
+ отступ строки
+
+
+ indent_first
+ number
+ Нет
+ 0
+ отступ первой строки
+
+
+ indent_char
+ строка (string)
+ Нет
+ (single space)
+ символ, которым заполняеться отступ строк.
+
+
+ wrap
+ number
+ Нет
+ 80
+ количество символов в строке
+
+
+ wrap_char
+ строка (string)
+ Нет
+ \n
+ текст, разделяющий каждую строку
+
+
+ wrap_cut
+ логический (boolean)
+ Нет
+ false
+ Переносить текст по символам (то есть точно
+ по указанной длине строки) (true), или по
+ границам слов (false)
+
+
+ assign
+ строка (string)
+ Нет
+ n/a
+ переменная шаблона, которой будет присвоен вывод
+
+
+
+
+
+ функция textformat используеться для форматирования текст,
+ заключенного внтури ее. В основном убирает лишние пробелы и
+ специальные символы, а так же форматирует абзацы, делает отступы,
+ переносит слова.
+
+
+ Можно указывать параметры явно, или использовать предустановленные стили.
+ На данный момент существует только стиль "email".
+
+
+textformat
+
+{textformat wrap=40}
+
+This is foo.
+This is foo.
+This is foo.
+This is foo.
+This is foo.
+This is foo.
+
+This is bar.
+
+bar foo bar foo foo.
+bar foo bar foo foo.
+bar foo bar foo foo.
+bar foo bar foo foo.
+bar foo bar foo foo.
+bar foo bar foo foo.
+bar foo bar foo foo.
+
+{/textformat}
+
+OUTPUT:
+
+This is foo. This is foo. This is foo.
+This is foo. This is foo. This is foo.
+
+This is bar.
+
+bar foo bar foo foo. bar foo bar foo
+foo. bar foo bar foo foo. bar foo bar
+foo foo. bar foo bar foo foo. bar foo
+bar foo foo. bar foo bar foo foo.
+
+
+{textformat wrap=40 indent=4}
+
+This is foo.
+This is foo.
+This is foo.
+This is foo.
+This is foo.
+This is foo.
+
+This is bar.
+
+bar foo bar foo foo.
+bar foo bar foo foo.
+bar foo bar foo foo.
+bar foo bar foo foo.
+bar foo bar foo foo.
+bar foo bar foo foo.
+bar foo bar foo foo.
+
+{/textformat}
+
+OUTPUT:
+
+ This is foo. This is foo. This is
+ foo. This is foo. This is foo. This
+ is foo.
+
+ This is bar.
+
+ bar foo bar foo foo. bar foo bar foo
+ foo. bar foo bar foo foo. bar foo
+ bar foo foo. bar foo bar foo foo.
+ bar foo bar foo foo. bar foo bar
+ foo foo.
+
+{textformat wrap=40 indent=4 indent_first=4}
+
+This is foo.
+This is foo.
+This is foo.
+This is foo.
+This is foo.
+This is foo.
+
+This is bar.
+
+bar foo bar foo foo.
+bar foo bar foo foo.
+bar foo bar foo foo.
+bar foo bar foo foo.
+bar foo bar foo foo.
+bar foo bar foo foo.
+bar foo bar foo foo.
+
+{/textformat}
+
+OUTPUT:
+
+ This is foo. This is foo. This
+ is foo. This is foo. This is foo.
+ This is foo.
+
+ This is bar.
+
+ bar foo bar foo foo. bar foo bar
+ foo foo. bar foo bar foo foo. bar
+ foo bar foo foo. bar foo bar foo
+ foo. bar foo bar foo foo. bar foo
+ bar foo foo.
+
+{textformat style="email"}
+
+This is foo.
+This is foo.
+This is foo.
+This is foo.
+This is foo.
+This is foo.
+
+This is bar.
+
+bar foo bar foo foo.
+bar foo bar foo foo.
+bar foo bar foo foo.
+bar foo bar foo foo.
+bar foo bar foo foo.
+bar foo bar foo foo.
+bar foo bar foo foo.
+
+{/textformat}
+
+OUTPUT:
+
+This is foo. This is foo. This is foo. This is foo. This is foo. This is
+foo.
+
+This is bar.
+
+bar foo bar foo foo. bar foo bar foo foo. bar foo bar foo foo. bar foo
+bar foo foo. bar foo bar foo foo. bar foo bar foo foo. bar foo bar foo
+foo.
+
+
+
+
+
+
diff --git a/docs/ru/designers/language-modifiers.xml b/docs/ru/designers/language-modifiers.xml
new file mode 100644
index 00000000..8029839e
--- /dev/null
+++ b/docs/ru/designers/language-modifiers.xml
@@ -0,0 +1,1145 @@
+
+
+
+ Модификаторы переменных
+
+ Модификаторы переменных могут быть прмменены к переменным, пользовательским
+ функциям или строкам. Для их применения надо после модифицируемого значения
+ указать символ | (вертикальная черта) и название модификатора.
+ Так же модификаторы могут принимать параметры, которые влияют на их поведение.
+ Эти параметры следуют за названием модификатора и разделяются
+ : (двоеточием).
+
+
+ Пример модификатора
+
+{* Выводим заголовок большими буквами *}
+<h2>{$title|upper}</h2>
+
+{* Ограничим $topic 40-а символами и добавим "..." в конце *}
+Topic: {$topic|truncate:40:"..."}
+
+{* форматируем строку *}
+{"now"|date_format:"%Y/%m/%d"}
+
+{* Применение модификатора к функции *}
+{mailto|upper address="me@domain.dom"}
+
+
+ Если модификатор применяется к переменной-массиву, то он будет применен к
+ каждому элементу массива. Если же требуется применить модификатор к массиву,
+ как к переменной, то необходимо перед именем модификатора указать символ
+ @. Пример: {$articleTitle|@count} выведет
+ количество елементов в массиве $articleTitle.
+
+
+
+ capitalize
+
+ Первые буквы каждого слова преобразуются в заглавные.
+
+
+ capitalize
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('articleTitle', 'Police begin campaign to rundown jaywalkers.');
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{$articleTitle}
+{$articleTitle|capitalize}
+
+OUTPUT:
+
+Police begin campaign to rundown jaywalkers.
+Police Begin Campaign To Rundown Jaywalkers.
+
+
+
+ count_characters
+
+ Возвращает количество символов в строке.
+
+
+count_characters
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('articleTitle', 'Cold Wave Linked to Temperatures.');
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{$articleTitle}
+{$articleTitle|count_characters}
+
+OUTPUT:
+
+Cold Wave Linked to Temperatures.
+32
+
+
+
+ cat
+
+
+
+
+
+
+
+
+
+ Позиция параметра
+ Тип
+ Обязателен
+ cat
+ Описание
+
+
+
+
+ 1
+ строка (string)
+ Нет
+ пусто
+ Данная строка добавляется к
+ модифицируемому значению.
+
+
+
+
+
+ Данная строка добавляется к модифицируемому значению.
+
+
+cat
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('articleTitle', "Psychics predict world didn't end");
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{$articleTitle|cat:" yesterday."}
+
+OUTPUT:
+
+Psychics predict world didn't end yesterday.
+
+
+
+ count_paragraphs
+
+ Возвращает количество абзацев в строке.
+
+
+count_paragraphs
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('articleTitle', "War Dims Hope for Peace. Child's Death Ruins
+Couple's Holiday.\n\nMan is Fatally Slain. Death Causes Loneliness, Feeling of Isolation.");
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{$articleTitle}
+{$articleTitle|count_paragraphs}
+
+OUTPUT:
+
+War Dims Hope for Peace. Child's Death Ruins Couple's Holiday.
+
+Man is Fatally Slain. Death Causes Loneliness, Feeling of Isolation.
+2
+
+
+
+ count_sentences
+
+ Возвращает количество предложений.
+
+
+count_sentences
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('articleTitle', 'Two Soviet Ships Collide - One Dies. Enraged Cow Injures Farmer with Axe.');
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{$articleTitle}
+{$articleTitle|count_sentences}
+
+OUTPUT:
+
+Two Soviet Ships Collide - One Dies. Enraged Cow Injures Farmer with Axe.
+2
+
+
+
+ count_words
+
+ Возвращает количество слов.
+
+
+count_words
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('articleTitle', 'Dealers Will Hear Car Talk at Noon.');
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{$articleTitle}
+{$articleTitle|count_words}
+
+OUTPUT:
+
+Dealers Will Hear Car Talk at Noon.
+7
+
+
+
+ date_format
+
+
+
+
+
+
+
+
+
+ Позиция параметра
+ Тип
+ Обязателен
+ По умолчанию
+ Описание
+
+
+
+
+ 1
+ строка (string)
+ Нет
+ %b %e, %Y
+ Формат вывода даты.
+
+
+ 2
+ строка (string)
+ Нет
+ n/a
+ Если модифицируемое значение пусто,
+ то используется это.
+
+
+
+
+
+ Формирует дату и время по заданному формату strftime(). Даты могут
+ быть в виде unix timestamps, mysql timestamps или в любом другом виде,
+ который поймет strtotime(). Проектировщики шаблонов могут использовать
+ date_format для контроля над форматом выводимых дат. Если дата,
+ переданная модификатору, пуста, то второй параметр используется как дата.
+
+
+date_format
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('yesterday', strtotime('-1 day'));
+$smarty->display('index.tpl');
+
+index.tpl:
+
+
+{$smarty.now|date_format}
+{$smarty.now|date_format:"%A, %B %e, %Y"}
+{$smarty.now|date_format:"%H:%M:%S"}
+{$yesterday|date_format}
+{$yesterday|date_format:"%A, %B %e, %Y"}
+{$yesterday|date_format:"%H:%M:%S"}
+
+OUTPUT:
+
+Feb 6, 2001
+Tuesday, February 6, 2001
+14:33:00
+Feb 5, 2001
+Monday, February 5, 2001
+14:33:00
+
+
+date_format conversion specifiers
+
+%a - сокращенное название дня недели, в зависимости от текущей локали
+
+%A - полное название дня недели, в зависимости от текущей локали
+
+%b - сокращенное нащвание месяца, в зависимости от текущей локали
+
+%B - полное название месяца, в зависимости от текущей локали
+
+%c - формат даты и времени по умолчанию для текущей локали
+
+%C - номер века (год, деленный на 100, представленный в виде целого в промежутке от 00 до 99)
+
+%d - день месяца в десятичном формате (от 00 до 31)
+
+%D - синоним %m/%d/%y
+
+%e - день месяца в десятичном формате без ведущего нуля (от 1 до 31)
+
+%g - Week-based year within century [00,99]
+
+%G - Week-based year, including the century [0000,9999]
+
+%h - синоним %b
+
+%H - часы по 24-часовым часам (от 00 до 23)
+
+%I - часы по 12-часовым часам (от 01 до 12)
+
+%j - день года (от 001 до 366)
+
+%k - часы по 24-часовым часам без ведущего нуля (от 0 до 23)
+
+%l - часы по 12-часовым часам без ведущего нуля (от 1 до 12)
+
+%m - номер месяца (от 01 до 12)
+
+%M - минуты
+
+%n - символ новой строки
+
+%p - `am' или `pm', в зависимости от заданного формата времени и текущей локали.
+
+%r - time in a.m. and p.m. notation
+
+%R - time in 24 hour notation
+
+%S - секунды
+
+%t - символ табуляции
+
+%T - время в формате %H:%M:%S
+
+%u - номер дня недели [1,7], где 1-ый день - понедельник
+
+%U - номер недели в году, считая первое воскресенья года первым днем первой недели
+
+%V - номер недели в году (по ISO 8601:1988) в диапазоне от 01 до 53, где первая неделя
+ та, у которой хотя бы 4 дня находяться в данном году. Понедельник считается
+ первым днем недели.
+
+%w - номер дня недели, где 0 - воскресенье
+
+%W - номер недели в году, считаю первый понедельник первым днем первой недели.
+
+%x - preferred date representation for the current locale without the time
+
+%X - preferred time representation for the current locale without the date
+
+%y - year as a decimal number without a century (range 00 to 99)
+
+%Y - year as a decimal number including the century
+
+%Z - time zone or name or abbreviation
+
+%% - a literal `%' character
+
+
+PROGRAMMERS ЗАМЕЧАНИЕ: date_format is essentially a wrapper to PHP's strftime()
+function. You may have more or less conversion specifiers available depending
+on your system's strftime() function where PHP was compiled. Check your
+system's manpage for a full list of valid specifiers.
+
+
+
+
+ default
+
+
+
+
+
+
+
+
+
+ Позиция параметра
+ Тип
+ Обязателен
+ По умолчанию
+ Описание
+
+
+
+
+ 1
+ строка (string)
+ Нет
+ пусто
+ Значение по умолчанию для пустой переменной.
+
+
+
+
+
+ Используется для установки значения по умолчанию для переменной. Если
+ переменная оказывается пустой, то выводиться значение по умолчанию.
+ Модификатор принимает один параметр.
+
+
+default
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('articleTitle', 'Dealers Will Hear Car Talk at Noon.');
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{$articleTitle|default:"no title"}
+{$myTitle|default:"no title"}
+
+OUTPUT:
+
+Dealers Will Hear Car Talk at Noon.
+no title
+
+
+
+ escape
+
+
+
+
+
+
+
+
+
+
+ Позиция параметра
+ Тип
+ Обязателен
+ Возможные значения
+ По умолчанию
+ Описание
+
+
+
+
+ 1
+ строка (string)
+ Нет
+ html,htmlall,url,quotes,hex,hexentity,javascript
+ html
+ Формат защиты (escape).
+
+
+
+
+
+ "Защищает" специальные символы в переменной. Используется для
+ защиты специальных символов html, защиты специальных символов
+ url, защиты одиночных кавычек, конвертации в шестандцатеричный
+ вид (hex), конвертации каждого символа в шестандцатеричное
+ html представление (hexentity), защита специальных символов
+ javascript.
+
+
+escape
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('articleTitle', "'Stiff Opposition Expected to Casketless Funeral Plan'");
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{$articleTitle}
+{$articleTitle|escape}
+{$articleTitle|escape:"html"} {* защищает & " ' < > *}
+{$articleTitle|escape:"htmlall"} {* защищает все ВСЕ html объекты *}
+{$articleTitle|escape:"url"}
+{$articleTitle|escape:"quotes"}
+<a
+href="mailto:{$EmailAddress|escape:"hex"}">{$EmailAddress|escape:"hexentity"}</a>
+
+OUTPUT:
+
+'Stiff Opposition Expected to Casketless Funeral Plan'
+'Stiff%20Opposition%20Expected%20to%20Casketless%20Funeral%20Plan'
+'Stiff%20Opposition%20Expected%20to%20Casketless%20Funeral%20Plan'
+'Stiff%20Opposition%20Expected%20to%20Casketless%20Funeral%20Plan'
+'Stiff+Opposition+Expected+to+Casketless+Funeral+Plan'
+\'Stiff Opposition Expected to Casketless Funeral Plan\'
+<a
+href="mailto:%62%6f%62%40%6d%65%2e%6e%65%74">bob@me.net</a>
+
+
+
+ indent
+
+
+
+
+
+
+
+
+
+ Позиция параметра
+ Тип
+ Обязателен
+ По умолчанию
+ Описание
+
+
+
+
+ 1
+ целое (integer)
+ Нет
+ 4
+ Количество символов для вставки.
+
+
+ 2
+ строка (string)
+ Нет
+ (один пробел)
+ Символ для вставки.
+
+
+
+
+
+ Вставляет в начало каждой строки заданное количество
+ заданных символов. По умолчанию вставляеться 4 пробела.
+
+
+indent
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('articleTitle', 'NJ judge to rule on nude beach.');
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{$articleTitle}
+
+{$articleTitle|indent}
+
+{$articleTitle|indent:10}
+
+{$articleTitle|indent:1:"\t"}
+
+OUTPUT:
+
+NJ judge to rule on nude beach.
+Sun or rain expected today, dark tonight.
+Statistics show that teen pregnancy drops off significantly after 25.
+
+ NJ judge to rule on nude beach.
+ Sun or rain expected today, dark tonight.
+ Statistics show that teen pregnancy drops off significantly after 25.
+
+ NJ judge to rule on nude beach.
+ Sun or rain expected today, dark tonight.
+ Statistics show that teen pregnancy drops off significantly after 25.
+
+ NJ judge to rule on nude beach.
+ Sun or rain expected today, dark tonight.
+ Statistics show that teen pregnancy drops off significantly after 25.
+
+
+
+ lower
+
+ Все буквы в переменной становятся маленькими.
+
+
+lower
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('articleTitle', 'Two Convicts Evade Noose, Jury Hung.');
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{$articleTitle}
+{$articleTitle|lower}
+
+OUTPUT:
+
+Two Convicts Evade Noose, Jury Hung.
+two convicts evade noose, jury hung.
+
+
+
+ nl2br
+
+ Заменяет все переносы строк на тэг <br /> в заданной
+ переменной. Это эквивалент PHP функции nl2br().
+
+
+nl2br
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('articleTitle', "Sun or rain expected\ntoday, dark tonight");
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{$articleTitle|nl2br}
+
+OUTPUT:
+
+Sun or rain expected<br />today, dark tonight
+
+
+
+ regex_replace
+
+
+
+
+
+
+
+
+
+ Позиция параметра
+ Тип
+ Обязателен
+ По умолчанию
+ Описание
+
+
+
+
+ 1
+ строка (string)
+ Да
+ n/a
+ Регулярное выражение для замены.
+
+
+ 2
+ строка (string)
+ Да
+ n/a
+ Строка для замены.
+
+
+
+
+
+ Выполняется поиск и замена по регулярному выражению в
+ переменнной. Используется синтаксис для функции
+ preg_replace() из руководства по PHP.
+
+
+regex_replace
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('articleTitle', "Infertility unlikely to\nbe passed on, experts say.");
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{* replace each carriage return, tab & new line with a space *}
+
+{$articleTitle}
+{$articleTitle|regex_replace:"/[\r\t\n]/":" "}
+
+OUTPUT:
+
+Infertility unlikely to
+ be passed on, experts say.
+Infertility unlikely to be passed on, experts say.
+
+
+
+ replace
+
+
+
+
+
+
+
+
+
+ Позиция параметра
+ Тип
+ Обязателен
+ По умолчанию
+ Описание
+
+
+
+
+ 1
+ строка (string)
+ Да
+ n/a
+ Строка для поиска.
+
+
+ 2
+ строка (string)
+ Да
+ n/a
+ Строка для замены.
+
+
+
+
+
+ Выполняеться простой поиск и замена строки.
+
+
+replace
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('articleTitle', "Child's Stool Great for Use in Garden.");
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{$articleTitle}
+{$articleTitle|replace:"Garden":"Vineyard"}
+{$articleTitle|replace:" ":" "}
+
+OUTPUT:
+
+Child's Stool Great for Use in Garden.
+Child's Stool Great for Use in Vineyard.
+Child's Stool Great for Use in Garden.
+
+
+
+ spacify
+
+
+
+
+
+
+
+
+
+ Позиция параметра
+ Тип
+ Обязателен
+ По умолчанию
+ Описание
+
+
+
+
+ 1
+ строка (string)
+ Нет
+ один пробел
+ Строка вставялется между каждым символом переменной.
+
+
+
+
+
+ Spacify позволяет вставить пробел между каждым символом переменной.
+ Можно также указать другой символ (или строку) для вставки
+
+
+spacify
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('articleTitle', 'Something Went Wrong in Jet Crash, Experts Say.');
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{$articleTitle}
+{$articleTitle|spacify}
+{$articleTitle|spacify:"^^"}
+
+OUTPUT:
+
+Something Went Wrong in Jet Crash, Experts Say.
+S o m e t h i n g W e n t W r o n g i n J e t C r a s h , E x p e r t s S a y .
+S^^o^^m^^e^^t^^h^^i^^n^^g^^ ^^W^^e^^n^^t^^ ^^W^^r^^o^^n^^g^^ ^^i^^n^^ ^^J^^e^^t^^ ^^C^^r^^a^^s^^h^^,^^ ^^E^^x^^p^^e^^r^^t^^s^^ ^^S^^a^^y^^.
+
+
+
+ string_format
+
+
+
+
+
+
+
+
+
+ Позиция параметра
+ Тип
+ Обязателен
+ По умолчанию
+ Описание
+
+
+
+
+ 1
+ строка (string)
+ Да
+ n/a
+ Формат. (sprintf)
+
+
+
+
+
+ Форматирует строку по указанному формату. Используется
+ синтаксис форматирования PHP функции sprintf.
+
+
+string_format
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('number', 23.5787446);
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{$number}
+{$number|string_format:"%.2f"}
+{$number|string_format:"%d"}
+
+OUTPUT:
+
+23.5787446
+23.58
+24
+
+
+
+ strip
+
+ Заменяет все повторные пробелы, новые строки и знаки табуляции на
+ одиночный пробел или на заданную строку.
+
+
+ Замечание
+
+ Если вы хотите сделать аналогичную операцию над частью
+ текста шаблона, то используйте функцию strip.
+
+
+
+strip
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('articleTitle', "Grandmother of\neight makes\t hole in one.");
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{$articleTitle}
+{$articleTitle|strip}
+{$articleTitle|strip:" "}
+
+OUTPUT:
+
+Grandmother of
+eight makes hole in one.
+Grandmother of eight makes hole in one.
+Grandmother of eight makes hole in one.
+
+
+
+ strip_tags
+
+ Вырезает HTML теги, обычно все между < и >.
+
+
+strip_tags
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('articleTitle', "Blind Woman Gets <font face=\"helvetica\">New Kidney</font> from Dad she Hasn't Seen in <b>years</b>.");
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{$articleTitle}
+{$articleTitle|strip_tags}
+
+OUTPUT:
+
+Blind Woman Gets <font face="helvetica">New Kidney</font> from Dad she Hasn't Seen in <b>years</b>.
+Blind Woman Gets New Kidney from Dad she Hasn't Seen in years.
+
+
+
+ truncate
+
+
+
+
+
+
+
+
+
+ Позиция параметра
+ Тип
+ Обязателен
+ По умолчанию
+ Описание
+
+
+
+
+ 1
+ целое (integer)
+ Нет
+ 80
+ Количество символов для обрезания
+ to.
+
+
+ 2
+ строка (string)
+ Нет
+ ...
+ Текст, который добавляется, если произошло обрезание.
+
+
+ 3
+ логический (boolean)
+ Нет
+ false
+ Указывает, надо ли обрезать по границе слова (false) или
+ по символу (true).
+
+
+
+
+
+ Обрезает переменную по указанной длине (по умолчанию 80). Вторым
+ параметром можно указать текст, который будет добавлен в конец
+ обрезанной строки. По умолчанию truncate будет пытаться вырезать
+ слово, которой лежит на вырезаемой границе, целиком. Можно указать
+ третий параметр true, если надо обрезать строку точно по
+ определенному символу.
+
+
+truncate
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('articleTitle', 'Two Sisters Reunite after Eighteen Years at Checkout Counter.');
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{$articleTitle}
+{$articleTitle|truncate}
+{$articleTitle|truncate:30}
+{$articleTitle|truncate:30:""}
+{$articleTitle|truncate:30:"---"}
+{$articleTitle|truncate:30:"":true}
+{$articleTitle|truncate:30:"...":true}
+
+OUTPUT:
+
+Two Sisters Reunite after Eighteen Years at Checkout Counter.
+Two Sisters Reunite after Eighteen Years at Checkout Counter.
+Two Sisters Reunite after...
+Two Sisters Reunite after
+Two Sisters Reunite after---
+Two Sisters Reunite after Eigh
+Two Sisters Reunite after E...
+
+
+
+ upper
+
+ Заменяет все маленькие буквы на большие.
+
+
+upper
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('articleTitle', "If Strike isn't Settled Quickly it may Last a While.");
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{$articleTitle}
+{$articleTitle|upper}
+
+OUTPUT:
+
+If Strike isn't Settled Quickly it may Last a While.
+IF STRIKE ISN'T SETTLED QUICKLY IT MAY LAST A WHILE.
+
+
+
+ wordwrap
+
+
+
+
+
+
+
+
+
+ Позиция параметра
+ Тип
+ Обязателен
+ По умолчанию
+ Описание
+
+
+
+
+ 1
+ целое (integer)
+ Нет
+ 80
+ Количество столбцов для переноса.
+
+
+ 2
+ строка (string)
+ Нет
+ \n
+ Строка, которая вставляется на месте переноса.
+
+
+ 3
+ логический (boolean)
+ Нет
+ false
+ Указывает, переносить по солвам (false) или нет (true).
+
+
+
+
+
+ Переносит строку по количеству столбцов (по умолчанию 80). Можно
+ указать строку, которая будет вставлятся на месте переноса (по
+ умолчанию символ новой строки). По умолчанию wordwrap пытается
+ переносить по словам, но если указать третим параметром true, то
+ переноситься будет по конкретному символу.
+
+
+wordwrap
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('articleTitle', "Blind woman gets new kidney from dad she hasn't seen in years.");
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{$articleTitle}
+
+{$articleTitle|wordwrap:30}
+
+{$articleTitle|wordwrap:20}
+
+{$articleTitle|wordwrap:30:"<br>\n"}
+
+{$articleTitle|wordwrap:30:"\n":true}
+
+OUTPUT:
+
+Blind woman gets new kidney from dad she hasn't seen in years.
+
+Blind woman gets new kidney
+from dad she hasn't seen in
+years.
+
+Blind woman gets new
+kidney from dad she
+hasn't seen in
+years.
+
+Blind woman gets new kidney<br>
+from dad she hasn't seen in years.
+
+Blind woman gets new kidney fr
+om dad she hasn't seen in year
+s.
+
+
+
+
+
diff --git a/docs/ru/designers/language-variables.xml b/docs/ru/designers/language-variables.xml
new file mode 100644
index 00000000..e64a859f
--- /dev/null
+++ b/docs/ru/designers/language-variables.xml
@@ -0,0 +1,342 @@
+
+
+
+ Переменные
+
+ Smarty имеет несколько различных типов переменных. Он зависит от
+ символа, с которого начинается, или в какой заключена переменная.
+
+
+
+ Переменные в Smarty могут быть отображены или использованы как аргументы
+ функций и модификаторов, внутри выражений условных операторов и т.д. Для
+ вывода значения переменной надо просто указать между разделителями имя
+ переменной.
+
+{$Name}
+
+{$Contacts[row].Phone}
+
+<body bgcolor="{#bgcolor#}">
+
+
+
+ Переменные, установленные в PHP
+
+ Переменные, установленные в PHP, употребляются со знаком доллар
+ $ перед ним. Переменные, установленные в
+ шаблоне с помощью функции assign употребляются
+ аналогичным образом.
+
+
+
+ Установленные переменные
+
+Привет {$firstname}, мы рады снова тебя видеть.
+<p>
+Последний раз ты посещал нас {$lastLoginDate}.
+
+OUTPUT:
+
+Привет Петя, мы рады снова тебя видеть.
+<p>
+Последний раз ты посещал нас January 11th, 2001.
+
+
+
+ Ассоциативные массивы
+
+ Чтобы использовать переменную из ассоциативного массива,
+ надо указать ключ элемента после знака '.' (точка).
+
+
+доступ к перременным ассоциативного массива
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('Contacts',
+ array('fax' => '555-222-9876',
+ 'email' => 'zaphod@slartibartfast.com',
+ 'phone' => array('home' => '555-444-3333',
+ 'cell' => '555-111-1234')));
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{$Contacts.fax}<br>
+{$Contacts.email}<br>
+{* you can print arrays of arrays as well *}
+{$Contacts.phone.home}<br>
+{$Contacts.phone.cell}<br>
+
+OUTPUT:
+
+555-222-9876<br>
+zaphod@slartibartfast.com<br>
+555-444-3333<br>
+555-111-1234<br>
+
+
+
+ Индексированные массивы
+
+ Можно использовать переменную из массива по е индексу.
+ Синтаксис аналогичен PHP.
+
+
+доступ к елементу массива по его индексу
+
+index.php:
+
+$smarty = new Smarty;
+$smarty->assign('Contacts',
+ array('555-222-9876',
+ 'zaphod@slartibartfast.com',
+ array('555-444-3333',
+ '555-111-1234')));
+$smarty->display('index.tpl');
+
+index.tpl:
+
+{$Contacts[0]}<br>
+{$Contacts[1]}<br>
+{* you can print arrays of arrays as well *}
+{$Contacts[2][0]}<br>
+{$Contacts[2][1]}<br>
+
+OUTPUT:
+
+555-222-9876<br>
+zaphod@slartibartfast.com<br>
+555-444-3333<br>
+555-111-1234<br>
+
+
+
+ Объекты
+
+ Чтобы использовать свойства обьектов, надо указать перед названием
+ своства знак `->'.
+
+
+доступ к свойствам объекта
+
+name: {$person->name}<br>
+email: {$person->email}<br>
+
+OUTPUT:
+
+name: Zaphod Beeblebrox<br>
+email: zaphod@slartibartfast.com<br>
+
+
+
+
+
+ Переменные файлов конфигурации
+
+ Для использования переменных, полученных из файлов конфигураии,
+ необходимо заключить их имя между знаками # или через переменную
+ $smarty.config.
+ Для употребления их в качестве внедренныых переменных можно
+ использовать только второй способ.
+
+
+
+Переменные из файлов конфигурации
+
+foo.conf:
+
+pageTitle = "This is mine"
+bodyBgColor = "#eeeeee"
+tableBorderSize = "3"
+tableBgColor = "#bbbbbb"
+rowBgColor = "#cccccc"
+
+index.tpl:
+
+{config_load file="foo.conf"}
+<html>
+<title>{#pageTitle#}</title>
+<body bgcolor="{#bodyBgColor#}">
+<table border="{#tableBorderSize#}" bgcolor="{#tableBgColor#}">
+<tr bgcolor="{#rowBgColor#}">
+ <td>First</td>
+ <td>Last</td>
+ <td>Address</td>
+</tr>
+</table>
+</body>
+</html>
+
+index.tpl: (alternate syntax)
+
+{config_load file="foo.conf"}
+<html>
+<title>{$smarty.config.pageTitle}</title>
+<body bgcolor="{$smarty.config.bodyBgColor}">
+<table border="{$smarty.config.tableBorderSize}" bgcolor="{$smarty.config.tableBgColor}">
+<tr bgcolor="{$smarty.config.rowBgColor}">
+ <td>First</td>
+ <td>Last</td>
+ <td>Address</td>
+</tr>
+</table>
+</body>
+</html>
+
+
+OUTPUT: (same for both examples)
+
+<html>
+<title>This is mine</title>
+<body bgcolor="#eeeeee">
+<table border="3" bgcolor="#bbbbbb">
+<tr bgcolor="#cccccc">
+ <td>First</td>
+ <td>Last</td>
+ <td>Address</td>
+</tr>
+</table>
+</body>
+</html>
+
+
+ Переменные из файлов конфигурации не могут быть использованы,
+ пока они не будут загружены. Эта процедура описана далее
+ в данном руководстве (config_load).
+
+
+
+
+ зарезервированная переменная {$smarty}
+
+ Зарезервированная переменная {$smarty} используется для доступа
+ к нескольким специальным переменным. Далее следует полный их список.
+
+
+
+ Переменные запроса.
+
+ К переменным из таких массивов, как _GET, _POST, _COOKIES, _SERVER,
+ _ENV и _SESSION, можно обращаться аналогично нижеприведенным примерам.
+
+
+
+ Вывод переменных запроса
+
+{* Вывод значения $page из URL (GET) http://www.domain.com/index.php?page=foo *}
+{$smarty.get.page}
+
+{* Вывод переменной "page" из формы (POST) *}
+{$smarty.post.page}
+
+{* Вывод значения cookie "username" *}
+{$smarty.cookies.username}
+
+{* Вывод переменное сервера "SERVER_NAME" *}
+{$smarty.server.SERVER_NAME}
+
+{* Вывод переменной окружения "PATH" *}
+{$smarty.env.PATH}
+
+{* Вывод переменной сессии "id" *}
+{$smarty.session.id}
+
+{* Вывод переменной "username" из объединенного массива get/post/cookies/server/env *}
+{$smarty.request.username}
+
+
+
+
+ {$smarty.now}
+
+ К текущему timestamp (штам времени) можно обратиться через
+ {$smarty.now}. Оно содержит число секунд с начала так
+ называемой Эпохи (Epoch, 1 января 1970 года) и может быть
+ передано прямо модификатору date_format для вывода текущей
+ даты.
+
+
+
+использование {$smarty.now}
+
+{* выводим текущее время и дату с помощью модификатора date_format *}
+{$smarty.now|date_format:"%Y-%m-%d %H:%M:%S"}
+
+
+
+ {$smarty.const}
+
+ Реализует доступ к константам PHP.
+
+
+
+использование {$smarty.const}
+
+{$smarty.const._MY_CONST_VAL}
+
+
+
+
+ {$smarty.capture}
+
+ Доступ к выводу, сохраненному с помощью тэгов
+ {capture}..{/capture}, можно получить используя переменную
+ {$smarty}. Смотри раздел capture для примера.
+
+
+
+
+ {$smarty.config}
+
+ Переменная {$smarty} может быть использована для ссылания
+ на переменные из файлов конфигураций. {$smarty.config.foo}
+ является синонимом для {#foo#}. Смотри раздел config_load
+ для примера.
+
+
+
+
+ {$smarty.section}, {$smarty.foreach}
+
+ Переменная {$smarty} может быть использована для исппользования
+ свойств структур 'section' и 'foreach'. Смотри разделы по
+ section и
+ foreach.
+
+
+
+
+ {$smarty.template}
+
+ Эта переменная содержит имя текущего шаблона.
+
+
+
+
+
+
diff --git a/docs/ru/getting-started.xml b/docs/ru/getting-started.xml
new file mode 100644
index 00000000..32ffa646
--- /dev/null
+++ b/docs/ru/getting-started.xml
@@ -0,0 +1,392 @@
+
+ Приступая к работе
+
+
+ Что такое Smarty?
+
+ Smarty - шаблонный движок для php. Более определенно, он предоставляет
+ управляемый способ разделения прикладной логики и содержания от
+ представления. Это очень удобно в ситуациях, когда программист и
+ проектировщик шаблона играют различные роли, или в часто - это
+ различные люди. Например, скажем, Вы создаете страницу, которая
+ показывает газетную статью. Название статьи, автор и сама статья -
+ елементы, которые не содржат никакой информации о том, как они
+ будут представлены. Их передают в Smarty в приложении, а проектировщик
+ шаблона редактирует шаблоны и использует комбинацию тэгов HTML и
+ тэгов шаблона, чтобы отформатировать представление этих элементов
+ (таблицы HTML, фоновые цвета, размеры шрифта, стиля, и т.д.). Однажды
+ программист захочет изменить способ хранения статьи (сделать изменения
+ в логике приложения.) Это изменение не затрагивает проектировщика шаблонов.
+ Содержание будет все еще передаваться в шаблон таким же самым способом.
+ Аналогично, если проектировщик шаблона хочет полностью перепроектировать
+ шаблоны, это не потребует никаких изменений к прикладной логике. Поэтому,
+ программист может делать изменения в прикладной логике без потребности
+ изменения шаблонов, а проектировщик шаблона может делать изменения в
+ шаблонах без изменения прикладной логики.
+
+
+ Теперь коротко о том, чего не может Smarty. Он не пытается полностью
+ разделить логику от шаблонов. Нет никакой проблемы с логикой в ваших
+ шаблонах при условии, что это строго логика представление. Совета:
+ держите прикладную логику вне шаблонов, а логику представления вне
+ приложения. Так проще всего сохранить проект управляемым и расширяемым
+ в течение долгого времени.
+
+
+ Один из уникальных аспектов в Smarty - компилирование шаблонов. Это
+ означает, что Smarty читает файлы шаблонов и создает php сценарии из них.
+ Они создаются один раз и потом только выполняються. Поэтому нету
+ необходимости обрабатывать файл шаблона для каждого запроса, и каждый
+ шаблон может пользоваться всеми преимуществами кэшируюших решений
+ php компилятора таких, как Zend Accelerator
+ (http://www.zend.com) или PHP Accelerator
+ (http://www.php-accelerator.co.uk).
+
+
+ Некоторые возможности Smarty:
+
+
+ Он очень быстр.
+ Он эффективен, так как PHP обработчик делает грязную
+ работу
+ Никакой лишней обработки шаблонов, они компилируються
+ только один раз.
+ Перекомпилируются только те шаблоны, которые
+ именились.
+ Вы можете создавать пользовательскиефункции and модификаторы, так что язык шаблонов чрезвычайно расширяем.
+ Настраиваемые разделители тэгов шаблона, то есть вы можете
+ использовать {}, {{}}, <!--{}-->, и т.д..
+ If/elseif/else/endif конструкции передаются PHP обработчику,
+ так что синтаксис {if ...} выражения может быть настолько простым или
+ комплексным, как вам нравится.
+ Допустимо неограниченное вложение секций, условий и
+ т.д.
+ Возможно включать php код прямо в ваш шаблон, хотя это
+ не должно требоваться (не рекомендуется), в силу того, что движок гибко
+ настраиваемый.
+ Встроеное кэширование
+ Произвольные источники шаблона
+ Произвольные функции обработки кэширования
+ Поддержка плагинов
+
+
+
+ Инсталяция
+
+
+ Требования
+
+ Smarty необходим вебсервер с запущеным PHP версии 4.0.6 или выше.
+
+
+
+
+ Базовая инсталяция
+
+ Инсталируйте библиотечный файлы Smarty, которые анаходятся в папке /libs/
+ дистрибутива. Вы НЕ ДОЛЖНЫ редактировать эти файлы. Они разделены среди
+ всех приложений и могут изменяться только при обновлении Smarty.
+
+
+ Бибилотечные файлы Smarty
+
+Smarty.class.php
+Smarty_Compiler.class.php
+Config_File.class.php
+debug.tpl
+/plugins/*.php (все файлы!)
+
+
+
+ Smarty использует PHP константу SMARTY_DIR, которая указывает путь к
+ библиотечным файлам Smarty. Обычно, если приложение может найти файл
+ Smarty.class.php, то нет необходимости устанавливать
+ SMARTY_DIR, Иначе, если Smarty.class.php не в вашем
+ include_path, или вы не указывали абсолютный путь к нему в приложении, то
+ вы должны определить SMARTY_DIR вручную. SMARTY_DIR должен
+ включать завершающий слэш.
+
+
+ Как надо создавать обект Smarty в ваших PHP сценариях:
+
+
+
+ Создание обекта Smarty
+
+require('Smarty.class.php');
+$smarty = new Smarty;
+
+
+
+ Попробуйте выполнить вышеупомянутый сценарий. Если Вы получаете ошибку о том,
+ что Smarty.class.php не найден, вы должны селать одно из
+ следующего:
+
+
+
+ Укажите абсолютный путь к библиотечному каталогу
+
+require('/usr/local/lib/php/Smarty/Smarty.class.php');
+$smarty = new Smarty;
+
+
+
+ Добавьте библиотечный каталог к php_include пути
+
+// Отредактируйте ваш php.ini файл, добавьте библиотечный
+// каталог Smarty к include_path и перезаупстите веб сервер.
+// Тогда следующее должно работать:
+require('Smarty.class.php');
+$smarty = new Smarty;
+
+
+
+ Установите SMARTY_DIR константу вручную
+
+define('SMARTY_DIR','/usr/local/lib/php/Smarty/');
+require(SMARTY_DIR.'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.mydomain.com/docs/".
+ К каталогам Smarty обращается только библиотека Смарти и никогда не обращает непосредственно web-браузером. Поэтому, чтобы избежать любых предприятий(беспокойств) защиты, рекомендует разместить эти каталоги в каталог от корня документа.
+
+ Be sure you know the location of your web server document root. In our
+ example, the document root is "/web/www.mydomain.com/docs/". The Smarty
+ directories are only accessed by the Smarty library and never accessed
+ directly by the web browser. Therefore to avoid any security concerns, it
+ is recommended to place these directories in a directory
+ off the document root.
+
+
+ For our installation example, we will be setting up the Smarty environment
+ for a guest book application. We picked an application only for the purpose
+ of a directory naming convention. You can use the same environment for any
+ application, just replace "guestbook" with the name of your app. We'll
+ place our Smarty directories under
+ "/web/www.mydomain.com/smarty/guestbook/".
+
+
+ You will need as least one file under your document root, and that is the
+ script accessed by the web browser. We will call our script "index.php",
+ and place it in a subdirectory under the document root called
+ "/guestbook/". It is convenient to setup the web server so that "index.php"
+ can be identified as the default directory index, so if you access
+ "http://www.mydomain.com/guestbook/", the index.php script will be executed
+ without "index.php" in the URL. In Apache you can set this up by adding
+ "index.php" onto the end of your DirectoryIndex setting (separate each
+ entry with a space.)
+
+
+
+ Lets take a look at the file structure so far:
+
+
+
+ Example file structure
+
+/usr/local/lib/php/Smarty/Smarty.class.php
+/usr/local/lib/php/Smarty/Smarty_Compiler.class.php
+/usr/local/lib/php/Smarty/Config_File.class.php
+/usr/local/lib/php/Smarty/debug.tpl
+/usr/local/lib/php/Smarty/plugins/*.php
+
+/web/www.mydomain.com/smarty/guestbook/templates/
+/web/www.mydomain.com/smarty/guestbook/templates_c/
+/web/www.mydomain.com/smarty/guestbook/configs/
+/web/www.mydomain.com/smarty/guestbook/cache/
+
+/web/www.mydomain.com/docs/guestbook/index.php
+
+
+
+ Smarty will need write access to the $compile_dir and
+ $cache_dir, so be sure the web server user can write
+ to them. This is usually user "nobody" and group "nobody". For OS X users,
+ the default is user "www" and group "www". If you are using Apache, you can
+ look in your httpd.conf file (usually in "/usr/local/apache/conf/") to see
+ what user and group are being used.
+
+
+
+ Setting file permissions
+
+
+chown nobody:nobody /web/www.mydomain.com/smarty/guestbook/templates_c/
+chmod 770 /web/www.mydomain.com/smarty/guestbook/templates_c/
+
+chown nobody:nobody /web/www.mydomain.com/smarty/guestbook/cache/
+chmod 770 /web/www.mydomain.com/smarty/guestbook/cache/
+
+
+
+ Technical Note
+
+ chmod 770 will be fairly tight security, it only allows user "nobody" and
+ group "nobody" read/write access to the directories. If you would like to
+ open up read access to anyone (mostly for your own convenience of viewing
+ these files), you can use 775 instead.
+
+
+
+
+ We need to create the index.tpl file that Smarty will load. This will be
+ located in your $template_dir.
+
+
+
+ Editing /web/www.mydomain.com/smarty/guestbook/templates/index.tpl
+
+
+{* Smarty *}
+
+Hello, {$name}!
+
+
+
+
+ Technical Note
+
+ {* Smarty *} is a template comment. It is not required, but it is good
+ practice to start all your template files with this comment. It makes
+ the file easy to recognize regardless of the file extension. For
+ example, text editors could recognize the file and turn on special
+ syntax highlighting.
+
+
+
+
+ Now lets edit index.php. We'll create an instance of Smarty, assign a
+ template variable and display the index.tpl file. In our example
+ environment, "/usr/local/lib/php/Smarty" is in our include_path. Be sure you
+ do the same, or use absolute paths.
+
+
+
+ Editing /web/www.mydomain.com/docs/guestbook/index.php
+
+// load Smarty library
+require('Smarty.class.php');
+
+$smarty = new Smarty;
+
+$smarty->template_dir = '/web/www.mydomain.com/smarty/guestbook/templates/';
+$smarty->compile_dir = '/web/www.mydomain.com/smarty/guestbook/templates_c/';
+$smarty->config_dir = '/web/www.mydomain.com/smarty/guestbook/configs/';
+$smarty->cache_dir = '/web/www.mydomain.com/smarty/guestbook/cache/';
+
+$smarty->assign('name','Ned');
+
+$smarty->display('index.tpl');
+
+
+
+ Technical Note
+
+ In our example, we are setting absolute paths to all of the Smarty
+ directories. If '/web/www.mydomain.com/smarty/guestbook/' is within your
+ PHP include_path, then these settings are not necessary. However, it is
+ more efficient and (from experience) less error-prone to set them to
+ absolute paths. This ensures that Smarty is getting files from the
+ directories you intended.
+
+
+
+
+ Now load the index.php file from your web browser. You should see "Hello,
+ Ned!"
+
+
+ You have completed the basic setup for Smarty!
+
+
+
+ Extended Setup
+
+
+ This is a continuation of the basic installation, please read
+ that first!
+
+
+ A slightly more flexible way to setup Smarty is to extend the class and
+ initialize your Smarty environment. So instead of repeatedly setting
+ directory paths, assigning the same vars, etc., we can do that in one place.
+ Lets create a new directory "/php/includes/guestbook/" and make a new file
+ called "setup.php". In our example environment, "/php/includes" is in our
+ include_path. Be sure you set this up too, or use absolute file paths.
+
+
+
+ Editing /php/includes/guestbook/setup.php
+
+
+// load Smarty library
+require('Smarty.class.php');
+
+// The setup.php file is a good place to load
+// required application library files, and you
+// can do that right here. An example:
+// require('guestbook/guestbook.lib.php');
+
+class Smarty_GuestBook extends Smarty {
+
+ function Smarty_GuestBook() {
+
+ // Class Constructor. These automatically get set with each new instance.
+
+ $this->Smarty();
+
+ $this->template_dir = '/web/www.mydomain.com/smarty/guestbook/templates/';
+ $this->compile_dir = '/web/www.mydomain.com/smarty/guestbook/templates_c/';
+ $this->config_dir = '/web/www.mydomain.com/smarty/guestbook/configs/';
+ $this->cache_dir = '/web/www.mydomain.com/smarty/guestbook/cache/';
+
+ $this->caching = true;
+ $this->assign('app_name','Guest Book');
+ }
+
+}
+
+
+
+ Now lets alter the index.php file to use setup.php:
+
+
+
+ Editing /web/www.mydomain.com/docs/guestbook/index.php
+
+
+require('guestbook/setup.php');
+
+$smarty = new Smarty_GuestBook;
+
+$smarty->assign('name','Ned');
+
+$smarty->display('index.tpl');
+
+
+
+ Now you see it is quite simple to bring up an instance of Smarty, just use
+ Smarty_GuestBook which automatically initializes everything for our application.
+
+
+
+
+
+
diff --git a/docs/ru/language-defs.ent b/docs/ru/language-defs.ent
new file mode 100644
index 00000000..b2b3b83d
--- /dev/null
+++ b/docs/ru/language-defs.ent
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/docs/ru/preface.xml b/docs/ru/preface.xml
new file mode 100644
index 00000000..544c299d
--- /dev/null
+++ b/docs/ru/preface.xml
@@ -0,0 +1,94 @@
+
+ Предисловие
+
+ Несомненно, один из наиболее частозадаваемых воросов в списках рассылки по PHP:
+ как сделать, чтобы мои PHP исходники были независимыми от окружения?
+
+ В то время
+ как PHP называется "HTML вложенный scripting язык", после написания
+ нескольких проектов, где смешаны PHP и HTML, многия понимают, что
+ разделение формы и содержания - хорошая вещь [TM]. В дополнение, во
+ многих должности дизайнера и программиста раздельные. Из этого следует
+ поиск шаблонного решения.
+
+ It is undoubtedly one of the most asked questions on the PHP mailing
+ lists: how do I make my PHP scripts independent of the layout? While
+ PHP is billed as "HTML embedded scripting language", after writing a
+ couple of projects that mixed PHP and HTML freely one comes up with the
+ idea that separation of form and content is a Good Thing [TM]. In
+ addition, in many companies the roles of layout designer and programmer
+ are separate. Consequently, the search for a templating solution
+ ensues.
+
+
+ В нашей компании например, развитие заявления(применения) продолжается
+ Следующим образом: После того, как требования docs сделаны, интерфейс
+ Проектировщик делает макеты интерфейса и дает им
+ Программист. Программист осуществляет деловую логику в PHP и использованиях
+ Макеты интерфейса, чтобы создать скелетные шаблоны. Проект - тогда
+ Врученный от человеку расположения страницы проектировщика/ткани HTML, кто приносит
+ Шаблоны до их полной славы. Проект может возвращаться и дальше
+ Между программированием/HTML пара времен. Таким образом, это важно для
+ Имейте хорошую поддержку шаблона, потому что программисты не хотят что - нибудь к
+ Делайте с HTML, и не хотите проектировщиков HTML mucking вокруг с PHP
+ Кодекс. Проектировщики нуждаются в поддержке для config файлов, динамических блоков и
+ Другие проблемы(выпуски) интерфейса, но они не хотят иметь необходимость иметь дело
+ Запутанность PHP программирование языка.
+
+
+ In our company for example, the development of an application goes on
+ as follows: After the requirements docs are done, the interface
+ designer makes mockups of the interface and gives them to the
+ programmer. The programmer implements business logic in PHP and uses
+ interface mockups to create skeleton templates. The project is then
+ handed off to the HTML designer/web page layout person who brings the
+ templates up to their full glory. The project may go back and forth
+ between programming/HTML a couple of times. Thus, it's important to
+ have good template support because programmers don't want anything to
+ do with HTML and don't want HTML designers mucking around with PHP
+ code. Designers need support for config files, dynamic blocks and
+ other interface issues, but they don't want to have to deal with
+ intricacies of the PHP programming language.
+
+
+ Looking at many templating solutions available for PHP today, most of
+ them provide a rudimentary way of substituting variables into templates
+ and do a limited form of dynamic block functionality. But our needs
+ required a bit more than that. We didn't want programmers to be dealing
+ with HTML layout at ALL, but this was almost inevitable. For instance,
+ if a designer wanted background colors to alternate on dynamic blocks,
+ this had to be worked out with the programmer in advance. We also
+ needed designers to be able to use their own configuration files, and
+ pull variables from them into the templates. The list goes on.
+
+
+ We started out writing out a spec for a template engine back in late
+ 1999. After finishing the spec, we began to work on a template engine
+ written in C that would hopefully be accepted for inclusion with PHP.
+ Not only did we run into many complicated technical barriers, but there
+ was also much heated debate about exactly what a template engine should
+ and should not do. From this experience, we decided that the template
+ engine should be written in PHP as a class, for anyone to use as they
+ see fit. So we wrote an engine that did just that and
+ SmartTemplate came into existence (note: this
+ class was never submitted to the public). It was a class that did
+ almost everything we wanted: regular variable substitution, supported
+ including other templates, integration with config files, embedding PHP
+ code, limited 'if' statement functionality and much more robust dynamic
+ blocks which could be multiply nested. It did all this with regular
+ expressions and the code turned out to be rather, shall we say,
+ impenetrable. It was also noticably slow in large applications from all
+ the parsing and regular expression work it had to do on each
+ invocation. The biggest problem from a programmer's point of view was
+ all the necessary work in the PHP script to setup and process templates
+ and dynamic blocks. How do we make this easier?
+
+
+ Then came the vision of what ultimately became Smarty. We know how fast
+ PHP code is without the overhead of template parsing. We also know how
+ meticulous and overbearing the PHP language may look to the average
+ designer, and this could be masked with a much simpler templating
+ syntax. So what if we combined the two strengths? Thus, Smarty was
+ born...
+
+
diff --git a/docs/ru/programmers/advanced-features.xml b/docs/ru/programmers/advanced-features.xml
new file mode 100644
index 00000000..b09f52cb
--- /dev/null
+++ b/docs/ru/programmers/advanced-features.xml
@@ -0,0 +1,526 @@
+
+
+
+ Advanced Features
+
+ Objects
+
+ Smarty allows access to PHP objects through the templates. There are
+ two ways to access them. One way is to register objects to the template,
+ then use access them via syntax similar to custom functions. The other way
+ is to assign objects to the templates and access them much like any other
+ assigned variable. The first method has a much nicer template syntax. It
+ is also more secure, as a registered object can be restricted to certain
+ methods or properties. However, a registered object cannot be looped over
+ or assigned in arrays of objects, etc. The method you choose will be
+ determined by your needs, but use the first method whenever possible to
+ keep template syntax to a minimum.
+
+
+ If security is enabled, no private methods or functions can be accessed
+ (begininning with "_"). If a method and property of the same name exist,
+ the method will be used.
+
+
+ You can restrict the methods and properties that can be accessed by
+ listing them in an array as the third registration parameter.
+
+
+ By default, parameters passed to objects through the templates are passed
+ the same way custom functions get them. An associative array is passed
+ as the first parameter, and the smarty object as the second. If you want
+ the parameters passed one at a time for each argument like traditional
+ object parameter passing, set the fourth registration parameter to false.
+
+
+ using a registered or assigned object
+
+<?php
+// the object
+
+class My_Object() {
+ function meth1($params, &$smarty_obj) {
+ return "this is my meth1";
+ }
+}
+
+$myobj = new My_Object;
+// registering the object (will be by reference)
+$smarty->register_object("foobar",$myobj);
+// if we want to restrict access to certain methods or properties, list them
+$smarty->register_object("foobar",$myobj,array('meth1','meth2','prop1'));
+// if you want to use the traditional object parameter format, pass a boolean of false
+$smarty->register_object("foobar",$myobj,null,false);
+
+// We can also assign objects. Assign by ref when possible.
+$smarty->assign_by_ref("myobj", $myobj);
+
+$smarty->display("index.tpl");
+?>
+
+TEMPLATE:
+
+{* access our registered object *}
+{foobar->meth1 p1="foo" p2=$bar}
+
+{* you can also assign the output *}
+{foobar->meth1 p1="foo" p2=$bar assign="output"}
+the output was {$output)
+
+{* access our assigned object *}
+{$myobj->meth1("foo",$bar)}
+
+
+
+ Prefilters
+
+ Template prefilters are PHP functions that your templates are ran through
+ before they are compiled. This is good for preprocessing your templates
+ to remove unwanted comments, keeping an eye on what people are putting
+ in their templates, etc. Prefilters can be either
+ registered or loaded from
+ the plugins directory by using
+ load_filter() function or by
+ setting
+ $autoload_filters variable.
+ Smarty will pass the template source code as the first argument, and
+ expect the function to return the resulting template source code.
+
+
+ using a template prefilter
+
+<?php
+// put this in your application
+function remove_dw_comments($tpl_source, &$smarty)
+{
+ return preg_replace("/<!--#.*-->/U","",$tpl_source);
+}
+
+// register the prefilter
+$smarty->register_prefilter("remove_dw_comments");
+$smarty->display("index.tpl");
+?>
+
+{* Smarty template index.tpl *}
+<!--# this line will get removed by the prefilter -->
+
+
+
+
+ Postfilters
+
+ Template postfilters are PHP functions that your templates are ran through
+ after they are compiled. Postfilters can be either
+ registered or loaded
+ from the plugins directory by using
+ load_filter() function or by
+ setting
+ $autoload_filters
+ variable. Smarty will pass the compiled template code as the first
+ argument, and expect the function to return the result of the
+ processing.
+
+
+ using a template postfilter
+
+<?php
+// put this in your application
+function add_header_comment($tpl_source, &$smarty)
+{
+ return "<?php echo \"<!-- Created by Smarty! -->\n\" ?>\n".$tpl_source;
+}
+
+// register the postfilter
+$smarty->register_postfilter("add_header_comment");
+$smarty->display("index.tpl");
+?>
+
+{* compiled Smarty template index.tpl *}
+<!-- Created by Smarty! -->
+{* rest of template content... *}
+
+
+
+
+ Output Filters
+
+ When the template is invoked via display() or fetch(), its output can be
+ sent through one or more output filters. This differs from postfilters
+ because postfilters operate on compiled templates before they are saved to
+ the disk, and output filters operate on the template output when it is
+ executed.
+
+
+
+ Output filters can be either
+ registered or loaded
+ from the plugins directory by using
+ load_filter() function or by
+ setting
+ $autoload_filters
+ variable. Smarty will pass the template output as the first argument,
+ and expect the function to return the result of the processing.
+
+
+ using a template outputfilter
+
+<?php
+// put this in your application
+function protect_email($tpl_output, &$smarty)
+{
+ $tpl_output =
+ preg_replace('!(\S+)@([a-zA-Z0-9\.\-]+\.([a-zA-Z]{2,3}|[0-9]{1,3}))!',
+ '$1%40$2', $tpl_output);
+ return $tpl_output;
+}
+
+// register the outputfilter
+$smarty->register_outputfilter("protect_email");
+$smarty->display("index.tpl");
+
+// now any occurrence of an email address in the template output will have
+// a simple protection against spambots
+?>
+
+
+
+
+ Cache Handler Function
+
+ As an alternative to using the default file-based caching mechanism, you
+ can specify a custom cache handling function that will be used to read,
+ write and clear cached files.
+
+
+ Create a function in your application that Smarty will use as a
+ cache handler. Set the name of it in the
+ $cache_handler_func
+ class variable. Smarty will now use this to handle cached data. The
+ first argument is the action, which will be one of 'read', 'write' and
+ 'clear'. The second parameter is the Smarty object. The third parameter
+ is the cached content. Upon a write, Smarty passes the cached content
+ in these parameters. Upon a 'read', Smarty expects your function to
+ accept this parameter by reference and populate it with the cached
+ data. Upon a 'clear', pass a dummy variable here since it is not used.
+ The fourth parameter is the name of the template file (needed for
+ read/write), the fifth parameter is the cache_id (optional), and the
+ sixth is the compile_id (optional).
+
+
+ example using MySQL as a cache source
+
+<?php
+/*
+
+example usage:
+
+include('Smarty.class.php');
+include('mysql_cache_handler.php');
+
+$smarty = new Smarty;
+$smarty->cache_handler_func = 'mysql_cache_handler';
+
+$smarty->display('index.tpl');
+
+
+mysql database is expected in this format:
+
+create database SMARTY_CACHE;
+
+create table CACHE_PAGES(
+CacheID char(32) PRIMARY KEY,
+CacheContents MEDIUMTEXT NOT NULL
+);
+
+*/
+
+function mysql_cache_handler($action, &$smarty_obj, &$cache_content, $tpl_file=null, $cache_id=null, $compile_id=null)
+{
+ // set db host, user and pass here
+ $db_host = 'localhost';
+ $db_user = 'myuser';
+ $db_pass = 'mypass';
+ $db_name = 'SMARTY_CACHE';
+ $use_gzip = false;
+
+ // create unique cache id
+ $CacheID = md5($tpl_file.$cache_id.$compile_id);
+
+ if(! $link = mysql_pconnect($db_host, $db_user, $db_pass)) {
+ $smarty_obj->_trigger_error_msg("cache_handler: could not connect to database");
+ return false;
+ }
+ mysql_select_db($db_name);
+
+ switch ($action) {
+ case 'read':
+ // save cache to database
+ $results = mysql_query("select CacheContents from CACHE_PAGES where CacheID='$CacheID'");
+ if(!$results) {
+ $smarty_obj->_trigger_error_msg("cache_handler: query failed.");
+ }
+ $row = mysql_fetch_array($results,MYSQL_ASSOC);
+
+ if($use_gzip && function_exists("gzuncompress")) {
+ $cache_contents = gzuncompress($row["CacheContents"]);
+ } else {
+ $cache_contents = $row["CacheContents"];
+ }
+ $return = $results;
+ break;
+ case 'write':
+ // save cache to database
+
+ if($use_gzip && function_exists("gzcompress")) {
+ // compress the contents for storage efficiency
+ $contents = gzcompress($cache_content);
+ } else {
+ $contents = $cache_content;
+ }
+ $results = mysql_query("replace into CACHE_PAGES values(
+ '$CacheID',
+ '".addslashes($contents)."')
+ ");
+ if(!$results) {
+ $smarty_obj->_trigger_error_msg("cache_handler: query failed.");
+ }
+ $return = $results;
+ break;
+ case 'clear':
+ // clear cache info
+ if(empty($cache_id) && empty($compile_id) && empty($tpl_file)) {
+ // clear them all
+ $results = mysql_query("delete from CACHE_PAGES");
+ } else {
+ $results = mysql_query("delete from CACHE_PAGES where CacheID='$CacheID'");
+ }
+ if(!$results) {
+ $smarty_obj->_trigger_error_msg("cache_handler: query failed.");
+ }
+ $return = $results;
+ break;
+ default:
+ // error, unknown action
+ $smarty_obj->_trigger_error_msg("cache_handler: unknown action \"$action\"");
+ $return = false;
+ break;
+ }
+ mysql_close($link);
+ return $return;
+
+}
+
+?>
+
+
+
+
+ Resources
+
+ The templates may come from a variety of sources. When you display or
+ fetch a template, or when you include a template from within another
+ template, you supply a resource type, followed by the appropriate path
+ and template name.
+
+
+ Templates from $template_dir
+
+ Templates from the $template_dir do not require a template
+ resource, although you can use the file: resource for consistancy.
+ Just supply the path to the template you want to use relative to
+ the $template_dir root directory.
+
+
+ using templates from $template_dir
+
+// from PHP script
+$smarty->display("index.tpl");
+$smarty->display("admin/menu.tpl");
+$smarty->display("file:admin/menu.tpl"); // same as one above
+
+{* from within Smarty template *}
+{include file="index.tpl"}
+{include file="file:index.tpl"} {* same as one above *}
+
+
+
+ Templates from any directory
+
+ Templates outside of the $template_dir require the file: template
+ resource type, followed by the absolute path and name of the
+ template.
+
+
+ using templates from any directory
+
+// from PHP script
+$smarty->display("file:/export/templates/index.tpl");
+$smarty->display("file:/path/to/my/templates/menu.tpl");
+
+{* from within Smarty template *}
+{include file="file:/usr/local/share/templates/navigation.tpl"}
+
+
+
+ Windows Filepaths
+
+ If you are using a Windows machine, filepaths usually include a
+ drive letter (C:) at the beginning of the pathname. Be sure to use
+ "file:" in the path to avoid namespace conflicts and get the
+ desired results.
+
+
+ using templates from windows file paths
+
+// from PHP script
+$smarty->display("file:C:/export/templates/index.tpl");
+$smarty->display("file:F:/path/to/my/templates/menu.tpl");
+
+{* from within Smarty template *}
+{include file="file:D:/usr/local/share/templates/navigation.tpl"}
+
+
+
+
+
+ Templates from other sources
+
+ You can retrieve templates using whatever possible source you can
+ access with PHP: databases, sockets, LDAP, and so on. You do this
+ by writing resource plugin functions and registering them with
+ Smarty.
+
+
+
+ See resource plugins
+ section for more information on the functions you are supposed
+ to provide.
+
+
+
+
+ Note that you cannot override the built-in
+ file resource, but you can provide a resource
+ that fetches templates from the file system in some other way by
+ registering under another resource name.
+
+
+
+ using custom resources
+
+// from PHP script
+
+// put these function somewhere in your application
+function db_get_template ($tpl_name, &$tpl_source, &$smarty_obj)
+{
+ // do database call here to fetch your template,
+ // populating $tpl_source
+ $sql = new SQL;
+ $sql->query("select tpl_source
+ from my_table
+ where tpl_name='$tpl_name'");
+ if ($sql->num_rows) {
+ $tpl_source = $sql->record['tpl_source'];
+ return true;
+ } else {
+ return false;
+ }
+}
+
+function db_get_timestamp($tpl_name, &$tpl_timestamp, &$smarty_obj)
+{
+ // do database call here to populate $tpl_timestamp.
+ $sql = new SQL;
+ $sql->query("select tpl_timestamp
+ from my_table
+ where tpl_name='$tpl_name'");
+ if ($sql->num_rows) {
+ $tpl_timestamp = $sql->record['tpl_timestamp'];
+ return true;
+ } else {
+ return false;
+ }
+}
+
+function db_get_secure($tpl_name, &$smarty_obj)
+{
+ // assume all templates are secure
+ return true;
+}
+
+function db_get_trusted($tpl_name, &$smarty_obj)
+{
+ // not used for templates
+}
+
+// register the resource name "db"
+$smarty->register_resource("db", array("db_get_template",
+ "db_get_timestamp",
+ "db_get_secure",
+ "db_get_trusted"));
+
+// using resource from php script
+$smarty->display("db:index.tpl");
+
+{* using resource from within Smarty template *}
+{include file="db:/extras/navigation.tpl"}
+
+
+
+
+ Default template handler function
+
+ You can specify a function that is used to retrieve template
+ contents in the event the template cannot be retrieved from its
+ resource. One use of this is to create templates that do not exist
+ on-the-fly.
+
+
+ using the default template handler function
+
+<?php
+// put this function somewhere in your application
+
+function make_template ($resource_type, $resource_name, &$template_source, &$template_timestamp, &$smarty_obj)
+{
+ if( $resource_type == 'file' ) {
+ if ( ! is_readable ( $resource_name )) {
+ // create the template file, return contents.
+ $template_source = "This is a new template.";
+ $template_timestamp = time();
+ $smarty_obj->_write_file($resource_name,$template_source);
+ return true;
+ }
+ } else {
+ // not a file
+ return false;
+ }
+}
+
+// set the default handler
+$smarty->default_template_handler_func = 'make_template';
+?>
+
+
+
+
+
diff --git a/docs/ru/programmers/api-functions.xml b/docs/ru/programmers/api-functions.xml
new file mode 100644
index 00000000..ee212ea9
--- /dev/null
+++ b/docs/ru/programmers/api-functions.xml
@@ -0,0 +1,950 @@
+
+
+
+ Methods
+
+ append
+
+
+ void append
+ mixed var
+
+
+ void append
+ string varname
+ mixed var
+
+
+ void append
+ string varname
+ mixed var
+ boolean merge
+
+
+
+ This is used to append an element to an assigned array. If you append
+ to a string value, it is converted to an array value and then
+ appended to. You can explicitly pass name/value pairs, or associative
+ arrays containing the name/value pairs. If you pass the optional third
+ parameter of true, the value will be merged with the current array
+ instead of appended.
+
+
+ Technical Note
+
+ The merge parameter respects array keys, so if you merge two
+ numerically indexed arrays, they may overwrite each other or result in
+ non-sequential keys. This is unlike the array_merge() function of PHP
+ which wipes out numerical keys and renumbers them.
+
+
+
+ append
+
+// passing name/value pairs
+$smarty->append("Name","Fred");
+$smarty->append("Address",$address);
+
+// passing an associative array
+$smarty->append(array("city" => "Lincoln","state" => "Nebraska"));
+
+
+
+ append_by_ref
+
+
+ void append_by_ref
+ string varname
+ mixed var
+
+
+ void append_by_ref
+ string varname
+ mixed var
+ boolean merge
+
+
+
+ This is used to append values to the templates by reference.
+ If you append a variable by reference then change its
+ value, the appended value sees the change as well. For objects,
+ append_by_ref() also avoids an in-memory copy of the appended object.
+ See the PHP manual on variable referencing for an in-depth
+ explanation. If you pass the optional third parameter of true,
+ the value will be merged with the current array instead of appended.
+
+
+ Technical Note
+
+ The merge parameter respects array keys, so if you merge two
+ numerically indexed arrays, they may overwrite each other or result in
+ non-sequential keys. This is unlike the array_merge() function of PHP
+ which wipes out numerical keys and renumbers them.
+
+
+
+ append_by_ref
+
+// appending name/value pairs
+$smarty->append_by_ref("Name",$myname);
+$smarty->append_by_ref("Address",$address);
+
+
+
+ assign
+
+
+ void assign
+ mixed var
+
+
+ void assign
+ string varname
+ mixed var
+
+
+
+ This is used to assign values to the templates. You can
+ explicitly pass name/value pairs, or associative arrays
+ containing the name/value pairs.
+
+
+ assign
+
+// passing name/value pairs
+$smarty->assign("Name","Fred");
+$smarty->assign("Address",$address);
+
+// passing an associative array
+$smarty->assign(array("city" => "Lincoln","state" => "Nebraska"));
+
+
+
+ assign_by_ref
+
+
+ void assign_by_ref
+ string varname
+ mixed var
+
+
+
+ This is used to assign values to the templates by reference instead of
+ making a copy. See the PHP manual on variable referencing for an explanation.
+
+
+ Technical Note
+
+ This is used to assign values to the templates by reference.
+ If you assign a variable by reference then change its
+ value, the assigned value sees the change as well. For objects,
+ assign_by_ref() also avoids an in-memory copy of the assigned object.
+ See the PHP manual on variable referencing for an in-depth
+ explanation.
+
+
+
+ assign_by_ref
+
+// passing name/value pairs
+$smarty->assign_by_ref("Name",$myname);
+$smarty->assign_by_ref("Address",$address);
+
+
+
+ clear_all_assign
+
+
+ void clear_all_assign
+
+
+
+
+ This clears the values of all assigned variables.
+
+
+clear_all_assign
+
+// clear all assigned variables
+$smarty->clear_all_assign();
+
+
+
+ clear_all_cache
+
+
+ void clear_all_cache
+ int expire time
+
+
+
+ This clears the entire template cache. As an optional
+ parameter, you can supply a minimum age in seconds the cache
+ files must be before they will get cleared.
+
+
+clear_all_cache
+
+// clear the entire cache
+$smarty->clear_all_cache();
+
+
+
+ clear_assign
+
+
+ void clear_assign
+ string var
+
+
+
+ This clears the value of an assigned variable. This
+ can be a single value, or an array of values.
+
+
+clear_assign
+
+// clear a single variable
+$smarty->clear_assign("Name");
+
+// clear multiple variables
+$smarty->clear_assign(array("Name","Address","Zip"));
+
+
+
+ clear_cache
+
+ voidclear_cache
+ stringtemplate
+ stringcache id
+ stringcompile id
+ stringexpire time
+
+
+ This clears the cache for a specific template. If you have
+ multiple caches for this template, you can clear a specific
+ cache by supplying the cache id as the second parameter. You
+ can also pass a compile id as a third parameter. You can "group"
+ templates together so they can be removed as a group. See the
+ caching section for more
+ information. As an optional fourth parameter, you can supply a
+ minimum age in seconds the cache file must be before it will
+ get cleared.
+
+
+clear_cache
+
+// clear the cache for a template
+$smarty->clear_cache("index.tpl");
+
+// clear the cache for a particular cache id in an multiple-cache template
+$smarty->clear_cache("index.tpl","CACHEID");
+
+
+
+ clear_compiled_tpl
+
+
+ void clear_compiled_tpl
+ string tpl_file
+
+
+
+ This clears the compiled version of the specified template
+ resource, or all compiled template files if one is not specified.
+ This function is for advanced use only, not normally needed.
+
+
+clear_compiled_tpl
+
+// clear a specific template resource
+$smarty->clear_compiled_tpl("index.tpl");
+
+// clear entire compile directory
+$smarty->clear_compiled_tpl();
+
+
+
+ clear_config
+
+ voidclear_config
+ stringvar
+
+
+ This clears all assigned config variables. If a variable name is
+ supplied, only that variable is cleared.
+
+
+clear_config
+
+// clear all assigned config variables.
+$smarty->clear_config();
+
+// clear one variable
+$smarty->clear_config('foobar');
+
+
+
+ config_load
+
+ voidconfig_load
+ stringfile
+ stringsection
+
+
+ This loads config file data and assigns it to the template. This
+ works identical to the template config_load
+ function.
+
+
+ Technical Note
+
+ As of Smarty 2.4.0, assigned template variables are kept across
+ invocations of fetch() and display(). Config vars loaded from
+ config_load() are always global scope. Config files are also
+ compiled for faster execution, and respect the force_compile and compile_check settings.
+
+
+
+config_load
+
+// load config variables and assign them
+$smarty->config_load('my.conf');
+
+// load a section
+$smarty->config_load('my.conf','foobar');
+
+
+
+ display
+
+ voiddisplay
+ stringtemplate
+ stringcache_id
+ stringcompile_id
+
+
+ This displays the template. Supply a valid template resource
+ type and path. As an optional second parameter, you can pass a
+ cache id. See the caching
+ section for more information.
+
+
+ As an optional third parameter, you can pass a compile id. This
+ is in the event that you want to compile different versions of
+ the same template, such as having separate templates compiled
+ for different languages. Another use for compile_id is when you
+ use more than one $template_dir but only one $compile_dir. Set
+ a separate compile_id for each $template_dir, otherwise
+ templates of the same name will overwrite each other. You can
+ also set the $compile_id variable once
+ instead of passing this to each call to display().
+
+
+display
+
+include("Smarty.class.php");
+$smarty = new Smarty;
+$smarty->caching = true;
+
+// only do db calls if cache doesn't exist
+if(!$smarty->is_cached("index.tpl"))
+{
+
+ // dummy up some data
+ $address = "245 N 50th";
+ $db_data = array(
+ "City" => "Lincoln",
+ "State" => "Nebraska",
+ "Zip" = > "68502"
+ );
+
+ $smarty->assign("Name","Fred");
+ $smarty->assign("Address",$address);
+ $smarty->assign($db_data);
+
+}
+
+// display the output
+$smarty->display("index.tpl");
+
+
+ Use the syntax for template resources to
+ display files outside of the $template_dir directory.
+
+
+function display template resource examples
+
+// absolute filepath
+$smarty->display("/usr/local/include/templates/header.tpl");
+
+// absolute filepath (same thing)
+$smarty->display("file:/usr/local/include/templates/header.tpl");
+
+// windows absolute filepath (MUST use "file:" prefix)
+$smarty->display("file:C:/www/pub/templates/header.tpl");
+
+// include from template resource named "db"
+$smarty->display("db:header.tpl");
+
+
+
+
+ fetch
+
+ stringfetch
+ stringtemplate
+ stringcache_id
+ stringcompile_id
+
+
+ This returns the template output instead of displaying it.
+ Supply a valid template resource
+ type and path. As an optional second parameter, you can pass a
+ cache id. See the caching
+ section for more information.
+
+
+ As an optional third parameter, you can pass a compile id. This
+ is in the event that you want to compile different versions of
+ the same template, such as having separate templates compiled
+ for different languages. Another use for compile_id is when you
+ use more than one $template_dir but only one $compile_dir. Set
+ a separate compile_id for each $template_dir, otherwise
+ templates of the same name will overwrite each other. You can
+ also set the $compile_id variable once
+ instead of passing this to each call to fetch().
+
+
+fetch
+
+include("Smarty.class.php");
+$smarty = new Smarty;
+
+$smarty->caching = true;
+
+// only do db calls if cache doesn't exist
+if(!$smarty->is_cached("index.tpl"))
+{
+
+ // dummy up some data
+ $address = "245 N 50th";
+ $db_data = array(
+ "City" => "Lincoln",
+ "State" => "Nebraska",
+ "Zip" = > "68502"
+ );
+
+ $smarty->assign("Name","Fred");
+ $smarty->assign("Address",$address);
+ $smarty->assign($db_data);
+
+}
+
+// capture the output
+$output = $smarty->fetch("index.tpl");
+
+// do something with $output here
+
+echo $output;
+
+
+
+ get_config_vars
+
+ arrayget_config_vars
+ stringvarname
+
+
+ This returns the given loaded config variable value. If no parameter
+ is given, an array of all loaded config variables is returned.
+
+
+get_config_vars
+
+// get loaded config template var 'foo'
+$foo = $smarty->get_config_vars('foo');
+
+// get all loaded config template vars
+$config_vars = $smarty->get_config_vars();
+
+// take a look at them
+print_r($config_vars);
+
+
+
+ get_registered_object
+
+
+ array get_registered_object
+ string object_name
+
+
+
+ This returns a reference to a registered object. This is useful
+ from within a custom function when you need direct access to a
+ registered object.
+
+
+get_registered_object
+
+function smarty_block_foo($params, &$smarty) {
+ if (isset[$params['object']]) {
+ // get reference to registered object
+ $obj_ref =& $smarty->&get_registered_object($params['object']);
+ // use $obj_ref is now a reference to the object
+ }
+}
+
+
+
+ get_template_vars
+
+ arrayget_template_vars
+ stringvarname
+
+
+ This returns the given assigned variable value. If no parameter
+ is given, an array of all assigned variables is returned.
+
+
+get_template_vars
+
+// get assigned template var 'foo'
+$foo = $smarty->get_template_vars('foo');
+
+// get all assigned template vars
+$tpl_vars = $smarty->get_template_vars();
+
+// take a look at them
+print_r($tpl_vars);
+
+
+
+ is_cached
+
+
+ void is_cached
+ string template
+ [string cache_id]
+
+
+
+ This returns true if there is a valid cache for this template.
+ This only works if caching is set to true.
+
+
+is_cached
+
+$smarty->caching = true;
+
+if(!$smarty->is_cached("index.tpl")) {
+ // do database calls, assign vars here
+}
+
+$smarty->display("index.tpl");
+
+
+ You can also pass a cache id as an optional second parameter
+ in case you want multiple caches for the given template.
+
+
+is_cached with multiple-cache template
+
+$smarty->caching = true;
+
+if(!$smarty->is_cached("index.tpl","FrontPage")) {
+ // do database calls, assign vars here
+}
+
+$smarty->display("index.tpl","FrontPage");
+
+
+
+ load_filter
+
+
+ void load_filter
+ string type
+ string name
+
+
+
+ This function can be used to load a filter plugin. The first
+ argument specifies the type of the filter to load and can be one
+ of the following: 'pre', 'post', or 'output'. The second argument
+ specifies the name of the filter plugin, for example, 'trim'.
+
+
+loading filter plugins
+
+$smarty->load_filter('pre', 'trim'); // load prefilter named 'trim'
+$smarty->load_filter('pre', 'datefooter'); // load another prefilter named 'datefooter'
+$smarty->load_filter('output', 'compress'); // load output filter named 'compress'
+
+
+
+ register_block
+
+
+ void register_block
+ string name
+ string impl
+
+
+
+ Use this to dynamically register block functions plugins.
+ Pass in the block function name, followed by the PHP
+ function name that implements it.
+
+
+register_block
+
+/* PHP */
+$smarty->register_block("translate", "do_translation");
+
+function do_translation ($params, $content, &$smarty) {
+ if ($content) {
+ $lang = $params['lang'];
+ // do some translation with $content
+ echo $translation;
+ }
+}
+
+{* template *}
+{translate lang="br"}
+ Hello, world!
+{/translate}
+
+
+
+ register_compiler_function
+
+
+ void register_compiler_function
+ string name
+ string impl
+
+
+
+ Use this to dynamically register a compiler function plugin.
+ Pass in the compiler function name, followed by the PHP
+ function that implements it.
+
+
+
+ register_function
+
+
+ void register_function
+ string name
+ string impl
+
+
+
+ Use this to dynamically register template function plugins.
+ Pass in the template function name, followed by the PHP
+ function name that implements it.
+
+
+register_function
+
+$smarty->register_function("date_now", "print_current_date");
+
+function print_current_date ($params) {
+ extract($params);
+ if(empty($format))
+ $format="%b %e, %Y";
+ echo strftime($format,time());
+}
+
+// now you can use this in Smarty to print the current date: {date_now}
+// or, {date_now format="%Y/%m/%d"} to format it.
+
+
+
+ register_modifier
+
+
+ void register_modifier
+ string name
+ string impl
+
+
+
+ Use this to dynamically register modifier plugin. Pass in the
+ template modifier name, followed by the PHP function that it
+ implements it.
+
+
+register_modifier
+
+// let's map PHP's stripslashes function to a Smarty modifier.
+
+$smarty->register_modifier("sslash","stripslashes");
+
+// now you can use {$var|sslash} to strip slashes from variables
+
+
+
+ register_object
+
+
+ void register_object
+ string object_name
+ object $object
+ array allowed methods/properties
+ boolean format
+
+
+
+ This is to register an object for use in the templates. See the
+ object section
+ of the manual for examples.
+
+
+
+ register_outputfilter
+
+
+ void register_outputfilter
+ string function_name
+
+
+
+ Use this to dynamically register outputfilters to operate on
+ a template's output before it is displayed. See
+ template output
+ filters
+ for more information on how to set up an output filter function.
+
+
+
+ register_postfilter
+
+
+ void register_postfilter
+ string function_name
+
+
+
+ Use this to dynamically register postfilters to run templates
+ through after they are compiled. See template postfilters for
+ more information on how to setup a postfiltering function.
+
+
+
+ register_prefilter
+
+
+ void register_prefilter
+ string function_name
+
+
+
+ Use this to dynamically register prefilters to run templates
+ through before they are compiled. See template prefilters for
+ more information on how to setup a prefiltering function.
+
+
+
+ register_resource
+
+
+ void register_resource
+ string name
+ array resource_funcs
+
+
+
+ Use this to dynamically register a resource plugin with Smarty.
+ Pass in the name of the resource and the array of PHP functions
+ implementing it. See
+ template resources
+ for more information on how to setup a function for fetching
+ templates.
+
+
+register_resource
+
+$smarty->register_resource("db", array("db_get_template",
+ "db_get_timestamp",
+ "db_get_secure",
+ "db_get_trusted"));
+
+
+
+ trigger_error
+
+
+ void trigger_error
+ string error_msg
+ [int level]
+
+
+
+ This function can be used to output an error message using Smarty.
+ level parameter can be one of the values
+ used for trigger_error() PHP function, i.e. E_USER_NOTICE,
+ E_USER_WARNING, etc. By default it's E_USER_WARNING.
+
+
+
+
+ template_exists
+
+
+ bool template_exists
+ string template
+
+
+
+ This function checks whether the specified template exists. It can
+ accept either a path to the template on the filesystem or a
+ resource string specifying the template.
+
+
+
+ unregister_block
+
+
+ void unregister_block
+ string name
+
+
+
+ Use this to dynamically unregister block function plugin.
+ Pass in the block function name.
+
+
+
+ unregister_compiler_function
+
+
+ void unregister_compiler_function
+ string name
+
+
+
+ Use this to dynamically unregister a compiler function. Pass in
+ the name of the compiler function.
+
+
+
+ unregister_function
+
+
+ void unregister_function
+ string name
+
+
+
+ Use this to dynamically unregister template function plugin.
+ Pass in the template function name.
+
+
+unregister_function
+
+// we don't want template designers to have access to system files
+
+$smarty->unregister_function("fetch");
+
+
+
+ unregister_modifier
+
+
+ void unregister_modifier
+ string name
+
+
+
+ Use this to dynamically unregister modifier plugin. Pass in the
+ template modifier name.
+
+
+unregister_modifier
+
+// we don't want template designers to strip tags from elements
+
+$smarty->unregister_modifier("strip_tags");
+
+
+
+ unregister_object
+
+
+ void unregister_object
+ string object_name
+
+
+
+ Use this to unregister an object.
+
+
+
+ unregister_outputfilter
+
+
+ void unregister_outputfilter
+ string function_name
+
+
+
+ Use this to dynamically unregister an output filter.
+
+
+
+ unregister_postfilter
+
+
+ void unregister_postfilter
+ string function_name
+
+
+
+ Use this to dynamically unregister a postfilter.
+
+
+
+ unregister_prefilter
+
+
+ void unregister_prefilter
+ string function_name
+
+
+
+ Use this to dynamically unregister a prefilter.
+
+
+
+ unregister_resource
+
+
+ void unregister_resource
+ string name
+
+
+
+ Use this to dynamically unregister a resource plugin. Pass in the
+ name of the resource.
+
+
+unregister_resource
+
+$smarty->unregister_resource("db");
+
+
+
diff --git a/docs/ru/programmers/api-variables.xml b/docs/ru/programmers/api-variables.xml
new file mode 100644
index 00000000..eb71c43a
--- /dev/null
+++ b/docs/ru/programmers/api-variables.xml
@@ -0,0 +1,480 @@
+
+
+
+ Variables
+
+
+ $template_dir
+
+ This is the name of the default template directory. If you do
+ not supply a resource type when including files, they will be
+ found here. By default this is "./templates", meaning that it
+ will look for the templates directory in the same directory as
+ the executing php script.
+
+
+ Technical Note
+
+ It is not recommended to put this directory under
+ the web server document root.
+
+
+
+
+ $compile_dir
+
+ This is the name of the directory where compiled templates are
+ located. By default this is "./templates_c", meaning that it
+ will look for the compile directory in the same directory as
+ the executing php script.
+
+
+ Technical Note
+
+ This setting must be either a relative or
+ absolute path. include_path is not used for writing files.
+
+
+
+ Technical Note
+
+ It is not recommended to put this directory under
+ the web server document root.
+
+
+
+
+ $config_dir
+
+ This is the directory used to store config files used in the
+ templates. Default is "./configs", meaning that it will look
+ for the configs directory in the same directory as the
+ executing php script.
+
+
+ Technical Note
+
+ It is not recommended to put this directory under
+ the web server document root.
+
+
+
+
+ $plugins_dir
+
+ This is the directories where Smarty will look for the plugins that it
+ needs. Default is "plugins" under the SMARTY_DIR. If you supply a
+ relative path, Smarty will first look under the SMARTY_DIR, then
+ relative to the cwd (current working directory), then relative to each
+ entry in your PHP include path.
+
+
+ Technical Note
+
+ For best performance, do not setup your plugins_dir to have to use the
+ PHP include path. Use an absolute pathname, or a path relative to
+ SMARTY_DIR or the cwd.
+
+
+
+
+ $debugging
+
+ This enables the debugging console.
+ The console is a javascript window that informs you of the
+ included templates and assigned variables for the current
+ template page.
+
+
+
+ $debug_tpl
+
+ This is the name of the template file used for the debugging console. By
+ default, it is named debug.tpl and is located in the SMARTY_DIR.
+
+
+
+ $debugging_ctrl
+
+ This allows alternate ways to enable debugging. NONE means no
+ alternate methods are allowed. URL means when the keyword
+ SMARTY_DEBUG is found in the QUERY_STRING, debugging is enabled
+ for that invocation of the script. If $debugging is true, this
+ value is ignored.
+
+
+
+ $global_assign
+
+ This is a list of variables that are always implicitly assigned
+ to the template engine. This is handy for making global
+ variables or server variables available to all templates
+ without having to manually assign them. Each element in the
+ $global_assign should be either a name of the global variable,
+ or a key/value pair, where the key is the name of the global
+ array and the value is the array of variables to be assigned
+ from that global array. $SCRIPT_NAME is globally assigned by
+ default from $HTTP_SERVER_VARS.
+
+
+ Technical Note
+
+ Server variables can be accessed through the
+ $smarty variable, such as {$smarty.server.SCRIPT_NAME}. See the
+ section on the
+ $smarty variable.
+
+
+
+
+ $undefined
+
+ This sets the value of $undefined for Smarty, default is null.
+ Currently this is only used to set undefined variables in
+ $global_assign to a default value.
+
+
+
+ $autoload_filters
+
+ If there are some filters that you wish to load on every template
+ invocation, you can specify them using this variable and Smarty will
+ automatically load them for you. The variable is an associative array
+ where keys are filter types and values are arrays of the filter
+ names. For example:
+
+
+$smarty->autoload_filters = array('pre' => array('trim', 'stamp'),
+ 'output' => array('convert'));
+
+
+
+
+
+ $compile_check
+
+ Upon each invocation of the PHP application, Smarty tests to see if the
+ current template has changed (different time stamp) since the last time
+ it was compiled. If it has changed, it recompiles that template. If the
+ template has not been compiled, it will compile regardless of this
+ setting. By default this variable is set to true. Once an application is
+ put into production (templates won't be changing), the compile_check
+ step is no longer needed. Be sure to set $compile_check to "false" for
+ maximal performance. Note that if you change this to "false" and a
+ template file is changed, you will *not* see the change since the
+ template will not get recompiled. If caching is enabled and
+ compile_check is enabled, then the cache files will get regenerated if
+ an involved template file or config file was updated. See $force_compile or clear_compiled_tpl.
+
+
+
+ $force_compile
+
+ This forces Smarty to (re)compile templates on every
+ invocation. This setting overrides $compile_check. By default
+ this is disabled. This is handy for development and debugging.
+ It should never be used in a production environment. If caching
+ is enabled, the cache file(s) will be regenerated every time.
+
+
+
+ $caching
+
+ This tells Smarty whether or not to cache the output of the templates.
+ By default this is set to 0, or disabled. If your templates generate
+ redundant redundant content, it is advisable to turn on caching. This
+ will result in significant performance gains. You can also have multiple
+ caches for the same template. A value of 1 or 2 enables caching. 1 tells
+ Smarty to use the current $cache_lifetime variable to determine if the
+ cache has expired. A value of 2 tells Smarty to use the cache_lifetime
+ value at the time the cache was generated. This way you can set the
+ cache_lifetime just before fetching the template to have granular
+ control over when that particular cache expires. See also is_cached.
+
+
+ If $compile_check is enabled, the cached content will be regenerated if
+ any of the templates or config files that are part of this cache are
+ changed. If $force_compile is enabled, the cached content will always be
+ regenerated.
+
+
+
+ $cache_dir
+
+ This is the name of the directory where template caches are
+ stored. By default this is "./cache", meaning that it will look
+ for the cache directory in the same directory as the executing
+ php script. You can also use your own custom cache handler
+ function to control cache files, which will ignore this
+ setting.
+
+
+ Technical Note
+
+ This setting must be either a relative or
+ absolute path. include_path is not used for writing files.
+
+
+
+ Technical Note
+
+ It is not recommended to put this directory under
+ the web server document root.
+
+
+
+
+ $cache_lifetime
+
+ This is the length of time in seconds that a template cache is valid.
+ Once this time has expired, the cache will be regenerated. $caching must
+ be set to "true" for $cache_lifetime to have any purpose. A value of -1
+ will force the cache to never expire. A value of 0 will cause the cache
+ to always regenerate (good for testing only, to disable caching a more
+ efficient method is to set $caching = false.)
+
+
+ If $force_compile is
+ enabled, the cache files will be regenerated every time, effectively
+ disabling caching. You can clear all the cache files with the clear_all_cache() function, or
+ individual cache files (or groups) with the clear_cache() function.
+
+
+ Technical Note
+
+ If you want to give certain templates their own cache lifetime, you could
+ do this by setting $caching = 2,
+ then set $cache_lifetime to a unique value just before calling display()
+ or fetch().
+
+
+
+
+ $cache_handler_func
+
+ You can supply a custom function to handle cache files instead
+ of using the built-in method using the $cache_dir. See the
+ custom cache handler function section for details.
+
+
+
+ $cache_modified_check
+
+ If set to true, Smarty will respect the If-Modified-Since
+ header sent from the client. If the cached file timestamp has
+ not changed since the last visit, then a "304 Not Modified"
+ header will be sent instead of the content. This works only on
+ cached content without insert tags.
+
+
+
+ $config_overwrite
+
+ If set to true, variables read in from config files will overwrite each
+ other. Otherwise, the variables will be pushed onto an array. This is
+ helpful if you want to store arrays of data in config files, just list
+ each element multiple times. true by default.
+
+
+
+ $config_booleanize
+
+ If set to true, config file values of on/true/yes and off/false/no get
+ converted to boolean values automatically. This way you can use the
+ values in the template like so: {if #foobar#} ... {/if}. If foobar was
+ on, true or yes, the {if} statement will execute. true by default.
+
+
+
+ $config_read_hidden
+
+ If set to true, hidden sections (section names beginning with a period)
+ in config files can be read from templates. Typically you would leave
+ this false, that way you can store sensitive data in the config files
+ such as database parameters and not worry about the template loading
+ them. false by default.
+
+
+
+ $config_fix_newlines
+
+ If set to true, mac and dos newlines (\r and \r\n) in config files are
+ converted to \n when they are parsed. true by default.
+
+
+
+ $default_template_handler_func
+
+ This function is called when a template cannot be obtained from
+ its resource.
+
+
+
+ $php_handling
+
+ This tells Smarty how to handle PHP code embedded in the
+ templates. There are four possible settings, default being
+ SMARTY_PHP_PASSTHRU. Note that this does NOT affect php code
+ within {php}{/php}
+ tags in the template.
+
+
+ SMARTY_PHP_PASSTHRU - Smarty echos tags as-is.
+ SMARTY_PHP_QUOTE - Smarty quotes the tags as
+ html entities.
+ SMARTY_PHP_REMOVE - Smarty removes the tags from
+ the templates.
+ SMARTY_PHP_ALLOW - Smarty will execute the tags
+ as PHP code.
+
+
+ NOTE: Embedding PHP code into templates is highly discouraged.
+ Use custom functions or
+ modifiers instead.
+
+
+
+ $security
+
+ $security true/false, default is false. Security is good for
+ situations when you have untrusted parties editing the templates
+ (via ftp for example) and you want to reduce the risk of system
+ security compromises through the template language. Turning on
+ security enforces the following rules to the template language,
+ unless specifially overridden with $security_settings:
+
+
+ If $php_handling is set to SMARTY_PHP_ALLOW, this is
+ implicitly changed to SMARTY_PHP_PASSTHRU
+ PHP functions are not allowed in IF statements,
+ except those specified in the $security_settings
+ templates can only be included from directories
+ listed in the $secure_dir array
+ local files can only be fetched from directories
+ listed in the $secure_dir array using {fetch}
+ {php}{/php} tags are not allowed
+ PHP functions are not allowed as modifiers, except
+ those specified in the $security_settings
+
+
+
+ $secure_dir
+
+ This is an array of all local directories that are considered
+ secure. {include} and {fetch} use this when security is enabled.
+
+
+
+ $security_settings
+
+ These are used to override or specify the security settings when
+ security is enabled. These are the possible settings:
+
+
+ PHP_HANDLING - true/false. If set to true, the
+ $php_handling setting is not checked for security.
+ IF_FUNCS - This is an array of the names of permitted
+ PHP functions in IF statements.
+ INCLUDE_ANY - true/false. If set to true, any
+ template can be included from the file system, regardless of the
+ $secure_dir list.
+ PHP_TAGS - true/false. If set to true, {php}{/php}
+ tags are permitted in the templates.
+ MODIFIER_FUNCS - This is an array of the names of permitted
+ PHP functions used as variable modifiers.
+
+
+
+ $trusted_dir
+
+ $trusted_dir is only for use when $security is enabled. This is an array
+ of all directories that are considered trusted. Trusted directories are
+ where you keep php scripts that are executed directly from the templates
+ with {include_php}.
+
+
+
+ $left_delimiter
+
+ This is the left delimiter used by the template language.
+ Default is "{".
+
+
+
+ $right_delimiter
+
+ This is the right delimiter used by the template language.
+ Default is "}".
+
+
+
+ $compiler_class
+
+ Specifies the name of the compiler class that Smarty will use
+ to compile the templates. The default is 'Smarty_Compiler'. For
+ advanced users only.
+
+
+
+ $request_vars_order
+
+ The order in which request variables are registered, similar to
+ variables_order in php.ini
+
+
+
+ $compile_id
+
+ Persistant compile identifier. As an alternative to passing the same
+ compile_id to each and every function call, you can set this compile_id
+ and it will be used implicitly thereafter.
+
+
+
+ $use_sub_dirs
+
+ Set this to false if your PHP environment does not allow the creation of
+ sub directories by Smarty. Sub directories are more efficient, so use them
+ if you can.
+
+
+
+ $default_modifiers
+
+ This is an array of modifiers to implicitly apply to every variable in a
+ template. For example, to HTML-escape every variable by default, use
+ array('escape:"htmlall"'); To make a variable exempt from default
+ modifiers, pass the special "smarty" modifier with a parameter value of
+ "nodefaults" modifier to it, such as
+ {$var|smarty:nodefaults}.
+
+
+
+
diff --git a/docs/ru/programmers/caching.xml b/docs/ru/programmers/caching.xml
new file mode 100644
index 00000000..26fc2f87
--- /dev/null
+++ b/docs/ru/programmers/caching.xml
@@ -0,0 +1,307 @@
+
+
+
+ Caching
+
+ Caching is used to speed up a call to display() or fetch() by saving its output to a file. If a
+ cached version of the call is available, that is displayed instead of
+ regenerating the output. Caching can speed things up tremendously,
+ especially templates with longer computation times. Since the output of
+ display() or fetch() is cached, one cache file could conceivably be made up
+ of several template files, config files, etc.
+
+
+ Since templates are dynamic, it is important to be careful what you are
+ caching and for how long. For instance, if you are displaying the front page
+ of your website that does not change its content very often, it might work
+ well to cache this page for an hour or more. On the other hand, if you are
+ displaying a page with a weather map containing new information by the
+ minute, it would not make sense to cache this page.
+
+
+ Setting Up Caching
+
+ The first thing to do is enable caching. This is done by setting $caching = true (or 1.)
+
+
+ enabling caching
+
+require('Smarty.class.php');
+$smarty = new Smarty;
+
+$smarty->caching = true;
+
+$smarty->display('index.tpl');
+
+
+ With caching enabled, the function call to display('index.tpl') will render
+ the template as usual, but also saves a copy of its output to a file (a
+ cached copy) in the $cache_dir.
+ Upon the next call to display('index.tpl'), the cached copy will be used
+ instead of rendering the template again.
+
+
+ Technical Note
+
+ The files in the $cache_dir are named similar to the template name.
+ Although they end in the ".php" extention, they are not really executable
+ php scripts. Do not edit these files!
+
+
+
+ Each cached page has a limited lifetime determined by $cache_lifetime. The default value
+ is 3600 seconds, or 1 hour. After that time expires, the cache is
+ regenerated. It is possible to give individual caches their own expiration
+ time by setting $caching = 2. See the documentation on $cache_lifetime for details.
+
+
+ setting cache_lifetime per cache
+
+require('Smarty.class.php');
+$smarty = new Smarty;
+
+$smarty->caching = 2; // lifetime is per cache
+
+// set the cache_lifetime for index.tpl to 5 minutes
+$smarty->cache_lifetime = 300;
+$smarty->display('index.tpl');
+
+// set the cache_lifetime for home.tpl to 1 hour
+$smarty->cache_lifetime = 3600;
+$smarty->display('home.tpl');
+
+// NOTE: the following $cache_lifetime setting will not work when $caching = 2.
+// The cache lifetime for home.tpl has already been set
+// to 1 hour, and will no longer respect the value of $cache_lifetime.
+// The home.tpl cache will still expire after 1 hour.
+$smarty->cache_lifetime = 30; // 30 seconds
+$smarty->display('home.tpl');
+
+
+ If $compile_check is enabled,
+ every template file and config file that is involved with the cache file is
+ checked for modification. If any of the files have been modified since the
+ cache was generated, the cache is immediately regenerated. This is a slight
+ overhead so for optimum performance, leave $compile_check set to false.
+
+
+ enabling $compile_check
+
+require('Smarty.class.php');
+$smarty = new Smarty;
+
+$smarty->caching = true;
+$smarty->compile_check = true;
+
+$smarty->display('index.tpl');
+
+
+ If $force_compile is enabled,
+ the cache files will always be regenerated. This effectively turns off
+ caching. $force_compile is usually for debugging purposes only, a more
+ efficient way of disabling caching is to set $caching = false (or 0.)
+
+
+ The is_cached() function
+ can be used to test if a template has a valid cache or not. If you have a
+ cached template that requires something like a database fetch, you can use
+ this to skip that process.
+
+
+ using is_cached()
+
+require('Smarty.class.php');
+$smarty = new Smarty;
+
+$smarty->caching = true;
+
+if(!$smarty->is_cached('index.tpl')) {
+ // No cache available, do variable assignments here.
+ $contents = get_database_contents();
+ $smarty->assign($contents);
+}
+
+$smarty->display('index.tpl');
+
+
+ You can keep parts of a page dynamic with the insert template function. Let's
+ say the whole page can be cached except for a banner that is displayed down
+ the right side of the page. By using an insert function for the banner, you
+ can keep this element dynamic within the cached content. See the
+ documentation on insert for
+ details and examples.
+
+
+ You can clear all the cache files with the clear_all_cache() function, or
+ individual cache files (or groups) with the clear_cache() function.
+
+
+ clearing the cache
+
+require('Smarty.class.php');
+$smarty = new Smarty;
+
+$smarty->caching = true;
+
+// clear out all cache files
+$smarty->clear_all_cache();
+
+// clear only cache for index.tpl
+$smarty->clear_cache('index.tpl');
+
+$smarty->display('index.tpl');
+
+
+
+ Multiple Caches Per Page
+
+ You can have multiple cache files for a single call to display() or
+ fetch(). Let's say that a call to display('index.tpl') may have several
+ different output contents depending on some condition, and you want
+ separate caches for each one. You can do this by passing a cache_id as the
+ second parameter to the function call.
+
+
+ passing a cache_id to display()
+
+require('Smarty.class.php');
+$smarty = new Smarty;
+
+$smarty->caching = true;
+
+$my_cache_id = $_GET['article_id'];
+
+$smarty->display('index.tpl',$my_cache_id);
+
+
+ Above, we are passing the variable $my_cache_id to display() as the
+ cache_id. For each unique value of $my_cache_id, a separate cache will be
+ generated for index.tpl. In this example, "article_id" was passed in the
+ URL and is used as the cache_id.
+
+
+ Technical Note
+
+ Be very cautious when passing values from a client (web browser) into
+ Smarty (or any PHP application.) Although the above example of using the
+ article_id from the URL looks handy, it could have bad consequences. The
+ cache_id is used to create a directory on the file system, so if the user
+ decided to pass an extremely large value for article_id, or write a script
+ that sends random article_ids at a rapid pace, this could possibly cause
+ problems at the server level. Be sure to sanitize any data passed in before
+ using it. In this instance, maybe you know the article_id has a length of
+ 10 characters and is made up of alpha-numerics only, and must be a valid
+ article_id in the database. Check for this!
+
+
+
+ Be sure to pass the same cache_id as the
+ second parameter to is_cached() and
+ clear_cache().
+
+
+ passing a cache_id to is_cached()
+
+require('Smarty.class.php');
+$smarty = new Smarty;
+
+$smarty->caching = true;
+
+$my_cache_id = $_GET['article_id'];
+
+if(!$smarty->is_cached('index.tpl',$my_cache_id)) {
+ // No cache available, do variable assignments here.
+ $contents = get_database_contents();
+ $smarty->assign($contents);
+}
+
+$smarty->display('index.tpl',$my_cache_id);
+
+
+ You can clear all caches for a particular cache_id by passing null as the
+ first parameter to clear_cache().
+
+
+ clearing all caches for a particular cache_id
+
+require('Smarty.class.php');
+$smarty = new Smarty;
+
+$smarty->caching = true;
+
+// clear all caches with "sports" as the cache_id
+$smarty->clear_cache(null,"sports");
+
+$smarty->display('index.tpl',"sports");
+
+
+ In this manner, you can "group" your caches together by giving them the
+ same cache_id.
+
+
+
+ Cache Groups
+
+ You can do more elaborate grouping by setting up cache_id groups. This is
+ accomplished by separating each sub-group with a vertical bar "|" in the
+ cache_id value. You can have as many sub-groups as you like.
+
+
+ cache_id groups
+
+require('Smarty.class.php');
+$smarty = new Smarty;
+
+$smarty->caching = true;
+
+// clear all caches with "sports|basketball" as the first two cache_id groups
+$smarty->clear_cache(null,"sports|basketball");
+
+// clear all caches with "sports" as the first cache_id group. This would
+// include "sports|basketball", or "sports|(anything)|(anything)|(anything)|..."
+$smarty->clear_cache(null,"sports");
+
+$smarty->display('index.tpl',"sports|basketball");
+
+
+ Technical Note
+
+ The cache grouping does NOT use the path to the template as any part of the
+ cache_id. For example, if you have display('themes/blue/index.tpl'), you
+ cannot clear the cache for everything under the "themes/blue" directory. If
+ you want to do that, you must group them in the cache_id, such as
+ display('themes/blue/index.tpl','themes|blue'); Then you can clear the
+ caches for the blue theme with clear_cache(null,'themes|blue');
+
+
+
+
+
diff --git a/docs/ru/programmers/plugins.xml b/docs/ru/programmers/plugins.xml
new file mode 100644
index 00000000..7e9fbd0e
--- /dev/null
+++ b/docs/ru/programmers/plugins.xml
@@ -0,0 +1,780 @@
+
+
+
+ Extending Smarty With Plugins
+
+ Version 2.0 introduced the plugin architecture that is used
+ for almost all the customizable functionality of Smarty. This includes:
+
+ functions
+ modifiers
+ block functions
+ compiler functions
+ prefilters
+ postfilters
+ outputfilters
+ resources
+ inserts
+
+ With the exception of resources, backwards compatibility with the old
+ way of registering handler functions via register_* API is preserved. If
+ you did not use the API but instead modified the class variables
+ $custom_funcs, $custom_mods, and
+ other ones directly, then you will need to adjust your scripts to either
+ use the API or convert your custom functionality into plugins.
+
+
+
+ How Plugins Work
+
+ Plugins are always loaded on demand. Only the specific modifiers,
+ functions, resources, etc invoked in the templates scripts will be
+ loaded. Moreover, each plugin is loaded only once, even if you have
+ several different instances of Smarty running within the same request.
+
+
+ Pre/postfilters and output filters are a bit of a special case. Since
+ they are not mentioned in the templates, they must be registered or
+ loaded explicitly via API functions before the template is processed.
+ The order in which multiple filters of the same type are executed
+ depends on the order in which they are registered or loaded.
+
+
+ There is only one plugins directory (for performance reasons). To
+ install a plugin, simply place it in the directory and Smarty will use
+ it automatically.
+
+
+
+
+ Naming Conventions
+
+ Plugin files and functions must follow a very specific naming
+ convention in order to be located by Smarty.
+
+
+ The plugin files must be named as follows:
+
+
+
+ type.name.php
+
+
+
+
+
+ Where type is one of these plugin types:
+
+ function
+ modifier
+ block
+ compiler
+ prefilter
+ postfilter
+ outputfilter
+ resource
+ insert
+
+
+
+ And name should be a valid identifier (letters,
+ numbers, and underscores only).
+
+
+ Some examples: function.html_select_date.php,
+ resource.db.php,
+ modifier.spacify.php.
+
+
+ The plugin functions inside the plugin files must be named as follows:
+
+
+ smarty_type_name
+
+
+
+
+ The meanings of type and name are
+ the same as before.
+
+
+ Smarty will output appropriate error messages if the plugin file it
+ needs is not found, or if the file or the plugin function are named
+ improperly.
+
+
+
+
+ Writing Plugins
+
+ Plugins can be either loaded by Smarty automatically from the
+ filesystem or they can be registered at runtime via one of the
+ register_* API functions. They can also be unregistered by using
+ unregister_* API functions.
+
+
+ For the plugins that are registered at runtime, the name of the plugin
+ function(s) does not have to follow the naming convention.
+
+
+ If a plugin depends on some functionality provided by another plugin
+ (as is the case with some plugins bundled with Smarty), then the proper
+ way to load the needed plugin is this:
+
+
+require_once SMARTY_DIR . 'plugins/function.html_options.php';
+
+ As a general rule, Smarty object is always passed to the plugins as the last
+ parameter (except for modifiers).
+
+
+
+ Template Functions
+
+
+ void smarty_function_name
+ array $params
+ object &$smarty
+
+
+
+ All attributes passed to template functions from the template are
+ contained in the $params as an associative
+ array. Either access those values directly, e.g.
+ $params['start'] or use
+ extract($params) to import them into the symbol
+ table.
+
+
+ The output (return value) of the function will be substituted in place of the
+ function tag in the template (fetch function, for
+ example). Alternatively, the function can simply perform some other
+ task without any output (assign function).
+
+
+ If the function needs to assign some variables to the template or use
+ some other Smarty-provided functionality, it can use the supplied
+ $smarty object to do so.
+
+
+ See also:
+ register_function(),
+ unregister_function().
+
+
+
+ function plugin with output
+
+<?php
+/*
+ * Smarty plugin
+ * -------------------------------------------------------------
+ * File: function.eightball.php
+ * Type: function
+ * Name: eightball
+ * Purpose: outputs a random magic answer
+ * -------------------------------------------------------------
+ */
+function smarty_function_eightball($params, &$smarty)
+{
+ $answers = array('Yes',
+ 'No',
+ 'No way',
+ 'Outlook not so good',
+ 'Ask again soon',
+ 'Maybe in your reality');
+
+ $result = array_rand($answers);
+ return $answers[$result];
+}
+?>
+
+
+
+ which can be used in the template as:
+
+
+Question: Will we ever have time travel?
+Answer: {eightball}.
+
+
+ function plugin without output
+
+<?php
+/*
+ * Smarty plugin
+ * -------------------------------------------------------------
+ * File: function.assign.php
+ * Type: function
+ * Name: assign
+ * Purpose: assign a value to a template variable
+ * -------------------------------------------------------------
+ */
+function smarty_function_assign($params, &$smarty)
+{
+ extract($params);
+
+ if (empty($var)) {
+ $smarty->trigger_error("assign: missing 'var' parameter");
+ return;
+ }
+
+ if (!in_array('value', array_keys($params))) {
+ $smarty->trigger_error("assign: missing 'value' parameter");
+ return;
+ }
+
+ $smarty->assign($var, $value);
+}
+?>
+
+
+
+
+ Modifiers
+
+ Modifiers are little functions that are applied to a variable in the
+ template before it is displayed or used in some other context.
+ Modifiers can be chained together.
+
+
+
+ mixed smarty_modifier_name
+ mixed $value
+ [mixed $param1, ...]
+
+
+
+ The first parameter to the modifier plugin is the value on which
+ the modifier is supposed to operate. The rest of the parameters can be
+ optional, depending on what kind of operation is supposed to be
+ performed.
+
+
+ The modifier has to return the result of its processing.
+
+
+ See also
+ register_modifier(),
+ unregister_modifier().
+
+
+ simple modifier plugin
+
+ This plugin basically aliases one of the built-in PHP functions. It
+ does not have any additional parameters.
+
+
+<?php
+/*
+ * Smarty plugin
+ * -------------------------------------------------------------
+ * File: modifier.capitalize.php
+ * Type: modifier
+ * Name: capitalize
+ * Purpose: capitalize words in the string
+ * -------------------------------------------------------------
+ */
+function smarty_modifier_capitalize($string)
+{
+ return ucwords($string);
+}
+?>
+
+
+
+ more complex modifier plugin
+
+<?php
+/*
+ * Smarty plugin
+ * -------------------------------------------------------------
+ * File: modifier.truncate.php
+ * Type: modifier
+ * Name: truncate
+ * Purpose: Truncate a string to a certain length if necessary,
+ * optionally splitting in the middle of a word, and
+ * appending the $etc string.
+ * -------------------------------------------------------------
+ */
+function smarty_modifier_truncate($string, $length = 80, $etc = '...',
+ $break_words = false)
+{
+ if ($length == 0)
+ return '';
+
+ if (strlen($string) > $length) {
+ $length -= strlen($etc);
+ $fragment = substr($string, 0, $length+1);
+ if ($break_words)
+ $fragment = substr($fragment, 0, -1);
+ else
+ $fragment = preg_replace('/\s+(\S+)?$/', '', $fragment);
+ return $fragment.$etc;
+ } else
+ return $string;
+}
+?>
+
+
+
+ Block Functions
+
+
+ void smarty_block_name
+ array $params
+ mixed $content
+ object &$smarty
+
+
+
+ Block functions are functions of the form: {func} .. {/func}. In other
+ words, they enclose a template block and operate on the contents of
+ this block. Block functions take precedence over custom functions of
+ the same name, that is, you cannot have both custom function {func} and
+ block function {func} .. {/func}.
+
+
+ Your function implementation is called twice by Smarty:
+ once for the opening tag, and once for the closing tag.
+
+
+ Only the opening tag of the block function may have attributes. All
+ attributes passed to template functions from the template are contained
+ in the $params as an associative array. You can
+ either access those values directly, e.g.
+ $params['start'] or use
+ extract($params) to import them into the symbol
+ table. The opening tag attributes are also accessible to your function
+ when processing the closing tag.
+
+
+ The value of $content variable depends on
+ whether your function is called for the opening or closing tag. In case
+ of the opening tag, it will be null, and in case of
+ the closing tag it will be the contents of the template block.
+ Note that the template block will have already been processed by
+ Smarty, so all you will receive is the template output, not the
+ template source.
+
+
+ If you have nested block functions, it's possible to find out what the
+ parent block function is by accessing
+ $smarty->_tag_stack variable. Just do a var_dump()
+ on it and the structure should be apparent.
+
+
+ See also:
+ register_block(),
+ unregister_block().
+
+
+ block function
+
+<?php
+/*
+ * Smarty plugin
+ * -------------------------------------------------------------
+ * File: block.translate.php
+ * Type: block
+ * Name: translate
+ * Purpose: translate a block of text
+ * -------------------------------------------------------------
+ */
+function smarty_block_translate($params, $content, &$smarty)
+{
+ if ($content) {
+ $lang = $params['lang'];
+ // do some intelligent translation thing here with $content
+ echo $translation;
+ }
+}
+
+
+
+ Compiler Functions
+
+ Compiler functions are called only during compilation of the template.
+ They are useful for injecting PHP code or time-sensitive static
+ content into the template. If there is both a compiler function and a
+ custom function registered under the same name, the compiler function
+ has precedence.
+
+
+
+ mixed smarty_compiler_name
+ string $tag_arg
+ object &$smarty
+
+
+
+ The compiler function is passed two parameters: the tag argument
+ string - basically, everything from the function name until the ending
+ delimiter, and the Smarty object. It's supposed to return the PHP code
+ to be injected into the compiled template.
+
+
+ See also
+ register_compiler_function(),
+ unregister_compiler_function().
+
+
+ simple compiler function
+
+<?php
+/*
+ * Smarty plugin
+ * -------------------------------------------------------------
+ * File: compiler.tplheader.php
+ * Type: compiler
+ * Name: tplheader
+ * Purpose: Output header containing the source file name and
+ * the time it was compiled.
+ * -------------------------------------------------------------
+ */
+function smarty_compiler_tplheader($tag_arg, &$smarty)
+{
+ return "\necho '" . $smarty->_current_file . " compiled at " . date('Y-m-d H:M'). "';";
+}
+?>
+
+ This function can be called from the template as:
+
+
+{* this function gets executed at compile time only *}
+{tplheader}
+
+ The resulting PHP code in the compiled template would be something like this:
+
+
+<php
+echo 'index.tpl compiled at 2002-02-20 20:02';
+?>
+
+
+
+
+ Prefilters/Postfilters
+
+ Prefilter and postfilter plugins are very similar in concept; where
+ they differ is in the execution -- more precisely the time of their
+ execution.
+
+
+
+ string smarty_prefilter_name
+ string $source
+ object &$smarty
+
+
+
+ Prefilters are used to process the source of the template immediately
+ before compilation. The first parameter to the prefilter function is
+ the template source, possibly modified by some other prefilters. The
+ plugin is supposed to return the modified source. Note that this
+ source is not saved anywhere, it is only used for compilation.
+
+
+
+ string smarty_postfilter_name
+ string $compiled
+ object &$smarty
+
+
+
+ Postfilters are used to process the compiled output of the template
+ (the PHP code) immediately after the compilation is done but before the
+ compiled template is saved to the filesystem. The first parameter to
+ the postfilter function is the compiled template code, possibly
+ modified by other postfilters. The plugin is supposed to return the
+ modified version of this code.
+
+
+ prefilter plugin
+
+<?php
+/*
+ * Smarty plugin
+ * -------------------------------------------------------------
+ * File: prefilter.pre01.php
+ * Type: prefilter
+ * Name: pre01
+ * Purpose: Convert html tags to be lowercase.
+ * -------------------------------------------------------------
+ */
+ function smarty_prefilter_pre01($source, &$smarty)
+ {
+ return preg_replace('!<(\w+)[^>]+>!e', 'strtolower("$1")', $source);
+ }
+?>
+
+
+
+ postfilter plugin
+
+<?php
+/*
+ * Smarty plugin
+ * -------------------------------------------------------------
+ * File: postfilter.post01.php
+ * Type: postfilter
+ * Name: post01
+ * Purpose: Output code that lists all current template vars.
+ * -------------------------------------------------------------
+ */
+ function smarty_postfilter_post01($compiled, &$smarty)
+ {
+ $compiled = "<pre>\n<?php print_r(\$this->get_template_vars()); ?>\n</pre>" . $compiled;
+ return $compiled;
+ }
+?>
+
+
+
+ Output Filters
+
+ Output filter plugins operate on a template's output, after the
+ template is loaded and executed, but before the output is displayed.
+
+
+
+ string smarty_outputfilter_name
+ string $template_output
+ object &$smarty
+
+
+
+ The first parameter to the output filter function is the template
+ output that needs to be processed, and the second parameter is the
+ instance of Smarty invoking the plugin. The plugin is supposed to do
+ the processing and return the results.
+
+
+ output filter plugin
+
+/*
+ * Smarty plugin
+ * -------------------------------------------------------------
+ * File: outputfilter.protect_email.php
+ * Type: outputfilter
+ * Name: protect_email
+ * Purpose: Converts @ sign in email addresses to %40 as
+ * a simple protection against spambots
+ * -------------------------------------------------------------
+ */
+ function smarty_outputfilter_protect_email($output, &$smarty)
+ {
+ return preg_replace('!(\S+)@([a-zA-Z0-9\.\-]+\.([a-zA-Z]{2,3}|[0-9]{1,3}))!',
+ '$1%40$2', $output);
+ }
+
+
+
+
+ Resources
+
+ Resource plugins are meant as a generic way of providing template
+ sources or PHP script components to Smarty. Some examples of resources:
+ databases, LDAP, shared memory, sockets, and so on.
+
+
+
+ There are a total of 4 functions that need to be registered for each
+ type of resource. Every function will receive the requested resource as
+ the first parameter and the Smarty object as the last parameter. The
+ rest of parameters depend on the function.
+
+
+
+
+ bool smarty_resource_name_source
+ string $rsrc_name
+ string &$source
+ object &$smarty
+
+
+ bool smarty_resource_name_timestamp
+ string $rsrc_name
+ int &$timestamp
+ object &$smarty
+
+
+ bool smarty_resource_name_secure
+ string $rsrc_name
+ object &$smarty
+
+
+ bool smarty_resource_name_trusted
+ string $rsrc_name
+ object &$smarty
+
+
+
+
+ The first function is supposed to retrieve the resource. Its second
+ parameter is a variable passed by reference where the result should be
+ stored. The function is supposed to return true if
+ it was able to successfully retrieve the resource and
+ false otherwise.
+
+
+
+ The second function is supposed to retrieve the last modification time
+ of the requested resource (as a UNIX timestamp). The second parameter
+ is a variable passed by reference where the timestamp should be stored.
+ The function is supposed to return true if the
+ timestamp could be succesfully determined, and false
+ otherwise.
+
+
+
+ The third function is supposed to return true or
+ false, depending on whether the requested resource
+ is secure or not. This function is used only for template resources but
+ should still be defined.
+
+
+
+ The fourth function is supposed to return true or
+ false, depending on whether the requested resource
+ is trusted or not. This function is used for only for PHP script
+ components requested by include_php tag or
+ insert tag with src
+ attribute. However, it should still be defined even for template
+ resources.
+
+
+ See also
+ register_resource(),
+ unregister_resource().
+
+
+ resource plugin
+
+<?php
+/*
+ * Smarty plugin
+ * -------------------------------------------------------------
+ * File: resource.db.php
+ * Type: resource
+ * Name: db
+ * Purpose: Fetches templates from a database
+ * -------------------------------------------------------------
+ */
+function smarty_resource_db_source($tpl_name, &$tpl_source, &$smarty)
+{
+ // do database call here to fetch your template,
+ // populating $tpl_source
+ $sql = new SQL;
+ $sql->query("select tpl_source
+ from my_table
+ where tpl_name='$tpl_name'");
+ if ($sql->num_rows) {
+ $tpl_source = $sql->record['tpl_source'];
+ return true;
+ } else {
+ return false;
+ }
+}
+
+function smarty_resource_db_timestamp($tpl_name, &$tpl_timestamp, &$smarty)
+{
+ // do database call here to populate $tpl_timestamp.
+ $sql = new SQL;
+ $sql->query("select tpl_timestamp
+ from my_table
+ where tpl_name='$tpl_name'");
+ if ($sql->num_rows) {
+ $tpl_timestamp = $sql->record['tpl_timestamp'];
+ return true;
+ } else {
+ return false;
+ }
+}
+
+function smarty_resource_db_secure($tpl_name, &$smarty)
+{
+ // assume all templates are secure
+ return true;
+}
+
+function smarty_resource_db_trusted($tpl_name, &$smarty)
+{
+ // not used for templates
+}
+?>
+
+
+
+ Inserts
+
+ Insert plugins are used to implement functions that are invoked by
+ insert
+ tags in the template.
+
+
+
+ string smarty_insert_name
+ array $params
+ object &$smarty
+
+
+
+ The first parameter to the function is an associative array of
+ attributes passed to the insert. Either access those values directly,
+ e.g. $params['start'] or use
+ extract($params) to import them into the symbol
+ table.
+
+
+ The insert function is supposed to return the result which will be
+ substituted in place of the insert tag in the
+ template.
+
+
+ insert plugin
+
+<?php
+/*
+ * Smarty plugin
+ * -------------------------------------------------------------
+ * File: insert.time.php
+ * Type: time
+ * Name: time
+ * Purpose: Inserts current date/time according to format
+ * -------------------------------------------------------------
+ */
+function smarty_insert_time($params, &$smarty)
+{
+ if (empty($params['format'])) {
+ $smarty->trigger_error("insert time: missing 'format' parameter");
+ return;
+ }
+
+ $datetime = strftime($params['format']);
+ return $datetime;
+}
+?>
+
+
+
+
diff --git a/docs/ru/programmers/smarty-constants.xml b/docs/ru/programmers/smarty-constants.xml
new file mode 100644
index 00000000..356ade90
--- /dev/null
+++ b/docs/ru/programmers/smarty-constants.xml
@@ -0,0 +1,44 @@
+
+
+
+ Constants
+
+
+
+ SMARTY_DIR
+
+ This should be the full system path to the location of the Smarty
+ class files. If this is not defined, then Smarty will attempt to
+ determine the appropriate value automatically. If defined, the path
+ must end with a slash.
+
+
+ SMARTY_DIR
+
+// set path to Smarty directory
+define("SMARTY_DIR","/usr/local/lib/php/Smarty/");
+
+require_once(SMARTY_DIR."Smarty.class.php");
+
+
+
+