Разработка шаблонов на php — HackZona.Ru

Разработка шаблонов на php

Разработка шаблонов на php

Тип статьи:
Со старой ХакЗоны.
Источник:
# Вступление.

Доброго времени суток.
В этой статье я хочу рассказать об реализации шаблонов в php. Хоть идея не нова, но я решил описать принцып этого метода на примере своего движка..
Для начала скажу что тот пример который я опишу в этой статье является не очень удобным для крупных web-приложений, а как раз подходит для маленьких движков.

# Использование шаблонов.

Прежде чем использовать шаблоны, подумайте, действительно ли они вам нужны? На данный момент существует огромное количество коммерческих вариантов шаблонов. Все они работают по одному принципу (значение, замена), но имеют огромное количество наворотов, таких как автоматическое изменения регистра переменных, поиск по регулярным выражениям и т.д., все это конечно хорошо и легко реализуемо. Но что делать если вы не нуждаетесь в мощных шаблонизатарох, в которых просто нет особой необходимости. Написать свой простенький, но действительно удобный именно для вашего проекта.
Также в сети можно найти множество бесплатных вариантов шаблонов, но все они много весят и работают не слишком быстро.
Я предлагаю вам простой каркас «шаблонов» на php, с его помощью можно сделать свой шаблонизатор, со всеми необходимыми вам функциями.

# Реализация.

Итак, для начала создадим 3 файла:
index.php [главная страница]
main.class.php [класс шаблонизатора]
main.tpl [файл шаблона]

Исходник main.class.php

___code#

$val()
{
$var = '{'.$key.'}';
$read = str_replace($var,$val,$read);
}
Return $read;
}
}
}
$SKIN = new Skin;
?>
#code___

Пройдемся по функциям скрипта.

* Функции start() и end() — функции подсчитывающие время выполнения скрипта.

* Функция parse принимает 2 значения. Это файл шаблона (main) и массив спецтэгов {TITLE, {DATE}, {TEXT}. Она заменяет тэги вида {TAG} на установленные значения.
Итак, главный класс готов. Теперь напишем основной файл, который будет вызывать все эти функции и выдавать результат на страницу.

Исходник index.php
___code#
start();

// Определяем переменные [например берем из бд]
$title = 'main';
$date = '13.12.2006';
$text = 'бла бла...';

// Парсинг файла шаблона main.tpl
echo $SKIN->parse('main', array('TITLE' => $title, 'DATE' => $date, 'TEXT' => $text, 'DEBUG' => $FUNC->end($s)));

// завершаем сжатие
ob_end_flush();
?>
#code___

Это скрипт, запускающий класс и выводящий результат его работы на экран.

Теперь заполним файл main.tpl

Исходник main.tpl

___code#



site.ru [ {TITLE} ]





[ {TITLE} ]


{DATE}


{TEXT}




#code___

Тут приведен обычный HTML код. В данном файле можно найти переменные вида {TITLE}. Это как раз именно те переменные которые мы будем заменять на нужное нам значение.

# Заключение.
В этой статье я описал как можно быстро написать свой простенький шаблонизатор.
Надеюсь что статья будет вам полезна.
Нравится
Не нравится

9 комментариев

17:07
Проблема вот в чем, в статье присутствует html и php код. Так вот, ваш
портал исполняет html.
Если вы уже заметили, он выполнился и вместо статьи с сорсами
получилось черт знает что..
Прошу принять меры по фильтрации html тэгов.
Кстати, это уже не первый баг замеченый мной. Первый был у вас на
форуме.
01:21
p-range, при публикации статьи ты должен был выбрать "Только текст". Баг скорее в тебе, чем в портале). Хотя этот фильтр несовершенен. Он часто коверкает код, привыкай)). Молодец, продолжай писать статьи.
13:57
VladUha, именно "Только текст" я и выбрал =/ так что баг все-таки не во мне а в портале..
01:29
я писал про такое уже как больше года назад.Боян =)
16:59
а не проще так?
main.php:


main.tpl:
bla bla bla


bla bla bla

и ничего писать толком не надо, ничего заменять, все само сделается ;)
17:01
гениально... интересно, кро догадался из комментов вырезать все спец символы, вместо замены их html последовательностями.... ведь функция прям готоавя есть!!!! ((((
21:02
а обещанного двига так и не видно =
02:37
изобретение колеса и не более того. Чем-же смарти так не угодил? Или лень доку на него полистать?
03:36
да и статья сперта у кого то... где то я такое видел. хоть бы имена файлов поменял, что ли