[ главная ]   [ рейтинг статей ]   [ справочник радиолюбителя ]   [ новости мира ИТ ]



Ответов: 0
25-02-12 07:01







   Web - программирование
PHP


ASP






XML



CSS

SSI





   Программирование под ОС











   Web - технологии








   Базы Данных









   Графика






Данные



Web - программирование / PHP /

Использование шаблонов в PHP4

Денис Давыдов
(http://www.webscript.ru/)

Многие программеры сталкивались с проблемой, когда дизайнеру "нужна свобода" в написании 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

 <p><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>
</p>

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])



Комментарии

 Ваш комментарий к данному материалу будет интересен нам и нашим читателям!



Последние статьи: Web - программирование / PHP /

GTK+: перспективы развития
02-03-2010   

Библиотека GTK+ прошла долгий путь развития и сейчас очень популярна. GNOME, одна из ведущих оконных сред, использует GTK+ почти исключительно, GIMP построен на GTK+, множество коммерческих разработчиков ПО, таких как Abobe, NVidia и VMware, решили использовать эту библиотеку в качестве графической основы для своих продуктов... подробнее

Кол. просмотров: общее - 2071 сегодня - 0

Новостной портал
13-11-2009   

Slashdot.org – популярный новостной портал с посещаемостью 50 млн. человек в месяц. Авторы проекта добились такого успеха, предоставляя пользователям свежие и интересные новости из мира IT... подробнее

Кол. просмотров: общее - 2326 сегодня - 0

Параллельное выполнение скриптов может нарушить целостность информации в файлах
13-11-2009   

Здесь рассматривается вопрос, что бывает, если запустить некий скрипт почти одновременно (что происходит, например, при большой нагруженности сервера) несколько раз, т.е. запустить несколько копий одного и того же скрипта. И к чему это может привести... подробнее

Кол. просмотров: общее - 2139 сегодня - 2

No spam.php
10-11-2009   

...и снова о спаме. Кто о нем только не писал, и все писали, что это плохо и ай-яй-яй. Я не буду оригинальничать, и тоже скажу – это плохо. Это ай-яй-яй. Как бороться со спамерами со своей стороны... подробнее

Кол. просмотров: общее - 1969 сегодня - 0

Начинаем работу с рисунками в php для Windows
10-11-2009   

Эта статья даст вам общее представление о том, как создавать, обрабатывать и выводить рисунки в PHP4 для Windows... подробнее

Кол. просмотров: общее - 2342 сегодня - 0



  пїЅ WWW.COMPROG.RU пїЅ пїЅпїЅпїЅ пїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ - 2009 | Designed and Powered by Zaipov Renat | пїЅпїЅпїЅпїЅпїЅпїЅ