Основы работы с технологией Smarty
В современном Мире программирования достаточно остро стоит вопрос о разделении кода. Все его решают по-разному. Microsoft ввел на вооружение разработчиков новую технологию XAML, которая позволяет полностью отделить программный код от интерфейса. Это позволило дизайнерам спокойно проектировать интерфейс приложений, полностью отделенный от кода, а так же с легкостью его менять впоследствии.
В Интернете редко можно встретить серьёзный сайт, в котором php код и код представления (html) были бы слиты воедино. Грамотный код – это код, в котором отделены «мухи от котлет». Это код, в котором отдельно идут php-файлы, обрабатывающие информацию, работающие с Базой Данных и пр., и отдельно файлы-шаблоны – фактически, html-файлы, которые отвечают за представление данных на странице. Для такой структуры кода нам потребуется технология Smarty. О ней и пойдет речь в этой статье.
Smarty – это компилирующий обработчик шаблонов для PHP. Достаточно сложное и непонятное определение. Попробуем разобраться в нем.
В первую очередь, Smarty предоставляет возможность создания так называемых шаблонов (templates). Smarty-шаблон – это файл с расширением *.tpl. Внутри этого файла в самом простом варианте реализации идет html код, задающий внешний вид страницы. Отличие от обычного html файла в том, что мы можем в нашем шаблоне использовать smarty-переменные, условия, циклы, подключать другие файлы и использовать множество smarty-функций! Вам наверняка уже захотелось попробовать это все в деле? Если да – то займемся установкой smarty.
Первое, что надо сделать – скачать Smarty. Здесь дана подробная инструкция по установке и настройки Smarty. Теперь пора во всем разобраться.
Итак, у нас есть некоторый php скрипт. Допустим, мы объявили в нем переменную $title.
$title = “Первая Smarty переменная”;
Далее напишем конструкцию, которая будет передавать эту переменную в наш шаблон (назовем его test.tpl). Будем считать, что Вы уже создали новый smarty-объект ($sm, например).
$sm->assign(”sm_var”, $title);
$smarty->display(’test.tpl’);
В первой строчке мы создаем smarty-переменную sm_var и присваиваем ей значение нашей переменной $title. Второй строчкой мы задаем наш темплейт-смарти файл, который будет отображен и внутри которого будет описана наша переменная. Приведем самый простой код этого шаблона.
<html>
<head>
<title>{$sm_var}</title>
</head>
<body>
Тестовая страница первого шаблона на SMARTY.
</body>
</html>
Как мы можем понять, для того, чтобы обратиться в шаблоне к переменной, которая была передана php скриптом, необходимо написать {$name} где $name – имя переменной, которое мы описали в php, при передаче в шаблон.
Как я уже писал, в Smarty существует возможность анализировать полученные данные. Рассмотрим пример.
{if $var > 5}
Переменная, полученная шаблоном больше 5.
{else}
Переменная, полученная шаблоном меньше или равна 5.
{/if}
Вполне логичен вопрос: «Как работать с массивами данных?». Так же просто, как и с переменными. Для этого в smarty предусмотрены циклические конструкции. Предположим, мы передали в шаблон массив ассоциативный массив $users, содержащий выборку пользовательских данных из Базы Данных. Для его вывода в шаблоне нам потребуется следующая конструкция.
{foreach from=$users item=u name=user_cycl}
{$u.user_id} – {$u.user_login} – {$u.user_password}
{/foreach}
User_id, user_login и user_password – соответствующие элементы массива (поля базы данных).
Ещё одной важной особенностью Smarty является возможность подключения файлов. Например, Вы хотите вынести меню в отдельный файл, чтобы подключать его там, где необходимо. Делается это следующим образом:
{include file=”menu.tpl”}
Для того, чтобы описать JavaScript функцию в шаблоне, необходимо обрамить её блоком {literal}…{/literal}.
{literal}
<script type=”text/javascript”>
function test()
{
alert(“Hello!”);
}
</script>
{/literal}
Наконец, отмечу, что существует специальная зарезервированная переменная {$smarty}, которая позволяет обращаться к переменным окружения и запроса. Приведем примеры.
- {$smarty.get.some_var} – принимает значение переменной some_var переданной методом GET.
- {$smarty.post.some_var2} – принимает значение переменной some_var2 переданной из формы методом POST.
- {$smarty.cookies.some_var3} – получает значение COOKIE переменной some_var3.
- {$smarty.session.some_var4} – получает значение сессионной переменной some_var4.
В одной из следующих статей мы подробно рассмотрим как красиво сделать мультиязычность на сайте, используя конфигурационные файлы Smarty.