Smarty – один из самых известных шаблонизаторов. Шаблонизатор нужен для разделения PHP-кода от HTML-кода. Если первый раз с этим сталкиваешься, преимущества такого подхода заметны не сразу, но потом ты удивляешься, как раньше мог обходиться без шаблонов.
- Smarty довольно быстр (есть и более быстрые шаблонизаторы, но на практике узким местом в проекте является не шаблонизатор, а база данных)
- Он эффективен, так как PHP делает за него грязную работу.
- Никакой лишней обработки шаблонов, они компилируются только один раз. Перекомпилируются только те шаблоны, которые изменились.
- Можно создавать пользовательские функции и модификаторы, что делает язык шаблонов чрезвычайно расширяемым.
- Конструкции if/elseif/else/endif передаются обработчику PHP, так что синтаксис выражения {if …} может быть настолько простым или сложным, насколько вам угодно.
- Допустимо неограниченное вложение секций, условий и т. д.
- Встроенный механизм кеширования.
Рассмотрим примеры с использованием Smarty:
<?php // подключаем класс Smarty require_once('smarty/Smarty.class.php'); // Создаем объект класса $smarty = new Smarty(); // Устанавливаем папки шаблонов // 'templates' – каталог, в котором хранятся шаблоны // 'templates_c' - туда Smarty сохраняет скомпилированные шаблоны $smarty->template_dir = 'templates'; $smarty->compile_dir = 'templates_c'; // Получение данных их БД (в виде ассоциативного массива) $news = $DB->query("SELECT * FROM news ORDER BY id LIMIT 0,10"); // передаем массив в шаблонизатор $smarty->assign('news', $news); /* Допустим что наша задача была в простом выводе данных в шаблон, что мы уже и сделали, и это конечный этап – вызываем метод display() класса smarty, который выводит, передаёт данные в шаблон, перекомпилирует (если были изменения) и выводит контент. Методу передается имя файла шаблона, в котором как предполагается был обработан нужным образом массив news */ $smarty->display('news.tpl'); ?>
Теперь рассмотрим непосредственно файл шаблона news.tpl, фактически это обычный html с вставками переменных и конструкций циклов. Все переменные заключены в фигурные скобки. Шаблон
<html> {foreach from=$news item=item} Заголовок: {$item.title} Текст новости: {item.description} <a href="index.php?id={$item.id}" mce_href="index.php?id={$item.id}">Подробнее...</a> {/foreach} </html>
Вот собственно и все, это рабочий пример, который будет выводить 10 извлечённых нами новостей из базы данных. Может показаться, что в данном примере можно было бы обойтись обычным php с html-вставками. Но в большом проекте шаблонизатор заметно упрощает работу с проектом.
Smarty работает на любом хостинге и широко известен (довольно часто я встречал его в вакансиях). Поэтому, гораздо проще будет найти человека, работающего со Smarty нежели с другим шаблонизатором. Не нужно бояться большой документации. Никто не заставляет вас использовать весь потенциал Smarty. Вам потребуется не более 10-20% функциональности Smarty. Сам я работал еще с Blitz, но там совсем другая идеология. В нем нет многих простых фич, которые есть в Smarty. А насчет скорости приведу в пример Flickr, который использует Smarty – еще раз повторюсь, что узкое место это БД и кэширование данных.
On-line документация Smarty (на русском)
Скачать русскую документацию Smarty (pdf 0.8 Mb)
Почему-то кругом статьи о смарти звучат как реклама, и используют одни и те же фразы. Но 80% реальных знакомых (не анонимов с форумов) программистов PHP негативно высказываются о нем. И если на столько уж упрощать себе жизнь, то почему бы не взять готовую цмс и не переделать под себя?
Пасибо большое, давно искал
XSLT всяко правильнее использовать... Хотя по производительности сравнивать не приходилось
Поддерживаю Макса: и действительно лучше взять хорошую цмску и настроить ее. А со смарти приходится работать потому что есть проекты, которые разрабатывал не я.
Нормальные проекты всегда пишу с нуля (используя наработки). А каждый раз думать каким макаром поправить цмс да так чтобы работало... сматри в этом плане удобен - по крайней мере он не рекламируется и не выступает в роли цмс. Не надо путать мух с котлетами ))
Бред полный эти ваши Smarty , Объясните зачем мне учить синтаксис этих Smarty причём до горя идиотский если я могу просто все это делать на PHP в самих же шаблонах , я использую только это - http://phpsavant.com/
Elvis - бред это Savant.
Что легче записать и что более понятно из двух примеров?
Savant
<title><?php echo $this->eprint($this->title); ?></title>
Smarty
<title>{$title}</title>
Ответ очевиден и без всякой рекламы.
Как я понял самый большой + смарти это то что подборкой дизайна может заниматься один чел., версткой в готовый шаблон другой а програмить пхп третий и они не будут особо мешать друг другу. Оснобенно для тех кто не знает пхп вполне реально самому натянуть шкурку на свой сайт и не лезть в пхп. Сам только начинаю в это вникать. Посмотрим что получится..
гораздо больше чем смарти мне понравился twig http://twig.kron0s.com/
Когда учил php - СМАРТИ совсем не понял, думаю зачем мне это, мне проще вообще без шаблонизатора...
Потом с увеличением сложности проекта понял что чегото не хватает...
А когда тебе еще потом нужно свой код дать кому-то доработать....
Вот через год поробовал смарти снова - а веть жесткая штука. Ничего сложного там нет вообще, а жизнь сильно упрощает.
Мне особенно пригодилось, когда дизайн за время написания сайта раз 10 меняли. Тут СМАРТИ просто по царски упростил такие манипуляции.
-----------------------------------------
#7
-----------------------------------------
Elvis - бред это Savant.
Что легче записать и что более понятно из двух примеров?
Savant
eprint($this->title); ?>
Smarty
{$title}
Ответ очевиден и без всякой рекламы.
-----------------------------------------
еще проще:
к чему лишнее?
-----------------------------------------
#7
-----------------------------------------
Elvis - бред это Savant.
Что легче записать и что более понятно из двух примеров?
Savant
//eprint($this->title); ?>
Smarty
{$title}
Ответ очевиден и без всякой рекламы.
-----------------------------------------
еще проще:
к чему лишнее?
А по моему, если разрабатывать проект с нуля, заниматься разметкой и оптимизацией - Smarty самое то. Он прост и эффективен (по словам авторов). Нужно попробовать.
этот шаблонизатор устарел лет на 5, такой убогий функционал с достаточно высоким порогом вхождения сейчас использовать просто мазохизм
В принципе вещь удобная, но уж слишком много заморочек. Проще без этого всего обходиться...
"Шаблонизатор нужен для разделения PHP-кода от HTML-кода" - да, действительно нужен. Но вот сама идея разделения PHP и HTML кода сама по себе ущербна - переменные создаются в одном файле ($smarty->assign('news', $news)), потом передаются в шаблон, там верстальщик обязательно знает о внутреннем устройстве этих переменных, где массив, где просто строка, какие ключи массива и т.д. - т.е. верстальщику уже приходится думать о PHP коде и заглядывать в php сценарий. Тут же попутно ему это все нужно втиснуть в базовый синтаксис smarty, т.е. - +1 язык, на котором нужно думать. Нельзя отделять мух от котлет! Меняет что-то программист - должна меняться и часть шаблона smarty, обрабатывающая этот код; понадобилась верстальщику дополнительная переменная - он долбит программиста. Так что лучше с умом подойти к структуре проекта, использовать встраивание HTML-кода, чем вместо писать {$item.id}.
Смарти штука очень полезная, одно только бесит - когда используешь JQuery прямо в коде приходится использовать {literal}{/literal}. Мелочь, вроде бы не страшно, но лень великая и страшная вещь при борьбе с которой страдают нервы в основном.
Некоторые CMS используют Smarty, например ShopCMS. Практически не нужно изучать саму CMS, но нужно знать Smarty!
да хватит вам ерундой заниматься. Учить смарти, что там учить? как циклы или условные конструкции писать? или как плагин написать? страшные мучение!!!
в нем без проблем разберется любой, кто даже не знает php. А кто знаком, вообще проблем не будет!
Использую в своем проекте. Очен удобный, гибкий и масштабируемый. Прост в использовании. Функциональность можно легко расширять с помощью плагинов.
More posts of this quliaty. Not the usual c***, please
Shoot, so that's that one spupoess.
Заспамили тему, говоруны. Да пищите на чем угодно, какое кому дело до ваших комплексов? Тут разбирается конкретное применение.
Откуда взялось $DB ?
это класс для работы с MySQL
http://ekimoff.ru/42/
о admin на высоте! Спасиба. А применение этой библиотеки не влияет на скорость обработки?
Использую Smarty уже 5 лет, сделал не одну сотню сайтов - полёт нормальный :)))
Попросили подработать сайт, который сделан на Smarty.
До этого не приходилось иметь с ним дело, так вот -
заняло у меня времени меньше часа ( установил БД и разбирался с таблицами и вносил изменения). Изменил 2 файла
логику и представление. Не думаю, что верстальщик справился бы сам. Разделение логики и представления всегда надуманно, лишь подпасть под категорию MVC.
Разделение логики от представления(MVC) - шаг от создания сайта "на коленке" к серьезному проекту. Вы потому и смогли разобраться за "меньше часа" что было разделение.