Smarty - компилирующий обработчик шаблонов для PHP

Решаемые задачи и проблемы

Smarty - компилирующий обработчик шаблонов для PHP

Сообщение Moonlight » 23 май 2009, 01:42

Проблема отделения дизайна и данных от кода довольно актуальна в наше время. Особенно остро это проявляется при разработке крупных сайтов, при написании своего движка, при необходимости заложить в проект возможность быстрой смены дизайна, а также в том случае, когда программированием и вёрсткой шаблонов занимаются разные люди. Один из которых хочет иметь возможность свободно изменять логику работы приложения и не ковыряться при этом в HTML, а второй желает заниматься своей любимой вёрсткой и имел в виду PHP.
Существует немало решений, позволяющих отделить дизайн от кода посредством создания системы шаблонов. Многие CMS (Data Life Engine, Joomla etc) имеют в своём составе классы для работы с шаблонами. Некоторые разработчики пишут свои шаблонизаторы. Однако в большинстве своём это решения, заточенные под конкретный проект, и возможностями они особо не блещут - в основном позволяют вставку одиночных значений и парных тегов. Да и н апроизводительности их использование сказывается не лучшим образом.

Smarty - это написанный на PHP класс, который представляет собой компилирующий обработчик шаблонов. Суть его работы в том, что после обработки шаблона создаётся соответствующий PHP-код, который при последующих обращениях к этой же странице будет просто выполнен. Кроме того, Smarty предоставляет чрезвычайно богатые возможности для управления контентом - как простую вставку переменных, так и условные и циклические инструкции, работу с массивами и объектами, вызов функций, доступ к переменным окружения etc. При этом синтаксис инструкций Smarty достаточно простой и понятный. Так что верстальщик может легко и просто управлять отображением данных, комбинируя HTML и инструкции Smarty, а программист может [безнаказанно] безобязненно менять логику работы приложения и затем просто передавать данные в шаблон.

Пример использования Smarty:

PHP

Код: выделить все
require_once('Smarty.class.php');
$smarty = new Smarty();

$str = "Smarty Demo";

$smarty->assign('title', $title);

$list = array(
    'first_elem' => 'This is a first element',
    'second_elem' => 'This is a second element,
);

$smarty->assign('
mass, $list);
$smarty->display("main.tpl");
 


HTML-код шаблона (main.tpl)

{* Йа комментарий, и йа не попаду в браузер :Р *}
{* Включение файла *}
{include file=header.tpl}

{* Вставка переменной из php-скрипта *}
<h1>{$str}</h1>
<table>
{*
Циклический проход по массиву . Блок foreachelse выполняется, елси исходный массив пуст.
*}
{foreach from=$mass item=elem}
<tr><td class="data">{$elem}</td></tr>
{foreachelse}
<tr><td class="error">Data Not Found</td></tr>
{/foreach}
</table>

{include file=footer.tpl}


Некоторые особенности Smarty:

  • Работает быстро и эффективно. Шаблоны компилируются только один раз, повторно обрабатываются лишь те шаблоны, которые изменились
  • Гибкий и настраиваемый механизм кэширования, позволяющий при повторном обращении к странице отдавать уже сгенерированный HTML-документ
  • Позволяет легко расширить базовый функционал или изменить язык шаблонов посредством написания или подключения готовых плагинов, создания своих функций и модификаторов переменных(можно, например, использовать БД в качестве кэша или хранилища шаблонов)
  • Прост в использовании. Неискушённый в программировании верстальщик без труда разберётся в инструкциях языка шаблонов Smarty

Боле подробно читаем здесь
Elves are immortal
Аватар пользователя
Moonlight
Модератор раздела
Модератор раздела
 
Сообщений: 462
Изображения: 10
Зарегистрирован: 04 апр 2009, 09:15
Откуда: Новоград-Волинський
Благодарил (а): 0 раз.
Поблагодарили: 5 раз.
Блог (статьи): Просмотреть
Пункты репутации: 6
Moonlight doesn't have reputation

Re: Smarty - компилирующий обработчик шаблонов для PHP

Сообщение Berg » 23 май 2009, 03:01

