Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Программы Обои   Экспорт RSS E-Books
 
 

   Интернет технологии -> 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) за некоторые дополнения и замечания :) И всем тем, кто откликнулся!

Денис Давыдов.
 

 
Интересное в сети
 
10 новых программ
CodeLobster PHP Edition 3.7.2
WinToFlash 0.7.0008
Free Video to Flash Converter 4.7.24
Total Commander v7.55
aTunes 2.0.1
Process Explorer v12.04
Backup42 v3.0
Predator 2.0.1
FastStone Image Viewer 4.1
Process Lasso 3.70.4
FastStone Image Viewer 4.0
Xion Audio Player 1.0.125
Notepad GNU v.2.2.8.7.7
K-Lite Codec Pack 5.3.0 Full


Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
Реклама на сайте. Размещая рекламу у нас, вы получите новых посетителей, которые могут стать вашими клиентами.
 
Это интересно
 

Copyright © CompDoc.Ru
При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.