Исходники
Статьи
Языки программирования
.NET Delphi Visual C++ Borland C++ Builder C/С++ и C# Базы Данных MySQL MSSQL Oracle PostgreSQL Interbase VisualFoxPro Веб-Мастеру PHP HTML Perl Java JavaScript Протоколы AJAX Технология Ajax Освоение Ajax Сети Беспроводные сети Локальные сети Сети хранения данных TCP/IP xDSL ATM Операционные системы Windows Linux Wap Книги и учебники
Скрипты
Магазин программиста
|
Шаблоны документов и PerlВсегда, когда нам необходимо написать CGI скрипт на Perl мы сталкиваемся с тем, что скрипт должен возвращать пользователю некоторый HTML код. Как правило, этот код вставляется непосредственно в код самого скрипта. Данный подход не совсем удобен в том плане, что при изменении дизайна сайта, как правило, приходится изменять текст скрипта. Вы наверно замечали, что очень часто "скриптовая" часть сервера несколько отличается от остальной части сайта. Происходит это именно по той причине, что в самом коде скрипта довольно сложно изменять HTML фрагменты. Где-то да просчитаетесь. Второй, наиболее популярный, вариант - это вынесение переменных с HTML в отдельный файл. Это конечно облегчает жизнь, но не дает полной свободы. Предложенный ниже скрипт состоит всего лишь из 30 строк, но зато он решает все описанные выше проблемы. Итак, для начала решим, что все наши HTML данные будут храниться в файле - шаблоне. Назовем его html.dot Формат файла будет следующий: #! Название_фрагмента # Комментарий Любой текст #! Название_второго_фрагмента Еще текст Кроме того, в тексте можно использовать такие конструкции:
Теперь напишем функцию, которая читала бы читала этот файл, преобразовывала его (делала подстановки фрагментов) и сохраняла фрагменты в хеше. При этом, имена элементов хеша, будут соответствовать именам фрагментов. sub read_from_dot{ 1 my (@lines, $line, $curname); 2 open (F, "$_[0]") || die "Can't open file $_[0]"; 3 while ($line=
Процедура рекурсивной подстановки
Вот и все. У нас готов глобальный хеш %DOT, в котором содержатся все наши шаблоны. Возьмем для примера такой файл-шаблон: #! MAIN ########################################### @#TITLE@ Это главная страница #! STYLE ########################################### <STYLE> H1 {color: red} </STYLE> #! TITLE # # @STRING@ - имя ########################################### <HTML> <HEAD> @#STYLE@ <TITLE>@STRING@</TITLE> </HEAD>После обработки получим хеш из трех элементов MAIN, STYLE, TITLE. Ну и наконец напишем функцию, которая будет подставлять значения переменных. Что бы переменные не пересекались с переменными, используемыми в скрипте, будем хранить их в хеше %DOT_VAL. sub insert_values{ 1 if ($_[0]){ 2 $_[0] =~ s/@(.[^@]*)@/$DOT_VAL{$1}/g; } else{ 5 foreach (keys %DOT){ 6 $DOT{$_} =~ s/@(.[^@]*)@/$DOT_VAL{$1}/g; } } }
read_from_dot("html.dot"); $DOT_VAL{STRING}="Welcome to our site!!!"; insert_values(); print $DOT{"MAIN"}; |
Форум Программиста
Новости Обзоры Магазин Программиста Каталог ссылок Поиск Добавить файл Обратная связь Рейтинги
|