по подобному принцыпу работал раньше PHPbb2 сейчас тот старый компилятор переписали и расширили возможностями ..... Интересно было бы сравнить их в производительности - какой быстрее ...... СМАРТИ или ПХПББшный3 :)
Помогите Microsoft в борьбе с пиратскими версиями Windows — установите своим друзьям Linux! :)
Аватар пользователя
Berg
Модератор
Модератор
 
Сообщений: 619
Зарегистрирован: 30 окт 2008, 00:11
Откуда: Тьмутаракань :)
Благодарил (а): 4 раз.
Поблагодарили: 3 раз.
Блог (статьи): Просмотреть
Пункты репутации: 8
Berg doesn't have reputation

Re: Smarty - компилирующий обработчик шаблонов для PHP

Сообщение Moonlight » 23 май 2009, 10:25

Для этого нужно прикрутить Smarty к phpBB и посмотреть, что из этого получится) Словом, не знаю, как насчёт производительности, но в общем, мне кажется, Смарти поуниверсальнее будет. Компилятор phpBB местами заточен под сам phpBB, и заюзать его as is не получится - придётся немного поработать напильником.
Elves are immortal
Аватар пользователя
Moonlight
Модератор раздела
Модератор раздела
 
Сообщений: 462
Изображения: 10
Зарегистрирован: 04 апр 2009, 09:15
Откуда: Новоград-Волинський
Благодарил (а): 0 раз.
Поблагодарили: 5 раз.
Блог (статьи): Просмотреть
Пункты репутации: 6
Moonlight doesn't have reputation

Re: Smarty - компилирующий обработчик шаблонов для PHP

Сообщение Berg » 23 май 2009, 12:02

Наверное проще отделить от ПХП их компилятор чем прикручивать смарти , так как придется переписать все шаблоны :), что я с успехом и сделал ... , И сейчас ровняю этот компилятор под себя... мне нравится :) удобно.
Помогите Microsoft в борьбе с пиратскими версиями Windows — установите своим друзьям Linux! :)
Аватар пользователя
Berg
Модератор
Модератор
 
Сообщений: 619
Зарегистрирован: 30 окт 2008, 00:11
Откуда: Тьмутаракань :)
Благодарил (а): 4 раз.
Поблагодарили: 3 раз.
Блог (статьи): Просмотреть
Пункты репутации: 8
Berg doesn't have reputation

Re: Smarty - компилирующий обработчик шаблонов для PHP

Сообщение Moonlight » 23 май 2009, 12:09

Что ж, на вкус все фломастеры ядовитые... Я пока не вижу причин переходить на что-либо, кроме Smarty
Elves are immortal
Аватар пользователя
Moonlight
Модератор раздела
Модератор раздела
 
Сообщений: 462
Изображения: 10
Зарегистрирован: 04 апр 2009, 09:15
Откуда: Новоград-Волинський
Благодарил (а): 0 раз.
Поблагодарили: 5 раз.
Блог (статьи): Просмотреть
Пункты репутации: 6
Moonlight doesn't have reputation

Сообщение Berg » 23 май 2009, 12:25

Дело не в том чтобы переходить ... просто сматри нужно настраивать под каждый проект если он не установлен на серваке я так понимаю ..., а так получаается просто свой клас для шаблонов прямов сайте без настроек дополнительных.
Помогите Microsoft в борьбе с пиратскими версиями Windows — установите своим друзьям Linux! :)
Аватар пользователя
Berg
Модератор
Модератор
 
Сообщений: 619
Зарегистрирован: 30 окт 2008, 00:11
Откуда: Тьмутаракань :)
Благодарил (а): 4 раз.
Поблагодарили: 3 раз.
Блог (статьи): Просмотреть
Пункты репутации: 8
Berg doesn't have reputation

Smarty - компилирующий обработчик шаблонов для PHP

Сообщение Moonlight » 23 май 2009, 14:11

Да что там его настраивать? Пути прописать, и всё... И проинклудить файл в свой проект. А в остальном это такой же класс для обработки шаблонов. Это раз, а два - язык шаблонов Smarty (имхо) намного более прост для понимания (не стоит забывать, что его основными пользователями есть верстальщики). Да и механизм добавления своих возможностей существует, причём без использования напильника...

