WebScript.Ru
C:\   главная  ::   о сайте  ::  каталог скриптов  ::  гнездо  ::  форум  ::   авторам  :: Новостройки ::   ХОСТИНГ  ::

|| разделы::
|| поиск по сайту::

|| реклама::
|| новости почтой::
Рассылки Subscribe.Ru ::



Новости сайта WebScript.Ru
Популярные статьи

Hot 5 Stories

|| рекомендуем::




Личный опыт подгонки скрипта к дизайну сайта


Прислал: Ali [ 07.10.2000 @ 22:43 ]
Раздел:: [ Статьи по Perl ]


На каком-то этапе процесса освоения мной методов разработки вебсайтов я понял необходимость использования некиех шаблонов, благо мой хостинг провайдер разрешал SSI, для удобного внесения корректив в дизайн. От фреймов я давно отказался. Представьте себе, что Вам нужно добавить новый пункт в главное меню, присутствующее на каждой странице. А сайт скажем из 20 страниц. Вы поменяли все 20, выложили на сервер, посмотрели и поняли, что этот пункт меню надо выделить другим цветом. Уф.

Я стал делить страницы на состовляющие. Получалось примерно следующее

index.html
<!--#include virtual="/header.txt" -->
Привет! спасибо, что заглянули на наш сайт!
Вы находитесь на главной странице.
Для навигации - используйте меню наверху.
Посетите, также нашего спонсора - его банер внизу.
<!--#include virtual="/footer.txt" -->
header.txt
<html>
<head>
<title>Хоумпага</title>
<meta http2-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body bgcolor="#000000">
<b>Меню: </b><!--#include virtual="/menu.txt" --><br>
menu.txt
[<a href="/photos/myfotos.html">Мои Фотографии</a>] [<a href="/guestbook.html">Гостевая</a>] [<a href="/about.html">О сайте </a>]
footer.txt
<center>
<small><b>Реклама</b></small>
<img border=0
src="/images/sponsor.gif" alt="Реклама" height="460" width="80" >
<!-- COUNTER START --><a href="//www.ultra.msk.ru" target="_blank"><img border=0 src="//www.ultra.msk.ru/counter.gif" alt="UltraNET counter"><img border=0 src="//www.ultra.msk.ru/cgi-bin/c2c.pl?acount_name" alt="UltraNET counter"><img border=0 src="//www.ultra.msk.ru/cend.gif"></a> <!-- COUNTER END -->
</center>
</body>
</html>

Это решило мои проблемы, пока на сайте у меня не очутилось множество бесплатных скриптов различных разработчиков, которые либо вообще не преусматривали запуск скрипта через SSI, либо только часть только отдельные функции скрипта можно было запускать в SSI.

Каждый из них приходилось отдельно подгонять к дизайну. При всей своей неискушенности в программировании, я таки научился это делать, но при этом в каждый скрипт, совершающий вывод на экран мне приходилось вставлять html-код трех файлов (header.txt, menu.txt, footer.txt).

Типичный пример - гостевая книга.

Запускается непосредственным вызовом скрипта: //www.your_server.ru/cgi-bin/gb/gb.cgi

Создаете файл "guestbook.html", например, в той же директории, где у Вас index.html.

guestbook.html
<!--#include virtual="/header.txt" -->
<b> Гостевая книга! </b>
<!--#include virtual="/cgi-bin/gb/gb.cgi?${QUERY_STRING}" -->
<!--#include virtual="/footer.txt" -->

В скрипте Вам необходимо вычистить все попытки генерирования html документа, напрямую не относящиеся к самой гостевой книге. Т.е. то что обычно бывает в верхней части html-документа <body> и нижней (то, что у Вас в файлах header.txt, menu.txt, footer.txt)

В самом скрипте необходимо URL скрипта (т.е. "//www.your_server.ru/cgi-bin/gb/gb.cgi" или "/cgi-bin/gb/gb.cgi") заменить на URL созданного Вами html-документа (т.е "//www.your_server.ru/guestbook.html" или просто "/guestbook.html").

Т.е. при построении формы для ввода сообщений данные должны передаваться не gb.cgi (<form action="//www.your_server.ru/cgi-bin/gb/gb.cgi" method=POST>) а html-документу (<form action="//www.your_server.ru/guestbook.html" method=POST>)

В свою очередь guestbook.html передаст уже в gb.cgi данные, считанные при помощи переменной SSI ${QUERY_STRING}.

Однако это может не сработать если gb.cgi при считывании данных обрабатывает только переменную $ENV{'CONTENT_LENGTH'}.

В самом распространенном варианте это выглядит и исправляется так:

#!/usr/bin/perl
##############
#оригинальный код
#код, который Вам надо добавить
...
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});

