Знакомство с шаблонизатором Smarty
Привет всем! В предыдущем посте мы рассматривали паттерн проектирования MVC и я пообещал показать реализацию шаблонизатора Smarty во вью. Ну что же, сдерживаю свое обещание.
Для начала идем на официальный сайт Smarty и качаем последнюю версию, заодно там же можем почитать документацию на досуге. Затем, открываем наш прошлый проект, создаем директорию libs, распаковываем Smarty и копируем оттуда папку libs в нашу директорию libs. Теперь переимоновываем папку libs из директории libs в smarty. Должно получиться libs/smarty.
Smarty - это компилирующий обработчик шаблонов, поэтому принято создавать две директории для хранения шаблонов: templates и templates_c. Первая предназначена для хранения html/tpl шаблонов, а во вторую Smarty складывает откомпилированные шаблоны, т.е. php-код. Таким образом, шаблоны компилируются только один раз.
Ну а теперь наконец приступим к кодингу. Открываем наш контроллер и редактируем:
<?php
/**
* Это контроллер
*
* Здесь происходит обработка переменных, фильтрация и тыды.
* Контроллер взаимодействует с моделью и вьюшкой
*
* @author Канат Гайлимов, http://gailimov.info
*/
require_once 'config.php';
require_once 'mposts.php';
// подключаем Smarty
require_once 'libs/smarty/Smarty.class.php';
// создаем объект класса Smarty
$smarty = new Smarty;
$posts = getPosts();
// передаем массив постов Smarty
$smarty->assign('posts', $posts);
// выводим шаблон
$smarty->display('posts.html');
/* Конец файла ./cposts.php */
Код прокомментирован думаю объяснять не стоит. Теперь создаем в папке templates файл posts.html и быстренько заполняем:
{include file='inc/header.html'}
<section>
{foreach item = post from = $posts}
<article>
<header>
<h2>{$post.title}</h2>
</header>
{$post.blog_post}
<p class="date">{$post.dt}</p>
</article>
{/foreach}
</section>
{include file='inc/footer.html'}
Здесь я решил вынести хедер и футер в отдельные файлы, чтобы показать подключение внешних файлов в Smarty. Вот содержимое файла header.html
<!doctype html>
<html>
<head>
<meta charset=utf-8>
<!--[if IE]>
<script>
document.createElement('header');
document.createElement('nav');
document.createElement('section');
document.createElement('article');
document.createElement('aside');
document.createElement('footer');
</script>
<![endif]-->
<link rel="stylesheet" href="templates/css/style.css" type="text/css" media="screen" />
<title>Пример применения паттерна проектирования MVC совместно со Smarty</title>
</head>
<body>
<div id="wrapper">
<header id="head">
<h1>Мини-блог с применением MVC совместно со Smarty</h1>
</header>
А это footer.html
<footer>
<p>© <a href="http://gailimov.info">Канат Гайлимов</a> {$smarty.now|date_format:"%Y"}</p>
</footer>
</div>
</body>
</html>
Как видите, код почти не отличается от прошлой реализации с php-native шаблоном, но все-таки со Smarty ИМХО красивее. Здесь, кстати используется специальная Smarty-переменная $smarty_now, выводящая текущее время. Модификатор date_format предназначен для форматирования даты.
На этом пожалуй все. Как видите ничего сложного нет. Для себя я выбираю php-native, но это не говорит о том, что Smarty фигня. Каждый делает выбор по своему усмотрению. Архив с примером лежит здесь. Пока :).
Запостено: 18 августа 2010 г. в 15:23 | 6 комментов














Комменты:
#1 Никита Красноярцев
Что-то не удивил меня этот смарти...
Добавлено: 20 августа 2010 г. в 23:26
Ответить
#2 Канат Гайлимов
@Никита Красноярцев, ну это на любителя
ИМХО с ним красивее, да и верстальщику понятнее, вот только медленный он
Добавлено: 21 августа 2010 г. в 08:32
Ответить
#3 BaDos
В web-студии, где работаю, самописная CMS. В ней юзается смарти. Очень даже шустренько все работает. Сам шаблонизатор очень нравится.
Добавлено: 24 августа 2010 г. в 01:44
Ответить
#4 Канат Гайлимов
@BaDos, да, для web-студий Смарти хорошее решение
Добавлено: 30 августа 2010 г. в 09:03
Ответить
#5 vredniy
с появлением в моей жизни ZF надобность в шаблонизаторах отпала, к лучшему ли это, пока не знаю
Добавлено: 02 сентября 2010 г. в 16:05
Ответить
#6 Канат Гайлимов
@vredniy, с появлением MVC надобность в шаблонизаторах отпадает само собой
ZF круто! Я пока понемногу осваиваю CI. Дальше будет наверное ZF. Их стандарты кодинга офигенны и вообще это бренд 
Добавлено: 03 сентября 2010 г. в 10:17
Ответить