Конечно, для себя любимого по большому счёту пофиг, какой шаблонизатор использовать. Я когда-то вообще свой писал... :)
Elves are immortal
Аватар пользователя
Moonlight
Модератор раздела
Модератор раздела
 
Сообщений: 462
Изображения: 10
Зарегистрирован: 04 апр 2009, 09:15
Откуда: Новоград-Волинський
Благодарил (а): 0 раз.
Поблагодарили: 5 раз.
Блог (статьи): Просмотреть
Пункты репутации: 6
Moonlight doesn't have reputation

Smarty - компилирующий обработчик шаблонов для PHP

Сообщение AmberLEX » 02 июн 2009, 10:34

А что Вы скажите по поводу этих статеи?

http://anton.shevchuk.name/php/php-template-engin/"
http://www.bigsmoke.us/php-templates/sm ... ans-smarty"

Я просто думаю изучать Smarty или не стоит)
Аватар пользователя
AmberLEX
Жаждущий информации
Жаждущий информации
 
Сообщений: 35
Зарегистрирован: 15 апр 2009, 06:20
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
AmberLEX doesn't have reputation

Smarty - компилирующий обработчик шаблонов для PHP

Сообщение Berg » 02 июн 2009, 11:43

Это как посмотреть ....
Вообще - хорошо иметь свое ...
Плюсы - недоступность кода для других для изучения + всегда знаешь что оно делает на самом деле и как это происходит ....
Минусы - процес длителен и для этого было бы неплохо изучить функционал уже написанного примерно и их плюсы и минусы чтоб попробовать убрать их в своем движке заранее при проектировании...
Даже если Вы и изучите его - хуже от этого думаю не будет :)
Во всяком случае будете понимать примерно принцип как это все работает - опыт это всегда хорошо в любом случае :)
Всегда можно перейти на что-то лучшее если есть ....
Помогите Microsoft в борьбе с пиратскими версиями Windows — установите своим друзьям Linux! :)
Аватар пользователя
Berg
Модератор
Модератор
 
Сообщений: 619
Зарегистрирован: 30 окт 2008, 00:11
Откуда: Тьмутаракань :)
Благодарил (а): 4 раз.
Поблагодарили: 3 раз.
Блог (статьи): Просмотреть
Пункты репутации: 8
Berg doesn't have reputation

Re: Smarty - компилирующий обработчик шаблонов для PHP

Сообщение AmberLEX » 02 июн 2009, 19:20

Я так понял, после компиляции шаблона, получается обычный php код, который сохраняется во временном файле.
Если файл шаблона не изменился, то при последующем отображении этого шаблона читается (инклюдится) именно этот временный файл.
Аватар пользователя
AmberLEX
Жаждущий информации
Жаждущий информации
 
Сообщений: 35
Зарегистрирован: 15 апр 2009, 06:20
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
AmberLEX doesn't have reputation

Smarty - компилирующий обработчик шаблонов для PHP

Сообщение Moonlight » 02 июн 2009, 20:05

Да, именно так. Что касается варианта "написать свою либу"... Это, конечно, вкусная вещь, но тут в силу вступает такой фактор, как время (которого вечно не хватает)
Elves are immortal
Аватар пользователя
Moonlight
Модератор раздела
Модератор раздела
 
Сообщений: 462
Изображения: 10
Зарегистрирован: 04 апр 2009, 09:15
Откуда: Новоград-Волинський
Благодарил (а): 0 раз.
Поблагодарили: 5 раз.
Блог (статьи): Просмотреть
Пункты репутации: 6
Moonlight doesn't have reputation

Smarty - компилирующий обработчик шаблонов для PHP

Сообщение Berg » 02 июн 2009, 20:07

ну .. да :) функционал примерно такой у всех :)
Помогите Microsoft в борьбе с пиратскими версиями Windows — установите своим друзьям Linux! :)
Аватар пользователя
Berg
Модератор
Модератор
 