#если считывание $ENV{'CONTENT_LENGTH'} привело
# к пустому значению $buffer - то надо его заполнить
# данными из $ENV{'QUERY_STRING'};
if ($buffer eq "") {
$buffer=$ENV{'QUERY_STRING'};
}
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
if ($name eq 'coder') {
$coder=$value;
$coder=~ s/%//g;
}
$value =~ tr/+/ /;
$value =~ s/%7C/ /eg;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/&/&amp;/g;
$value =~ s/"/&quot;/g;
$value =~ s/</&lt;/g;
$value =~ s/>/&gt;/g;
$in{$name} = $value;
}

Кто знает варианты лучше и проще, или обнаружил, что я ошибся в чем-то - пишите.




 :::::  Рачей пишет 15.10.2000 @ 11:10 
Привет, все классно. только мне кажется что расширения файлов лучче ставить *.shtml. потому как не все провайдеры включают *.html и еще это замедляет обработку процесса. Если бы я об этом знал с самого начала. И еще момент, начинающим очень сложно при такой раскладке делать поиск по айту. Я имею ввиду поиск в теле документа. Все скрипты что я видел, делают поиск по заголовкам title> . Пришлось просить приятеля что бы он придумал... И он придумал:)
http://kosmetika.elegant.ru
Собрана по такому принципу, и поиск работает нормально:)
 :::::  EraZer пишет 16.10.2000 @ 16:51 
Каке расширения ставить зависит от конкретного сервера - у одних одна конфигурация, у других другая. И по скорости обработки между .html и .shtml никкой разницы нет. Многие серверы (агава, например) кешируют все .html, но вовсе не кешируют .shtml - сегодня это единственная разница (как правило).
 :::::  Sergey пишет 17.10.2000 @ 15:40 
Помойму полный идиотизм в данном случае использовать SSI
Лучше создать 2 файла(верх и низ дизайна)
А в скрипт вставить следующий код:
open (HEAD, \"up.txt\");
while (<HEAD>) {print};
close (HEAD);

и

open (HEAD, \"daun.txt\");
while (<HEAD>) {print};
close (HEAD);

И нагрузка на сервер будет меньше
 :::::  Gry пишет 06.12.2000 @ 14:28 
Была у меня такая проблема.
Решение Sergey не проходило в принципе, поскольку header и footer были сами SHTML (с кучей SSI и определений переменных).

Метод POST в формах на моих серверах не работает, если в action= стоит html-файл. (Может, можно настроить апач, чтоб он считал html-файл скриптом?)

В результате у меня получился довольно завернутое включение shtml-файлов в скрипты с POST-формами, но все работает. Я делаю шаблон shtml, со всеми нужными #include, #set var, и т.п., вставляю туда какой-нибудь код типа &lt;!-- /###/ --&gt;, затем этот файл читаю через get() из LWP внутри скрипта и заменяю &lt;!-- /###/ --&gt; тем, что мне нужно и выдаю клиенту.
 :::::  Nash пишет 18.12.2000 @ 17:51 
А я ничего нового не узнал. Очень жалко.
 :::::  Anonymous пишет 31.01.2001 @ 08:39 
А как бы все это заставить пашать на IIS (вот таким вот извратом приходится заниматься :( ) ?
Попытка передать таким образом скрипту параметры, вызывает вывод надписи ${QUERY_STRING} :(
 :::::  Anonymous пишет 16.02.2001 @ 09:48 
Привет, а может стоит подумать над вариантом perl + шаблон(mason,embperl, Apache::ASP,HTML::Template или PML)?
По моему этот вариант более удобен при изменении дизайна.

Пример решения на HTML::Mason :
<html>
<head><title>Пример</title></head>
<body>
<table>

% my $c= $dbh->prepare('select foo, bar, baz from quaz');
% while (my ($foo, $bar, $baz) = $c->fetchrow_array) {<tr><td><% $foo %></td><td><% $bar %></td><td><% $baz %></td></tr>%}

%$c->finish;

</table></body></html>

<!-- %once это тег mason'а, в котором содержится кусок perl'а, который выполняется один раз за жизнь этого компонента -->

<%once> my $dbh; </%once>

<%init>
<!-- %init выполняется при каждом запросе -->

if ($m->current_comp->first_time) {
$dbh = DBI->connect(....);
}
</%init>
Помоему так проще.
 :::::  Alex пишет 23.11.2001 @ 16:01 
Я пишу на Перле уже давно. Классный сайт.Спасибо за Ваш сайт. Очень помогает, особенно начинающим.
Имя:
Email:
URL

Введите сумму двух чисел девять и одинн (девять+одинн=?)
Запомнить мою информацию

* Html запрещен* Ваш E-mail опубликован не будет.

Copyright © 2000-2001 WebScript.Ru nas@webscript.ru
Design © 2001 by Parallax Design Studio (aka Spectator.ru)
Все торговые марки и авторские права на эту страницу принадлежат их соответствующим владельцам.
Сгенерировано за: 0.0307629