Основы работы с технологией 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.





июля 7, 2008 at 16:42
[...] Вам ещё не известно это расширение – ознакомьтесь с данной статьей) никакого текста нету! Ни буквы человеческого текста. [...]
июля 14, 2008 at 17:10
Спасиб.
Хотел узнать что такое Smarty и шаблонизаторы.
Более чем доходчиво.
октября 24, 2008 at 21:02
А поподробней про цыклы можно?
октября 26, 2008 at 15:19
Желательно еще и работе с бд. Т.е. бд + смарти циклы
октября 29, 2008 at 12:31
Очень полезная статья вчера прочитал документацию оцень доволен
ссылка: http://smarty.net/manual/ru/ а то я сразу не нашёл…
Для хорошего сайта считаю ещё нужно использовать модуль апача mod_rewrite, жаль нет статьи на этом сайте(в интернете очень много бесполезной информации, пришлось долго мучиться)
июля 8, 2010 at 22:17
А теперь немного критики. начнём с того что первый пример с заменой переменной можно выполнить и
средствами php, осуществив замену, примерно так:$content = str_replace({$sm_var}, $title, $content);
“которая позволяет полностью отделить программный код от интерфейса” – я этого к сожалению не увидел.
{if $var > 5} – это больше похоже на код, чем на дизайн, т.е данная технология отделяет php-код от html
и вставляет в файлы с html некоторый свой код. лично для меня это подобно слиянию html c php.
Наверно поэтому я и не использую подлобные технологии.
Я конечно не спорю, плюсы есть, например подключение в файл с html другой html, повторяющийся
на каждой странице, но и здесь можно обойтись средствами php.
Но всётаки я думаю подобные технологии больше заинтересуют начинающих php-кодеров.
Добавить комментарий
Вы должны войти