Справочник функций

Ваш аккаунт

Логин:
Пароль:
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:
Убрать блок ВКонтакте навсегда

Последние темы форума

Показать новые сообщения »

Почтовая рассылка



Подписчиков: 19086
Последний выпуск: 12.01.2012

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

Денис Давыдов, 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">&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()

// Вывести на экран.
// В v1.02 - если указан $tag, выводит тег $this->assign["$tag"]
function printit([$tag])

Если возникнут какие-либо комментарии, пишите на null@magelan.ru. Также выслушаю замечания и поправки.

Огромное спасибо Fil (fil@apb.farlep.net) за некоторые дополнения и замечания :) И всем тем, кто откликнулся!

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

Оставлять комментарии могут только зарегистрированные пользователи.

Если вы не являетесь зарегистрированным пользователем, то вам необходимо зарегистрироваться. Регистрация бесплатна. Если вы уже зарегистрированы на CodeNet, то вам необходимо ввести логин и пароль в верхней (Alt-U) части страницы.

Комментарии

1. omgnoob / 06 февраля 2008, 19:27:33
Мне нравитсяМне не нравится

$t->assign("LOLO", include "lolo.php");
Если вводишь функцию такого вида, то вверху шаблона автоматически вставляется, в чем проблема? оО А вообще, интересная работа

2. Arsench / 11 сентября 2006, 20:58:44
Мне нравитсяМне не нравится

a gde templates.php kogda napisano requers templates.php

3. леша / 10 января 2006, 15:09:22
Мне нравитсяМне не нравится

Вариант неплохой.
Тем кому нужен более серьезный механизм шаблонов очень советую http://smarty.php.net/manual/ru/ - Смарти. Шустрый, мощный и удобный.

4. Ton / 07 мая 2005, 00:24:52
Мне нравитсяМне не нравится

Все отлично фунциклирует! Мне понравилось :)

5. Timon / 25 апреля 2005, 00:43:50
Мне нравитсяМне не нравится

Скачал, скопировал, попробовал. Заработало "с полпинка" без каких либо дополнительных телодвижений. Прочитал коммент Игоря от 14-04-05 и рашил дать своего :)

6. Игорь / 14 апреля 2005, 14:06:30
Мне нравитсяМне не нравится

Скачал, скопировал, попробовал. Ни хрена не заработало. Разочаровался и стёр.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог