Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > помогите начать: cgi и HTML-Template


Автор: Xenser 11.3.2005, 18:33
1). Как узнать - с какими параметрами юзер вызывает скрипт? то есть
http://x.ru/a.cgi?var=data1&var2=data2
как обработать var'ы более легким способ чем через QUERY_STRING?

2). Не могу догнать - как оптимально юзать HTML-Template..
Код

<html>
  <head><title><TMPL_VAR NAME=ВРЗМОЖНЫЕ ИЗМЕНЕНИЯ 1></title>
  <body>

  <TMPL_VAR NAME=ВОЗМОЖНЫЕ ИЗМЕНЕНИЯ 2>
  <bla-bla><bla-bla>
  <TMPL_VAR NAME=ВОЗМОЖНЫЕ ИЗМЕНЕНИЯ 3>

  </body>
</html>


тогда будет 1 тмпл файл и ВОЗМОЖНЫЕ ИЗМЕНЕНИЯ изменять в зависимости от QUERY_STRING?
но это как-то не гибко и неправильно как я чувствую.. Что делать то?

Автор: korob2001 11.3.2005, 21:33
Цитата

1). Как узнать - с какими параметрами юзер вызывает скрипт? то есть
http://x.ru/a.cgi?var=data1&var2=data2
как обработать var'ы более легким способ чем через QUERY_STRING?

Юзай модуль CGI.pm, подробнее здесь: http://forum.vingrad.ru/index.php?showtopic=43044
Цитата

2). Не могу догнать - как оптимально юзать HTML-Template..

Человеку который хорошо знает HTML, будет легко работать с таким файлом, не вмешиваясь в программный код. Если нужно оптимизировать, используй Mason, mod_perl, FastCGI.

Автор: Kiber_rat 11.3.2005, 21:49
Для работы с CGI стоит использовать модуль CGI smile
Как получить переданные скрипту параметры (не важно в адресной строке или через форму) написано не один раз на этом же форуме. Я, к примеру, получаю их та:
Код

#!/usr/bin/perl -w
use CGI qw(:standard);
my %Q=CGI::Vars();

В результате у тебя в хэше Q хранятся все переданные скрипту переменные, в виде:
Код

$Q{var1} = data1;
$Q{var2} = data2;

Что касается работы с темплейтами то я не совсе понял вопрос. Ты используешь какой-то модуль для работы с ними или хочешь написать свой вариант? На самом деле вопрос еще и в том что именно ты хочешь, именно темплейты или же embeded perl. Второй вариант предпочтительнее. Как вариант могу предложить использовать свои "тэги", потом просто парсить страничку и выводить уже значения вместо твоих "тэгов".
Например:
test.html
Код

<html>
<body>
Some string in HTML<br>
Here must be value of variable $a<!--%$a%--><br>
</body>
</html>

Далее парсишь то что выше:
default.cgi
Код

#!/usr/bin/perl -w
use CGI qw(:standard);
print header();
open FH, '<test.html>';
while (<FH>) {
  s/<!--%(\%*?)%-->/eval($1)/g;
  print;
}
close FH;

Для того что бы при запросе браузером странички она перед отправкой парсилась твоим скриптом надо кинуть в корень сайта примерно такой .htaccess
Код

Action pcgi /cgi-bin/default.cgi
AddHandler pcgi .html

Это примитивный пример, для нормального embeded perl все сложнее, но направление ты надеюсь понял...
И еще... Я не гарантирую что то что написано заработает smile Я писал из головы и не тестил...

Автор: Guest 11.3.2005, 22:22
пасиба..

Автор: Guest 12.3.2005, 10:41
М.. я вот раньше пхп юзал для Веба.. там делается вобще все элементарно...
<?php>
инклюдим топовую часть дизайна
</php>

пишем что душе угодно

<?php>
инклюдим боттомную чать дизайна
</php>

Я вот подумал можно на перле замутить такую вешь: создаем файл скажем индекс.пл - который будет запускаться с параметром index.pl?page=news - сам индекс.пл будет сперва считывать и выдавать на STDOUT файл скажем "dizain.verh" - которы будет содержать хтмл код дизайна, потом он будет также построчно выводить в ИЕ файл "news" И затем файл "dizain.niz". Таким образом, имхо довольно удобно отделяется типичный дизайн от часто изменяющихся элементов.

Вот то что я написал, такое вообще делают? или это изврат полный? Может кто пробовал? Насколько это удобно? Имхо порой это должно быть удобнее темплейтов..

Автор: Guest 12.3.2005, 21:07
??

Автор: korob2001 12.3.2005, 22:02
Вообще-то я для подобных вещей пишу класс, но можно и так:
Создай файл top.htm
Код

<html>
 <head>
   <title>Test</title>
 </head>
 <body>
  <center><h1>Это верхняя часть стараницы</h1></center><br><hr>

Теперь файл news.htm
Код

  <table width="50%" border="1" bgcolor="#<!--//Color//-->">
    <tr><td width="100%">Новости <!--//Time//--></td></tr>
    <tr><td width="100%"><!--//News//--></td></tr>
  </table><br><br>

Здесь стоит обратить внимание на теги коментариев, мы в послдствии будем заменять их нужными данными.
Тепь создай файл bot.htm
Код

<br><center><h1>Это нижняя часть страницы</h1></center> 
</body>
</html>

Теперь напиши на Perl такой код и сохрани его в файл added.pl
Код

#!/usr/bin/perl -w
use strict;
my ( $top, $news, $bot ) = qw( top.htm news.htm bot.htm );
my $time = localtime;
my $color = "cccccc";
my $add_news = <<"NEWS";
Привет всем!
Сегодня $time я начал изучать язык Perl.
Это было просто тестовое сообщение, потому прошу не обращать на него особого внимания.
Пока
NEWS

$add_news =~ s/\n/<br>/g;

print "Content-type: text/html\n\n";
for my $file ( $top, $news, $bot ) {
    open( F, "< $file" ) or die $!;
        while ( <F> ) {
           s#<!--//Time//-->#$time#gi;
           s#<!--//News//-->#$add_news#gi;
           s#<!--//Color//-->#$color#gi;
           print;
        }
    close( F );
}

в тот же каталог, куда сохранял и предидущие фалы, толко каталог должен быть исполняемым, как правило это /cgi-bin или /cgi, в зависимости от настроек сервера.

Теперь запуcти файл added.pl.

Удачи.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)