void append (имя переменной,
смешанное значение, слияние);
Принцип действия этого примерно такой же, как и у assign. Метод append позволяет присоединить элемент к массиву. Если вы присоединяете значение к строковой переменной, то она преобразуется в массив, и значение добавляется уже в него. Так же, как и в assign, здесь можно передавать пары ключ/значение или ассоциативные массивы, содержащие эти пары. Если указать третий аргумент слияние равным TRUE, то значение будет не присоединено в качестве еще одного элемента, а слито воедино с текущим массивом.
$smarty->append(array(
title => $title,
author => $author))
Здесь если title была строкой, то она становится массивом и к нему добавляется еще один элемент со значением $title. То же самое происходит с переменной author.
Метод config_load
void config_load(имя файла, [имя секции]);
Метод загружает конфигурационный файл и встраивает его в шаблон. Аналогично этому методу действует функция config_load.
Пример: $smarty->config_load("task.conf","Database");
Метод display
void display(шаблон);
Метод отображает шаблон. У этого метода есть еще два опциональных параметра, о которых можно прочитать в документации.
Метод fetch
string fetch(шаблон);
Этот метод возвращает обработанный шаблон в строковую переменную, вместо того чтобы выводить его на экран. У этого метода есть еще два опциональных параметра, о которых можно прочитать в документации.
Встроенные функции
Smarty поставляется с набором встроенных функций, интегрированных в язык шаблонов. Нельзя создавать свои функции с такими же именами или модифицировать встроенные функции. Опишем некоторые из таких функций.
Функция config_load
Синтаксис:
{config_load file="имя_файла" }
Эта функция используется для загрузки в шаблон переменных из конфигурационных файлов. Кроме имени загружаемого файла, у этой функции может быть еще несколько дополнительных параметров. Например, параметр section, в котором указывают имя секции для загрузки. Более подробную информацию об этих и других параметрах можно получить из документации Smarty.
Пример:
{config_load file="task.conf"}
Функция capture
Синтаксис:
{capture name="имя_блока"
assign="имя_переменной"} ...
{/capture}
Эта функция предназначена для того, чтобы собирать в переменную выходные данные шаблона вместо того, чтобы выводить их на экран. Все, что находится между {capture name="varname"} и {/capture}, будет записано в переменную с именем varname. Захваченный таким образом контент может быть использован в шаблоне посредством специальной переменной $smarty.capture.varname, где varname - значение, переданное в атрибут name функции capture. Если имя переменной не задано, будет использовано имя default.
Второй параметр assign задает имя переменной, которой будет присвоено захваченное выходное значение. Этот параметр, как и name, не обязательный.
Функция section
Синтаксис:
{section name="имя_секции"
loop="переменная_для_выч-ния_числа_итераций"
[,start="индекс_начальной_позиции"]
[, step="шаг"] [,max="максимум_итераций"]
[,show="показывать_ли_секцию"] }...
{/section}
Секция Section - это цикл для обхода элементов массива. Обязательными являются параметры name, с помощью которого задается имя секции, и loop, который представляет собой переменную, определяющую число итераций цикла. Как правило, loop - это переменная типа массив, и число итераций секции равно числу элементов этого массива. Чтобы вывести переменную внутри цикла, нужно после имени переменной указать в квадратных скобках имя секции.
{section name=art loop=$title}
Название: {$title[art]}<br>
{/section}
Функция foreach
Синтаксис:
{foreach from="имя_массива"
item="имя_текущего_элемента"}
... {/foreach}
Кроме того, можно использовать дополнительные атрибуты key - имя ключа для текущего элемента массива и name - имя цикла, с помощью которого можно будет получать доступ к его свойствам. Атрибуты from и item - обязательные.
Циклы foreach являются альтернативой циклам section. Действие функции foreach очень похоже на работу цикла foreach в языке PHP.
{foreach from=$articles item=art}
Title: {$art}<br>
{/foreach}
Циклы foreach имеют свои собственные свойства. Получить доступ к ним можно таким образом: {$smarty.foreach.foreachname.varname}, где foreachname - это имя цикла, заданное его параметром name, а varname - имя свойства.
Оператор if, elseif, else
Синтаксис:
{if выражение} блок_действий
{elseif выражение1} блок_действий1
{else} блок_действий2
{/if}
Действие оператора практически аналогично оператору if...elseif...else языка PHP. В выражениях могут использоваться следующие операторы сравнения: 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, ==, !=, >, <, <=, >=. Каждый из них обязательно должен быть отделен от окружающих его значений пробелами. В выражениях можно использовать круглые скобки и вызывать php-функции.
{if $name eq "Вася"}
Добро пожаловать, Вася.
{elseif $name eq "Петя"}
Добро пожаловать, Петя.
{else}
Добро пожаловать. А вы кто?
{/if}
{* этот пример не будет работать,
поскольку не поставлены
пробелы вокруг операторов сравнения *}
{if $name=="Вася" || $name=="Петя"}
...
{/if}
Решение задачи с помощью шаблонов Smarty
Теперь, после знакомства с основными конструкциями Smarty, мы можем попытаться решить задачу отображения списка документов. Шаблон списка будет выглядеть следующим образом:
{* Smarty template index.tpl *}
{config_load file="task.conf" }
<html>
<head><title>{#pageTitle#}</title>
</head>
<body>
<ol>
{section name=art loop=$title}
<li><a href="{$fulltext[art]}">
{$title[art]}</a>
({$author[art]})
<br> <p> {$abstract[art]}