Отправляет email-рассылки с помощью сервиса Sendsay

Все о PHP и даже больше

  Все выпуски  

Все о PHP и даже больше


Информационный Канал Subscribe.Ru

Все о PHP и даже больше...

.:: Путь от начинающего до эксперта ::.

# 9
6/2003

19 марта 2003г.

Проект сайта GreatWeb.RU


    В этом выпуске:

  • Наши проекты
  • Использование шаблонов
  •   Ссылки Вебмастеру:

  • Лучший хостинг
  • Раскрутка
  • Советы Web-мастеру
  • Книги по программировании
  • WEB-браузеры
  • Фоны
  • Скрипты
  • HARDWARE
  • Партнерская программа
  • DwebHost.RU

  • Привет программер!

    :.:: Наши проекты:

     

    GreatWeb.RU - Портал продвинутых юзеров. Только здесь, все о веб-дизайне, раскрутке, выбору хостинга и не только...
    Читайте здесь последние новости Инетрнет!

    Форум продвинутых юзеров. Отличный форум! Задавайте абсолютно любые вопросы, вам обязательно ответят и помогут решить Ваши проблемы.

    Участвуйте в опросе на нашем форуме: "Лучший сайт Рунета" в разделе "Оценка сайтов", докажите, что Ваш сайт - лучший!
    Если Вы еще не зарегистрировались, то Вам сюда.

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

    Большое спасибо Club of the developers PHP (Денис Давыдов)


    © 2002-2003 Copyright by GreatWeb Design
    Копирование материалов рассылки возможно только в случае явного указания на сайт "GreatWeb.RU" как на источник информации.



    http://subscribe.ru/
    E-mail: ask@subscribe.ru
    Отписаться
    Убрать рекламу

    В избранное