ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > ИНФО > Статьи > Авторские статьи
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Разработка шаблонов на php
  #1  
Старый 20.12.2006, 02:47
Аватар для p-range
p-range
Участник форума
Регистрация: 05.02.2006
Сообщений: 168
Провел на форуме:
749524

Репутация: 715
Отправить сообщение для p-range с помощью ICQ
По умолчанию Разработка шаблонов на php

# Вступление.

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

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

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

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

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

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

Цитата:

<?php
// класс для работы со временем
Class Main {
// start() и end() - функции подсчета времени выполнения скрипта
Function start()
{
$stime = microtime();
$stime = explode(' ',$stime);
$stime = $stime['1'] + $stime['0'];
Return $stime;
}
Function end($stime)
{
$etime = microtime();
$etime = explode(' ',$etime);
$etime = $etime['1'] + $etime['0'];
$ltime = $etime - $stime;
$ttime = round($ltime,3);
Return $ttime;
}
}
$FUNC = new Main;
// класс парсинга шаблонов
Class Skin {
// Функция парсинга файлов шаблонов
Function parse($file, $data = array())
{
Global $FUNC;
Global $skin;
if (!is_array($data))
{
echo 'Переменная $date не массив';
} else {
// открываем файл $file и заменяем теги {TAG} на значение
$fp = fopen($file.'.tpl','r');
$read = fread($fp,filesize($file.'.tpl'));
fclose($fp);
foreach($data as $key => $val)
{
$var = '{'.$key.'}';
$read = str_replace($var,$val,$read);
}
Return $read;
}
}
}
$SKIN = new Skin;
?>
Пройдемся по функциям скрипта.

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

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

Исходник index.php
Цитата:
<?php
// Start GZIP compression
ob_start('ob_gzhandler');

// Инклуд вспомогательных файлов
include('main.class.php');

// Start timing
$s = $FUNC->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();
?>
Это скрипт, запускающий класс и выводящий результат его работы на экран.

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

Исходник main.tpl

Цитата:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>site.ru [ {TITLE} ]</title>
<body bgcolor="#000000">
<br>
<table border="0" cellspacing="0" cellpadding="5" align="center" width="70%">
<tr>
<td><b>[ {TITLE} ]</td>
</tr>
<tr>
<td><small>{DATE}</small></td>
</tr>
<tr>
<td>{TEXT}</td>
</tr>
</table>
</body>
</html>
Тут приведен обычный HTML код. В данном файле можно найти переменные вида {TITLE}. Это как раз именно те переменные которые мы будем заменять на нужное нам значение.

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

Последний раз редактировалось Mobile; 02.01.2007 в 21:49..
 
Ответить с цитированием

  #2  
Старый 20.12.2006, 07:54
Аватар для antiforum
antiforum
Новичок
Регистрация: 21.11.2006
Сообщений: 10
Провел на форуме:
42244

Репутация: 2
По умолчанию

Неплохая статья.
 
Ответить с цитированием

  #3  
Старый 16.08.2007, 23:40
Аватар для M-K
M-K
Новичок
Регистрация: 16.08.2007
Сообщений: 13
Провел на форуме:
27993

Репутация: 1
По умолчанию

Статья хорошая. Но это только НАЧАЛО. Отправная точка. Очень хотелось посмотреть примеры применения или более сложные шаблонизаторы, о которых упоминалось общими словами в начале статьи.
 
Ответить с цитированием

  #4  
Старый 17.08.2007, 09:36
Аватар для groundhog
groundhog
Познавший АНТИЧАТ
Регистрация: 12.05.2007
Сообщений: 1,235
Провел на форуме:
2238549

Репутация: 1318


Отправить сообщение для groundhog с помощью ICQ
По умолчанию

antiforum, M-K, мне интересно, говоря "хорошая статья" вы на чём основывались? Статья (я бы это так и не называл), пускай не "говно", но всё равно - мусор.

