Использование модуля для работы с шаблонами.

Разобравшись с основными принципами работы с шаблонами в perl, рассмотрим еще один способ облегчения жизни программисту. Основной инструментарий - новая версия модуля STemplate.

Очень удобно, было бы обрабатывать шаблоны на лету, по аналогии с JSP, PHP и ASP. Это можно осуществить двумя способами: в случае с mod_perl описать модуль как handler(сам модуль потребует некоторого изменения, возможно в следующей статье я опишу это), и второй способ - с помощью .htaccess установить обработчик, в котором будет загружен модуль STemplate. Рссмотрим более подробно второй способ.

Для начала выберем расширение для наших шаблонов. Пусть это будет .psp (perl server pages). Таким образом .htaccess будет выглядеть следующим образом.

AddType application/x-psp psp

Action application/x-psp /cgi-bin/psp_parser.cgi

DirectoryIndex index.psp

Первая строка устанавливает тип mime для нового типа файлов. Во второй описан скрипт-обработчик шаблонов. Важный момент! Полный путь запрашиваемого файла *.psp для psp_parser.cgi будет находиться в $ENV{'PATH_TRANSLATED'}. Третья строка устанавливает файл загружаемый по умолчанию.

Теперь рассмотрим psp_parser.cgi

use STemplate;

my $temp = new STemplate;

print "Content-type: text/htmlnn";

$ENV{'PATH_TRANSLATED'} =~ m|([w/]+)/([^/].*?)$|;

my $dir = $1;

my $file = $2;

my %data = (ID => '1');

$temp->template($dir,$file,%data);

Модуль должен находится в той же директории, что и psp_parser.cgi.

В шаблонах psp можно подключать модули, соединяться с БД и т.д. При открытии файлов рекомендуется задавать абсолютный путь. Вместо заключения приведу пример простейшей psp страницы. А уже просмотрев код, Вы сами сможете сделать вывод о применении данной технологии.

<%

use CGI;

$query = new CGI;

$hello = $query->param('hello');

%>

<HTML>

<TITLE>test psp</TITLE>

<BODY bgcolor=#000000 text=#ffffff>

<CENTER><H1><% print "Hello: ".$hello."<BR>" %></H1></CENTER>

<psp: [for ($j = 1; $j <= 25; $j++)]>

<h1> $j: It Worked!- $hello </h1>

</psp>

<psp: [ ]>

<h3> OK </h3>

</psp>
</BODY>
</HTML>