RSS-фид

Знакомство с шаблонизатором 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 комментов

Комменты:

#3 BaDos

BaDos

В web-студии, где работаю, самописная CMS. В ней юзается смарти. Очень даже шустренько все работает. Сам шаблонизатор очень нравится.

Добавлено: 24 августа 2010 г. в 01:44

Ответить

#5 vredniy

vredniy

с появлением в моей жизни ZF надобность в шаблонизаторах отпала, к лучшему ли это, пока не знаю

Добавлено: 02 сентября 2010 г. в 16:05

Ответить

#6 Канат Гайлимов

Канат Гайлимов

@vredniy, с появлением MVC надобность в шаблонизаторах отпадает само собой ZF круто! Я пока понемногу осваиваю CI. Дальше будет наверное ZF. Их стандарты кодинга офигенны и вообще это бренд

Добавлено: 03 сентября 2010 г. в 10:17

Ответить

Оставить коммент:

Уважаемые посетители! Вы можете оставить свой коммент к этому посту. Пожалуйста, соблюдайте нормы приличия и этики.

Улыбка Убей себя ап стену :) Но-но-но! Лепота... Уррряя! В натуре Подмигиваю Ну извините... Ржунимагу Выпьем, друг! SOS Речь Бубен 0_o