среда, 30 января 2008 г.

Веб-программирование на perl и шаблоны html страниц

Как я уже не раз замечал, обычно всякий веб-программист на perl проходит в своём развитии следующие стадии:

  1. Шаблоны станиц не используются. Характерно для начинающих, совсем зеленых ещё программистов. Вывод страниц формируется непосредственно внутри скрипта, примерно следующим образом:

    my $title = 'Hello world';
    print "Content-type: text/html\n\n";
    print "<html><head><title>$title</title></head>";

    Проект начинает расти и программист замечает, что становится неудобно вносить изменения в дизайн страницы. Редактирование исходного кода программы нелогично, ведь алгоритм работы остается неизменным! Работа с html тегами осложнена, они же встаиваются в синтаксис другого языка, появляется избыточный синтаксический мусор. Про разделение труда на программиста и верстальщика и вообще говорить нечего, здесь оно невозможно. Так программист приходит к следующей стадии.

  2. Самописная шаблонная система. Теперь вывод страниц формируется при помощи отдельной функции. Шаблон загружается из внешнего файла. С помощью регулярных выражений в нем организуется поиск и замена фрагментов кода, например специально помеченных комментариев:

    <table>
        <tr>
            <td><img src="logo.gif"></td>
            <td><!-- $TopMenu --></td>
        </tr>
        <tr>
            <td><!-- $LeftMenu --></td>
            <td><!-- $Content --></td>
        </tr>
    </table>

    Иногда реализуется функциональность вставки других файлов в шаблон (Include). По сравнению с начальным вариантом — это большой шаг вперед, программист освобождается от большинства описанных недостатков. Это уже не «ходьба пешком», но ещё и не «езда на лимузине». Обычно собственная шаблонная система работает неоптимально и не предоставляет многих возможностей разработчику. Многие программисты надолго, если не на всегда, застревают на данной стадии и необоснованно гордятся своими поделиями. Другие же обрашаются к:

  3. Одна из общепризнанных шаблонных систем. От самописной системы они отличаются возможностями:

    • Полное разделение логики программы и внешнего вида страницы. Весь html код находится в шаблоне, скрипт сам не выдает ни одного тега.
    • Условные вставки. Фрагмент шаблона появлется на странице при выполнении какого-либо условия.
    • Обработка циклов или массивов переменных. Например, к элементам массива может быть применена одинаковая разметка и сформирована html таблица.
    • Дополнительные возможности — кеширование шаблонов и/или сгенерированных страниц, подключение пользовательских плугинов/фильтров.
    • Годы поддержки и развития, хорошее быстродействие.

    В мире perl наиболее известными шаблонными системами являются:

Выбор конкретной системы — вопрос личных вкусов и предпочтений, я использую HTML::Template. Она мне нравится за простой язык шаблонов, напоминающий html теги, без попыток создать новый язык программирования. Но подробный рассказ о этой шаблонной системе — тема для отдельной статьи. В завершение хочу заметить что применять шаблоны можно не только для создания html страниц. На CPAN присутствуют модули для создания excel и pdf документов из xml шаблонов. Пример создания excel таблицы на perl из xml шаблона мною был уже описан.

6 комментариев:

beshenov.ru комментирует...

Последней стадией бывает XSLT.

vadiml комментирует...

А если сразу стал использовать Mason -- это как называется?

xeim комментирует...

Видимо рядом оказался perl гуру, который уже использовал Mason :-)

Анонимный комментирует...

А нельзя как в рнр?
<title><?php get_title(); ?></title>

xeim комментирует...

Можно, но я противник такого подхода, поэтому ничего не писал про него. Фактически мы опять получим первую стадию, когда оформление станицы смешано с кодом скрипта.

guruperl комментирует...

За выбор HTML::Template уважаю. Сам использую его очень давно и всем советую. Абсолютно не нагруженный излишними возможностями. Очень быстрый в работе и в изучении.