Сообщений: 619
Зарегистрирован: 30 окт 2008, 00:11
Откуда: Тьмутаракань :)
Благодарил (а): 4 раз.
Поблагодарили: 3 раз.
Блог (статьи): Просмотреть
Пункты репутации: 8
Berg doesn't have reputation

Smarty - компилирующий обработчик шаблонов для PHP

Сообщение Moonlight » 02 июн 2009, 22:11

А относительно холивара между Smarty и Zend View можно сказать следующее: в некоторых девелоперских конторах одним из требований является, помимо всего прочего, знание Smarty. За Zend View я таких грехов пока не замечал))

AmberLEX писал(а):Я просто думаю изучать Smarty или не стоит
 

Я думаю, стоит, хотя бы для того, чтобы понять, в чём суть полноценного шаблонизатора. Тем более что при нормальном уровне знания PHP изучение Smarty займёт у вас буквально пару дней чистого времени)
Elves are immortal
Аватар пользователя
Moonlight
Модератор раздела
Модератор раздела
 
Сообщений: 462
Изображения: 10
Зарегистрирован: 04 апр 2009, 09:15
Откуда: Новоград-Волинський
Благодарил (а): 0 раз.
Поблагодарили: 5 раз.
Блог (статьи): Просмотреть
Пункты репутации: 6
Moonlight doesn't have reputation

Re: Smarty - компилирующий обработчик шаблонов для PHP

Сообщение AmberLEX » 05 июн 2009, 17:30

Вот, начал пробовать Смарти)
Например, есть гостевая. На страницу нужно вывести все сообщения.
В скрипте я считываю их в массив:
Код: выделить все
$rows = $db->select("SELECT * FROM $tblguest", MYSQL_ASSOC);
$smarty->assign('guest_items', $rows);
 

В переменной $rows у меня содержится:
Код: выделить все
Array
(
    [0] => Array
        
(
            [id] => 1
            
[name] => Alex
            
[city] => Kherson
            
[email] => mail@domain.ru
            
[text] => Hello all
            
[answer] => Hello
            
[dt] => 1244210858
            
[visible] => 1
        
)

    [1] => Array
        
(
            [id] => 2
            
[name] => Kolyan
            
[city] => Kiev
            
[email] => mail@domain.ru
            
[text] => Еще сообщение
            
[answer] => Ответ на сообщение
            
[dt] => 1244210858
            
[visible] => 0
        
)

)
 

Код шаблона такой:
Код: выделить все
{foreach from=$guest_items item=item}
<
table width="100%" border="1">
    <tr>
        <td>{$item.name}</td>
        <td>{$item.city}</td>
        <td>{$item.dt}</td>
    </tr>
    <tr><td colspan="3">{$item.text}</td></tr>
    <tr><td colspan="3">{$item.answer}</td></tr>
</
table><br />
{/foreach}
 

1. Как мне преобразовать дату из таймстамп в шаблоне или где это делать? Она же так и выводится целым числом.
2. Получается что я в функции select делаю массив и в шаблоне еще раз перебираю этот массив, т.е. два раза? Это правильно?
Аватар пользователя
AmberLEX
Жаждущий информации
Жаждущий информации
 
Сообщений: 35
Зарегистрирован: 15 апр 2009, 06:20
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
AmberLEX doesn't have reputation

Smarty - компилирующий обработчик шаблонов для PHP

Сообщение Berg » 05 июн 2009, 18:17

1. это нужно сделать перед $smarty->assign('guest_items', $rows); ... массив $rows обработать ....
2. да ... именно так..... - только select - Вам возвращает массив как результат запроса , а в шаблоне этот результат Вы отображаете пользователю... перед этим можно его обработать - см. ответ на пунтк 1 :)
Помогите Microsoft в борьбе с пиратскими версиями Windows — установите своим друзьям Linux! :)
Аватар пользователя
Berg
Модератор
Модератор
 
Сообщений: 619
Зарегистрирован: 30 окт 2008, 00:11
Откуда: Тьмутаракань :)
Благодарил (а): 4 раз.
Поблагодарили: 3 раз.
Блог (статьи): Просмотреть
Пункты репутации: 8
Berg doesn't have reputation

След.

Вернуться в Решаемые задачи и проблемы



Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1