dk lab
Homepage Карта сайта Версия для печати Scriptor&Pager:
. .
Использование системы Scriptor
Pager v1.0 (техническое описание)
dkLab | В процессе | Scriptor&Pager | Использование системы Scriptor
Система Orphus

Краткость - сестра не только сами знаете кого...
Автор неизвестен

Далее следует предварительное описание системы Pager - универсального шаблонизатора, предельно облегчающего работу дизайнеров и программистов - можно прочитать здесь.

Дмитрий Котеров

На странице:

1. Введение
2. Настройка системы Scriptor
3. Файл config.pl
4. Файл readme.txt из директории обработчиков
5. Примеры обработчиков (файл defhand.pl)


1. Введение

Приведенный ниже документ предназначен скорее для ознакомительных целей, потому что система Pager&Scriptor находится пока в стадии разработки.
Система Scriptor представляет собой простейший менеджер обработчиков документов, вроде системы handler-ов Apache. Отличие от последней заключается в том, что один документ может быть обработан сразу несколькими обработчиками, поставляющими информацию друг другу наподобие конвейера.
Сама по себе, без интеллектуальных обработчиков, система Scriptor вряд ли будет использоваться - разве что для поддержки тэгов внедрения <? и ?>, то есть эмуляции EPerl. Поэтому основное внимание будет обращено на систему Pager - универсальный шаблонизатор, высокопроизводительный (даже быстрее, чем тот EPerl, который поддерживается одним из стандартных обработчиков Scriptor-а!) и в то же время универсальный и простой в обращении. Весь проект "Лаборатория dk" построен именно на основе этой системы - связке Scriptor+Pager, это - один сплошной пример использования системы. Вы можете посмотреть, как на самом деле выглядят страницы сайта, посетив эту ссылку (смотрите Document source).
Краткое описание системы Pager

2. Настройка системы Scriptor

Для нормальной работы системы нужно сделать следующее:

3. Файл config.pl


###########################################################################################
# Наш девиз - минимум настроек и максимум функциональности. Так что все будет 
# работать даже  в том случае, если этот файл отсутствует - только при этом будет 
# вызываться всегда стандартный обработчик.
###########################################################################################


# Здесь можно перечислить директивы "use lib" для подключения нужных директорий библиотек.
# Эти библиотеки будут автоматически подключаться при загрузке любого файла.
# Указанные директории не обязаны существовать, так что можно записать здесь строки 
# "на будущее".
# Если Вы не знаете, что такое и зачем это нужно, просто ничего не трогайте.
use lib ($ENV{DOCUMENT_ROOT}."/dklab/_Kernel/lib");
use lib ($ENV{DOCUMENT_ROOT}."/dklab/_Kernel");
use lib ($ENV{DOCUMENT_ROOT}."/dklab/_Kernel/iface");


# Каждому расширению сопоставлен один или несколько обработчиков. Обработчик - это просто
# специальным образом написанная функция, которая добавлена в таблицу обработчиков.
# Каждой функции соответствует уникальный идентификатор - имя обработчика. Именно эти 
# идентификаторы и перечисляются в массиве ниже.
# Если для расширения заданы несколько обработчика, то они выполняются один за другим.
# Например, можно сначала запустить шаблонизатор, а затем результат проработать через
# обработчик SSI.
# В настоящий момент поддерживаются следующие обработчики:
#       default      - обработчик по умолчанию (просто вывод текста)
#       eperl        - шаблонизатор, аналог ePerl
#       pager        - расширенный шаблонизатор Pager
#       perl         - просто скрипт на Perl
#       ssi          - проработка SSI (пока не доделан)
%Extension = (
    html => ["pager"],
    cgi  => ["perl"],
    pl   => ["perl"],
    ptl  => ["eperl"]
    # можете добавить сюда обработчик (по аналогии)
);


# Здесь можно указать текст, который будет выводиться в конце каждой страницы.
# А можно и не указывать - тогда не будет выводиться ничего.
$FinishText="\n";

4. Файл readme.txt из директории обработчиков


В этой директории хранятся некоторые обработчики, которые, как мне кажется,
используются не столь часто. Если же Вы хотите добавить какой-то новый
обработчик и уверены, что на его поиск в этой директории потребуется чересчур 
много времени, добавьте его в ../defhand.pl (но я категорически не
советую Вам этого делать!).

Чтобы добавить свой собственный обработчик, нужно:
1. Прочитать defhand.pl, чтобы разобраться в правилах написания обработчика. 
2. Придумать для обработчика уникальное имя из английских букв 
   (далее будем предполагать, что выбранное имя - имя_обработчика, хотя
   оно и недопустимо).
3. Написать файл имя_обработчика.pl и поместить в него код обработчика,
   а также вызов AddHandler(имя_обработчика,функция), чтобы его зарегистрировать.
   Примеры можно найти в этой директории.
4. Поместить этот файл в директорию handlers. Еще раз внимание: имя файла должно
   соответствовать имени обработчика, плюс расширение pl.
5. Указать в файле config.pl, какому расширению сопоставить новый обработчик.
   Там написано, как это сделать.

5. Примеры обработчиков (файл defhand.pl)


# Этот файл загружается всегда первым. В нем перечисляются стандартные обработчики, 
# которые, скорее всего, будут испрользованы в первую очередь.
# Внимание: я не советую менять этот файл... Если понадобится добавить свой 
# собственный обработчик, лучше сделать это в директории handlers. 
# В файле handlers/readme.txt написано, как.


#----- Обработчик по умолчанию - просто выводит текст
sub __DefaultHandler($$$)
{   my ($Input,$h,$ScriptName)=@_;
    echo $Input;
}
# Регистрируем этот обработчик под именем default
AddHandler("default",\&__DefaultHandler);



#----- Обработчик perl-скриптов. Подразумевается, что вывод скрипта идет через echo.
sub __PerlHandler($$$)
{   my ($Input,$h,$ScriptName)=@_;
    eval("\n#line 1 \"$ScriptName\"\npackage main; $Input"); return;
}
AddHandler("perl",\&__PerlHandler);


use Pager;
#----- Обработчик Pager
sub __Pager
{   my ($Input,$h,$ScriptName)=@_;
    my $f=PagerFile->new($ScriptName);
    print $f->RunBlock("Output");
}
AddHandler("pager",\&__Pager);

13 июня 2000, 17:21
Дмитрий Котеров
dkLab, ©1999-2016