p-range, то что ты сотворил никакой не шаблонизатор... Обычный парсер с заменой, который в реальной жизни не найдёт никакого применения... Нету циклических интераций, нету условных итераций... А использование ООП-парадигмы и глобальных переменных это вообще нонсенс... Радует, конечно, что человек обладает некоторыми знаниями в PHP, но не стоит бросаться и "релизить" вышепреведённый детский сад... Всё имхо...
 
Ответить с цитированием

  #5  
Старый 17.08.2007, 10:16
Аватар для nerezus
nerezus
Pagan Heart
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме:
6490435

Репутация: 2290


Отправить сообщение для nerezus с помощью ICQ
По умолчанию

А зачем такое делать, если можно воспользоваться PHP в качестве шаблонизатора? 0_0

Цитата:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>site.ru <?php echo $TITLE ?></title>
<body bgcolor="#000000">
<br>
<table border="0" cellspacing="0" cellpadding="5" align="center" width="70%">
<tr>
<td><b><?php echo $TITLE ?></td>
</tr>
<tr>
<td><small><?php echo $DATE ?></small></td>
</tr>
<tr>
<td><?php echo $TEXT ?></td>
</tr>
</table>
</body>
</html>
Или даже так: <?=$someVar?>, но такое лучше не делать, не везде работает.
 
Ответить с цитированием

  #6  
Старый 17.08.2007, 10:22
Аватар для groundhog
groundhog
Познавший АНТИЧАТ
Регистрация: 12.05.2007
Сообщений: 1,235
Провел на форуме:
2238549

Репутация: 1318


Отправить сообщение для groundhog с помощью ICQ
По умолчанию

nerezus, что значит не везде работает? Всё норм...

p-range, учитесь! Дёшево и сердито, и прикопаться не к чему...
 
Ответить с цитированием

  #7  
Старый 17.08.2007, 11:01
Аватар для Дикс
Дикс
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
Провел на форуме:
2209675

Репутация: 537


Отправить сообщение для Дикс с помощью ICQ
По умолчанию

Да, вот nezerus хорошо написал. Я сам сайт с такими шаблонами делал и он у меня отлично работал. А из статьи p-range я научился разве что gZip использовать = )
 
Ответить с цитированием

  #8  
Старый 17.08.2007, 12:10
Аватар для nerezus
nerezus
Pagan Heart
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме:
6490435

Репутация: 2290


Отправить сообщение для nerezus с помощью ICQ
По умолчанию

Цитата:
nerezus, что значит не везде работает? Всё норм...
Значит именно то, что значит.
А еще конкретнее: <? ... ?> работает не везде. Надо юзать <?php ... ?>
 
Ответить с цитированием

  #9  
Старый 17.08.2007, 13:21
Аватар для itsme
itsme
Новичок
Регистрация: 14.08.2007
Сообщений: 4
Провел на форуме:
5562

Репутация: 3
По умолчанию

to groundhog

если в php.ini отключена директива:

short_open_tag

короткий тег работать не будет.
 
Ответить с цитированием

  #10  
Старый 17.08.2007, 13:50
Аватар для GreenBear
GreenBear
наркоман с медалью
Регистрация: 07.05.2005
Сообщений: 3,704
Провел на форуме:
19975136

Репутация: 4536


Отправить сообщение для GreenBear с помощью ICQ
По умолчанию

даже блоков нету. какой нафиг шаблонизатор.
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Books PHP FRAGNATIC PHP, PERL, MySQL, JavaScript 186 21.02.2010 02:41
Books PSalm69 Избранное 248 27.10.2009 04:52
На PHP, как на "Новые ворота"... Mertvii-Listopad Чужие Статьи 7 18.09.2006 12:42
Безопасность в Php, Часть Iii k00p3r Чужие Статьи 0 11.07.2005 19:02
Защищаем Php. Шаг за шагом. k00p3r Чужие Статьи 0 13.06.2005 11:31



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