Главная » Полезные статьи » Язык PHP » Использование шаблонов в PHP4
Распечатать статью

Использование шаблонов в 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">&nbsp;</td> <td class="th" style="background-color:#000000; color:white">&nbsp;<!-- TOTAL -->&nbsp;</td> </tr> </table></div> </body> </html>

 

rows.htm

 

<tr> <td align="right" class="th" style="background-color:<!-- COLOR -->; color:black">&nbsp;<!-- PWD -->&nbsp;</td> <td class="th" style="background-color:<!-- COLOR -->; color:black">&nbsp;<!-- FILESIZE -->&nbsp;</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() // Вывести на экран function printit()

Если возникнут какие-либо комментарии, пишите на null@magelan.ru. Также выслушаю замечания и поправки.
Огромное спасибо Fil (fil@apb.farlep.net) за некоторые дополнения и замечания :) И всем тем, кто откликнулся!

Источник: internet-technologies.ru

Вы можете оставить комментарий, или обратную ссылку на Ваш сайт.

Оставить комментарий

Похожие статьи