GreatWeb.RU
- Портал продвинутых юзеров.
Только здесь, все о веб-дизайне, раскрутке, выбору хостинга
и не только...
Читайте здесь последние новости Инетрнет!
Форум
продвинутых юзеров. Отличный форум! Задавайте абсолютно
любые вопросы, вам обязательно ответят и помогут решить Ваши
проблемы.
Участвуйте в опросе на нашем
форуме: "Лучший
сайт Рунета" в разделе "Оценка сайтов",
докажите, что Ваш сайт - лучший!
Если Вы еще не зарегистрировались, то Вам сюда.
.::
Использование шаблонов в PHP4
Многие программеры сталкивались
с проблемой, когда дизайнеру "нужна свобода" в написании
html, а программеру "чистота" кода :) У меня такое
приключилось при написании виртуального веб-магазина. В общем,
недолго думая я стал искать различные PHP-классы для создания
"динамических сайтов" с использованием так называемых
шаблонов. И нашел один, который отвечал всем моим требованиям,
но слишком уж он оказался "большим и тяжелым". Называется
этот класс FastTemplate (уж не помню, где я его скачал). Недолго
думая, я решил написать свой класс, взяв за основу функциональность
FastTemplate. Мои результаты в написании своего класса получились
практически такими как у FastTemplate, но, как мне кажется,
ни чуть не хуже (прим.: код я не копировал, а создавал сам
с нуля).
Итак, для начала работы Вам необходимо скачать мой класс template.
Скачали? Теперь можно пробовать на простом примере. Сделаем
пример листинга файлов текущего каталога с подсчетом кол-ва
байт каждого файла, при этом динамически создав таблицу. Итак,
создайте следующие файлы:
$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()
// Вывести на экран
function printit()
Если возникнут какие-либо комментарии, пишите на null@magelan.ru.
Также выслушаю замечания и поправки.
Огромное спасибо Fil (fil@apb.farlep.net) за некоторые дополнения
и замечания :) И всем тем, кто откликнулся!