Понедельник, 15.06.2026, 19:30
Приветствую Вас Гость | RSS
Поиск по каталогу
Главная страница | Каталог статей | Регистрация | Вход

Информационные технологии
Форма входа
Меню сайта

Категории каталога
php [246]
perl [1]
perl
ASP [1]
AJAX [0]

Друзья сайта

Наш опрос
Оцените мой сайт
Всего ответов: 69

Начало » Статьи » Web программирование » php

Использование шаблонов в 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) за некоторые дополнения и замечания :) И всем тем, кто откликнулся!
Категория: php | Добавил: freeone (10.05.2007) | Автор: Давыдов Денис
Просмотров: 568 | Рейтинг: 5.0 |

Всего комментариев: 0
Имя *:
Email *:
Код *:

Copyright Информационные технологии © 2006