Приднестровская поддержка XOOPS
Все инструкции Smarty размещаются внутри фигурных скобок. Это означает, что в исходном HTML-коде нельзя использовать символы "{" и "}" без инструкций Smarty внутри, иначе будет выведено сообщение об ошибке. Чтобы вставить символ "{" следует использовать инструкцию {ldelim}, а для вставки символа "}" — инструкцию {rdelim}:
{ldelim}Текст внутри фигурных скобок{rdelim}
Результат после компиляции шаблона:
{Текст внутри фигурных скобок}
Фигурные скобки используются также в языке JavaScript для группировки выражений в блоки. Если внутри шаблона существует JavaScript-код, то его следует разместить между инструкциями {literal} и {/literal}:
{literal}
function f_print() {
// Код внутри функции
}
{/literal}
Как вы уже знаете, с помощью метода assign() можно передать значения переменных в шаблон:
$smarty->assign('name', 'Николай');
Внутри шаблона название переменной (с предваряющим символом $) указывается внутри фигурных скобок (например, {$name}). Если передаваемое значение является массивом, то для обращения к элементу следует указать индекс внутри квадратных скобок:
$arr = array(1, 2, 3);
$smarty->assign('arr', $arr);
...
{$arr[0]}
При передаче ассоциативного массива обратиться к элементу можно с помощью точечной нотации:
$arr = array('elem1' => 1, 'elem2' => 2);
$smarty->assign('arr', $arr);
...
{$arr.elem2}
С помощью специальной переменной $smarty можно получить доступ к переменным окружения и константам, объявленным в программе:
{$smarty.const.MYCONST} {* Обращение к константе *}
{$smarty.get.var1} {* Обращение к $_GET['var1'] *}
{$smarty.post.var2} {* Обращение к $_POST['var2'] *}
{$smarty.server.SCRIPT_NAME} {* Обращение к $_SERVER['SCRIPT_NAME'] *}
{$smarty.cookies.id_count} {* Обращение к $_COOKIE['id_count'] *}
Значения переменных могут быть получены из файла конфигурации. В качестве примера создадим файл myconf.conf в папке
C:\Apache2\smarty\site1\configs. Содержимое файла:
name = 'Николай'
txt = """Текст
расположен на
нескольких строках"""
[section1]
var1 = 10
Если текст расположен на нескольких строках, то его необходимо разместить внутри тройных кавычек. Подключить такой файл позволяет инструкция {config_load}. В параметре file указывается название файла:
{config_load file='myconf.conf'}
Получить значение переменной можно, указав ее название внутри символов # или с помощью переменной $smarty:
{#name#}
{$smarty.config.txt}
Чтобы получить значения переменных, которые расположены внутри секций, необходимо указать название секции в параметре section:
{config_load file='myconf.conf' section='section1'}
{#var1#}
Внутри шаблонов можно использовать условия. Проверка условий осуществляется с помощью конструкции {if}...{elseif}...{else}...{/if}. В условиях применяются следующие операторы сравнения:
□ ==, eq — равно. Пример:
{if $x eq 10}
Переменная x равна 10
{else}
Не равна
{/if}
□ !=, ne, neq — не равно;
□ >, gt — больше;
□ <, lt — меньше;
□ >=, gte, ge — больше или равно;
□ <=, lte, le — меньше или равно;
□ === — идентично;
□ !, not — отрицание;
□ %, mod — остаток от деления;
□ is div by, is not div by — деление без остатка. Пример:
{if $x is div by 2}
Переменная x делится на 2 без остатка
{else}
Не делится
{/if}
□ is even, is not even — проверка на четность. Пример:
{if $x is even}
Переменная x содержит четное значение
{else}
Нет
{/if}
□ is odd, is not odd — проверка на нечетность.
Внутри условия допустимо использование функций PHP. Например, можно проверить существование переменной с помощью функции isset():
{if isset($x)}
Переменная x существует
{else}
Нет
{/if}
Объединить несколько логических выражений в одно большое позволяют следующие операторы:
□ &&, and — логическое И;
□ ||, or — логическое ИЛИ.
Пример:
{if $x > 5 and $x < 10}
Переменная x содержит число от 6 до 9
{elseif $x gte 10 }
Переменная x содержит число >= 10
{else}
Переменная x содержит число < 6 или значение не является числом
{/if}
Как вы уже знаете, в шаблон можно передать массив. Перебрать значения массива позволяет конструкция {section}...{/section}. В открывающей инструкции {section} указываются следующие параметры:
□ name — название секции. Через это название доступен текущий индекс
внутри тела конструкции. Параметр является обязательным;
□ loop — значение, определяющее количество итераций цикла. В качестве значения можно указать название массива. Параметр является обязательным;
□ start — начальный индекс;
□ step — шаг;
□ max — максимальное количество итераций.
Выведем содержимое массива:
$arr = array(1, 2, 3, 4);
$smarty->assign('arr', $arr);
...
{section name=i loop=$arr}
{$arr[i]}<br>
{/section}
Теперь выведем все четные числа от 2 до 100:
{section name=i loop=101 start=2 step=2}
{$smarty.section.i.index}<br>
{/section}
Для перебора ассоциативного массива предназначена конструкция {foreach}...{/foreach}. В открывающей инструкции {foreach} указываются следующие параметры:
□ from — название переменной, в которой хранится массив. Параметр является обязательным;
□ item позволяет указать название переменной, через которую внутри тела конструкции будет доступно значение текущего элемента массива. Параметр является обязательным;
□ key позволяет указать название переменной, через которую внутри тела конструкции будет доступен ключ текущего элемента массива.
В качестве примера выведем все значения ассоциативного массива:
$arr = array('var1' => 1, 'var2' => 2, 'var3' => 3);
$smarty->assign('arr', $arr);
...
{foreach from=$arr item=n key=k}
{$k} => {$n}<br>
{/foreach}
Конструкция {foreach}...{/foreach} позволяет также перебрать обычный массив. Пример:
$arr = array(1, 2, 3, 4, 5);
$smarty->assign('arr', $arr);
...
{foreach from=$arr item=n}
{$n}<br>
{/foreach}
Как вы уже знаете, при создании больших сайтов страницу делят на три части — верхний колонтитул, тело страницы и нижний колонтитул. Инструкция {include} позволяет внутри шаблона подключить другой шаблон. Название подключаемого шаблона указывается в параметре file. В качестве примера использования инструкции {include} создадим четыре файла:
□ header.tpl — верхний колонтитул (листинг 80);
□ footer.tpl — нижний колонтитул (листинг 81);
□ index.tpl — "тело" страницы (листинг 82);
□ index.php — основная программа (листинг 83).
Листинг 80. Содержимое шаблона header.tpl
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>{$title}</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body>
Листинг 81. Содержимое шаблона footer.tpl
</body>
</html>
Листинг 82. Содержимое шаблона index.tpl
{* Smarty *}
{include file=header.tpl}
<div>Привет, {$name}!</div>
{include file=footer.tpl}
Листинг 83. Содержимое файла index.php
<?php
require_once('MySmarty.php'); // См. листинг 5.75
$smarty = new MySmarty();
// Указываем значения для переменных внутри шаблона
$smarty->assign('title', 'Заголовок страницы');
$smarty->assign('name', 'Николай');
// Выводим шаблон
$smarty->display('index.tpl');
?>
Подключить фрагмент HTML-кода позволяет также инструкция {insert}.
В отличие от инструкции {include}, при включенном кэшировании данные не будут помещены в кэш. В качестве значения параметра name указывается часть названия функции, которая будет вызываться. Полное название функции должно начинаться с префикса "insert_". Данная инструкция используется для генерации динамического кода, например, кода вывода различных баннеров. Пример:
<div>Привет, {$name}!</div>
<div>{insert name="test"}</div>
Содержимое основного файла:
<?php
function insert_test() {
return "Этот текст не будет помещен в кэш";
}
require_once('MySmarty.php'); // См. листинг 5.75
$smarty = new MySmarty();
// Указываем значения для переменных внутри шаблона
$smarty->assign('name', 'Николай');
// Выводим шаблон
$smarty->display('index.tpl');
?>
В этом случае даже если шаблон будет кэширован, функция insert_test() все равно будет вызвана. Внутри функции можно вернуть динамический HTML-код, например, код баннера.
Отправитель | Нити |
---|
10 пользователь(ей) активно (3 пользователь(ей) просматривают Инструкции)
Участников: 0 Гостей: 10 далее... |