Шаблонизатор Smarty

Smarty это компилирующий обработчик шаблонов для PHP позволяющий отделить логику и HTML-верстку веб-приложения.

Скачать библиотеку и посмотреть документацию можно на https://www.smarty.net/download

Содержание архива smarty-3.1.32.zip переносим в директорию /smarty/ в корень сайта, в index.php подключаем библиотеку и задаем переменные шаблона.

require '/smarty/libs/Smarty.class.php';

$smarty = new Smarty;

// Включение кэширования.
$smarty->caching = true;

// Время жизни кеша в секундах (-1 - включает его навсегда).
$smarty->cache_lifetime = 120;

// Передача значений в шаблон:
$smarty->assign('h1', 'Заголовок H1');
$smarty->assign('text', 'Hello World...');
$smarty->assign('number', 200);

// Обычный массив.
$smarty->assign(
	'array_1', array(
		'Понедельник', 
		'Вторник', 
		'Среда'
	)
);

// Ассоциативный массив.
$smarty->assign(
	'array_2', array(
		'item_a' => 'Январь', 
		'item_b' => 'Февраль', 
		'item_c' => 'Март'
	)
);

// Многомерный массив.
$smarty->assign(
	'array_3', array(
		array(
			'id' => 1, 
			'name' => 'Весна', 
		),	
		array(
			'id' => 2, 
			'name' => 'Лето', 
		),	
		array(
			'id' => 3, 
			'name' => 'Осень', 
		),	
	)	
);

// Вывод шаблона.
$smarty->display('index.tpl');
PHP

Далее нужно создать директорию /templates/, а в ней файл шаблона index.tpl.
В шаблонах Smarty применяются следующие конструкции:

1
{$h1}
HTML

В PHP эта запись аналогична:

<?php echo $h1; ?>
PHP
Заголовок H1

Также можно вывести значение массива по ключу.

{$array_1[0]}
{$array_2.item_a}
{$array_3[0].name}
HTML

В PHP это выглядело бы так:

<?php echo $array_1[0]; ?>
<?php echo $array_2['item_a']; ?>
<?php echo $array_3[0]['name']; ?>
HTML
Понедельник
Январь
Весна
2

Smarty позволяет задавать значения переменных прямо в шаблоне с помощью конструкции assign.
Поддерживаются арифметические выражения и катенация:

{assign var="new" value="`$number + 129`"}
{$new}
HTML
329

Катенация переменной с текстом:

{assign var="new" value="{$h1} - добавленный текст"}
{$new}
HTML
Заголовок H1 - добавленный текст

Катенация переменных:

{assign var="new" value="{$h1} {$text}"}
{$new}
HTML
Заголовок H1 Hello World...
3

Если переменная не существует или пуста, можно задать текст который будет выводится вместо нее.

{$title|default: 'ОШИБКА'}
HTML
4

Переменные можно модифицировать встроенными функции, например, перевести символы в верхний регистр.

{$h1|upper}
HTML

Допустимо комбинировать сразу несколько функций:

{$h1|upper|strip|default: 'ОШИБКА'}
HTML
lower Переводит строку в нижний регистр
upper Переводит строку в верхний регистр
capitalize Преобразовывает первые буквы каждого слова в заглавные
strip Заменяет все повторяющиеся пробелы
nl2br Заменяет перевод строки в тэг <br />
strip_tags Удаляет html тэги
escape Используется для кодирования спецсимволов

Полный список функций на https://www.smarty.net

5

В шаблонах доступны все глобальные переменные PHP, получить значение можно через объект $smarty.

{$smarty.get.ключ} $_GET
{$smarty.post.ключ} $_POST
{$smarty.session.ключ} $_SESSION
{$smarty.coocies.ключ} $_COOCIES
{$smarty.request.ключ} $_REQUEST
6

Как и в PHP, в Smarty доступны управляющие конструкции, операторы и необходимые функции.

If

{if !empty($h1)}
	...
{/if}
HTML

If, else

{if !empty($h1)}
	...
{else} 
	...					
{/if}
HTML

Switch Case

Его нет, но вместо него можно использовать конструкцию if, else if, else.

{if !empty($h1)}
	...
{else if !empty($title)}
	...	
{else} 
	...                  
{/if}
HTML
7

Foreach

Конструкция fereach своеобразная, в примере идет перебор массива $array_3 и вывод значения по ключу name.

{section name=row loop=$array_3}
	{$array_3[row].name}
{/section}
HTML
Весна
Лето
Осень

For

{for $foo=1 to 3}
	<p>{$foo}</p>
{/for}
HTML
<p>1</p>
<p>2</p>
<p>3</p>
8

Полный список на smarty.net

Include

Подключает файл шаблона в директории /templates/.

{include file='footer.tpl'}	
HTML

literal

Вставки JS и CSS нужно обворачивать тегами {literal} т.к. фигурные скобки конфликтуют со Smarty и <script> или <style> просто не выведутся на странице.

{literal}	
	<script>
		...
	</script>
{/literal}
HTML

Strip

Удаляет пробелы между HTML тегами.

{strip}
<ul>
	<li>1</li>
	<li>2</li>
	<li>3</li>
</ul>
{/strip}
HTML
<ul><li>2</li><li>2</li><li>3</li></ul>
12.07.2018, обновлено 29.08.2019
26480

Комментарии 1

Генезис Сервис Генезис Сервис
17 сентября 2021 в 19:26
Роман, спасибо большое за статью!

, чтобы добавить комментарий.

Другие публикации

Работа с JSON в PHP
JSON (JavaScript Object Notation) – текстовый формат обмена данными, основанный на JavaScript, который представляет собой набор пар {ключ: значение}. Значение может быть массивом, числом, строкой и...
112947
+14
Contenteditable – текстовый редактор
Если добавить атрибут contenteditable к элементу, его содержимое становится доступно для редактирования пользователю, а...
43164
+34
Загрузка файлов на сервер PHP
В статье приведен пример формы и php-скрипта для безопасной загрузки файлов на сервер, возможные ошибки и рекомендации при работе с данной темой.
71776
+22
Массив $_SERVER
Описание значений глобального массива $_SERVER с примерами.
51729
+3
Мануал по созданию и форматированию excel файлов в PHPExcel
К сожалению разработчики прекратили поддержку и разработку проекта, но PHPExcel все равно остается популярной...
127941
+36
Поиск похожих текстов в базе данных MySQL + PHP
Один из вариантов поиска похожих статей в базе данных основан на схождении слов в двух текстах.
7123
+7