|
Использование шаблонов в PHP4
Многие программеры
сталкивались с проблемой, когда дизайнеру "нужна свобода" в
написании html, а программеру "чистота" кода :) У меня такое
приключилось при написании виртуального веб-магазина. В общем,
недолго думая я стал искать различные PHP-классы для создания
"динамических сайтов" с использованием так называемых шаблонов. И
нашел один, который отвечал всем моим требованиям, но слишком уж он
оказался "большим и тяжелым". Называется этот класс FastTemplate (уж
не помню, где я его скачал). Недолго думая, я решил написать свой
класс, взяв за основу функциональность FastTemplate. Мои результаты
в написании своего класса получились практически такими как у
FastTemplate, но, как мне кажется, ни чуть не хуже (прим.: код я не
копировал, а создавал сам с нуля).
Итак, для начала работы
Вам необходимо скачать мой класс template.
Скачали? Теперь можно пробовать на простом примере. Сделаем
пример листинга файлов текущего каталога с подсчетом кол-ва байт
каждого файла, при этом динамически создав таблицу. Итак, создайте
следующие файлы:
main.htm
<html> <head> <title><!-- ABOUT
--></title> <link rel="stylesheet"
type="text/css"
href="/styles.css"> </head> <body>
<p
align="center" class="b"><!--
ABOUT
--><br> Localtime is
<!-- LOCALTIME
--> </p><br>
<div
align="center"><table STYLE="border-collapse:collapse"
class="th"> <tr> <td colspan="2" class="th"
align="center" style="background-color:#000000;
color:white">File
listing</td> </tr> <!--
TABLE_CONTENT --> <tr> <td
class="th" align="right" style="background-color:#000000;
color:white"> </td> <td class="th"
style="background-color:#000000;
color:white"> <!-- TOTAL
--> </td> </tr> </table></div>
</body> </html>
|
rows.htm
<tr> <td
align="right" class="th" style="background-color:<!-- COLOR -->;
color:black"> <!-- PWD
--> </td> <td class="th"
style="background-color:<!-- COLOR -->;
color:black"> <!-- FILESIZE
--> </td> </tr>
|
index.php
<?php
require
('templates.php'); //
Включаем класс для работы с шаблонами
// Определяем
теги $meta = array( "ABOUT" => ":: template class
example ::", "LOCALTIME" => date("M-d-Y
H:i:s"));
$t = new template;
// Инициализируем файлы и
дескрипторы $t->init(array( index =>
"main.htm", rows => "rows.htm"));
// Устанавливаем
ограничители
(delimiter-ы) $t->delimiters("<!--",
"-->");
//
Определяем теги $t->assign($meta);
$d =
dir(".");
$colors = array("#d4d4d4", "#a0a0a0"); $i =
0; $totalbytes = 0; while ($entry = $d->read())
{ if (preg_match("/^(.|..)$/", $entry)) continue; $color
= $colors[$i]; $t->assign("FILENAME", $entry); // Определяем под тегом
FILNAME имя файла $t->assign("COLOR", $color);
// под COLOR текущий
цвет $t->assign("PWD", realpath ($entry)); // Полный путь if
(($size = filesize($entry)) > 1024) { $totalbytes +=
$size; $size = sprintf("%0.2f Kbytes", ($size /
1024)); } else { $totalbytes += $size; $size .= "
bytes"; } $t->assign("FILESIZE", $size); // связываем с тегом
FILESIZE длинну файла
// Обрабатываем файл с
дескриптором rows, при этом полученные результаты
//
закрепляем под тегом TABLE_CONTENT (путем
добавления) $t->parseit(rows, "TABLE_CONTENT");
$i = (++$i >= count($colors)) ? 0 : $i;
// Под этим тегом у нас
будет общее кол-во байт найденых
файлов $t->assign("TOTAL", ( ($totalbytes >
1024) ? sprintf("%0.2f Kbytes", ($totalbytes / 1024)) :
$totalbytes."
bytes")); }
$d->close();
// Обрабатываем страницу с
дескриптором index. Т.е. при обработке // все попадающиеся теги
будут заменены на определенное
значение. $t->parseit(index);
// Выводим
все $t->printit(); $t->freshall();
?> |
Результаты
выполнения можно увидеть здесь http://null.magelan.ru/php/templates
Данный класс работает очень шустро, обработчик построен на основе
регулярных выражений.
Детальное описание В классе
определенны массивы: $filelist - ассоциативный массив
дексрипторов и файлов $assign - ассоциативный массив
определенных тегов $root - корневой каталог $arr - массив с
результатом $delmiters - ограничители
// init - Инициализация шаблонов
// arr -
ассоциативный массив (см.пример) с дескрипторами и файлами
// root -
корневой каталог, где лежат файлы (по-умолчанию текущий)
// delimit - тут
можно указать ограничитель из двух символов, например "{}"
function init($arr = "", $root = "", $delimit = "")
// Установка
корневого каталога шаблонов function setroot($root = "")
// Добавление
дескрипторов и файлов для работы с шаблонами // list - ассоциативный массив
function listit($list = "")
// Обработка шаблона
// $d -
дескриптор файла ИЛИ МАССИВ! // $temp - обработка в тег $temp
(если не указать, данная ф-ия обработает // декср.файла и добавит его к
массиву с результатами) function parseit($d = "", $temp =
"")
// Получить
обработанный массив, возвращает string // $array - массив
function getparsed($array)
// Указать ограничители
// $d1 - левый,
$d2 - правый //
Например $t->delimiters("<!--", "-->"); function
delimiters($d1 = "", $d2 = "")
// Как listit, только добавить
можно не ассоциативный массив, а // простую строку // $d - дескриптор файла
// $name - имя
файла function addtolist ($d = "", $name = "")
// Используется для
очистки всех массивов в классе function freshall()
// Используется для
очистки результатов обработки // Очищается $arr
function fresh()
// Вывести на экран.
// В v1.02 - если
указан $tag, выводит тег $this->assign["$tag"]
function printit([$tag])
ОГЛВЛЕНИЕ
| |
|
|
| |