div.main {margin-left: 20pt; margin-right: 20pt} Практическое применение Perl-скриптов
(Построение сайта по единому шаблону с использованием SSI
и PERL)
Сегодня нет проблем найти в интернете себе место под
солнцем. Точнее под страничку. Множество иностранных, а с недавних пор и
отечественных серверов предлагают бесплатно от 1 МБ и более дискового
пространства, плюс почтовый ящик. Так что, создавайте странички и
публикуйте, места предостаточно.
Но. Чем больше у Вас
взаимосвязанных страничек, тем сложнее следить за правильностью всех
ссылок, и все труднее приводить их в порядок.
К примеру. У Вас 20 страниц и Вы решили добавить еще
одну. При чем на нее должны быть ссылки со всех остальных. Обычно,
приходится редактировать все 20 страниц и потом выгружать их на сервер. А
если изменения производятся каждый день, и число страниц растет как
снежный ком, что делать? От такого объема можно просто сойти с ума. И
процесс творчества превратится в рутину.
Из сложившейся ситуации есть выход - вынести все ссылки в
отдельный файл. И производить все изменения только в нем. Что мы при этом
получаем? При добавлении очередной страницы Вы изменяете только одну
страницу со ссылками. А на сервер выгружаете только две, новую, которую
добавляете, и ссылки. Замечательно! Осталось только реализовать эту
идею.
Решение первое: Использовать
фреймы. То есть страница со ссылками помещается в отдельный фрейм, который
постоянно присутствует на экране. А все ссылки открываются в
другом. Плюсы: Все очень просто. Минусы: Неважная эстетика. При большой страничке
ссылок (не помещается в экран по высоте или ширине, в зависимости от
реализации) возникает необходимость использования полосы прокрутки. Что
может испортить оформление сайта.
Решение второе: Использовать
SSI (включение на стороне сервера). Содержимое
страницы ссылок вставляется сервером в Ваши страницы с помощью
специального тэга. К примеру, файл ссылок у Вас - "navig.html". Тогда во
все страницы, в которые необходимо его вставить, в необходимом месте Вы
пишите: <!--#include
virtual="navig.html"--> И выгружаете страницы на сервер. При
обращении к Вашей странице сервер обрабатывая ее содержимое, всретив эту
команду, вставит содержимое файла navig.html. Пользователь при этом вместо
строки <!--#include virtual="navig.html"--> увидит содержимое
файла navig.html. То есть обычный HTML код, как буд-то Вы сами вручную
добавили ссылки. Плюсы: Работает везде. То
есть не зависит от браузера пользователя. Не портит дизайн. Минусы: Требуется поддержка сервером технологии SSI.
Которая, как правило, отключена на всех бесплатных серверах. Плюс для
отладки на домашнем компьютере необходимо установить программу
WEB-сервера, например APACHE.
Решение третье: Сложное, но
эффективное - использовать скрипты (выполняемые на сервере) плюс SSI. Что
позволяет убить сразу всех зайцев. Во-первых: Все преимущества
SSI. Во-вторых: Появляется возможность построения сайта по единому
шаблону. То есть при использовании "голой" SSI мы в свои страницы
вставляем часто используемые элементы. При этом, когда возникает
необходимость (либо желание) изменить дизайн сайта, нам необходимо
изменять все страницы, раз уж мы хотим, чтобы они выглядели
одинаково. Гораздо эффективнее вставлять наши страницы в один шаблон, в
котором находятся все часто используемые элементы. Теперь мы можем
изменить дизайн всего сайта, отредактировав лишь один файл (шаблон). В
принципе не важно, что во что вставлять. Пользователь получит одинаковый
результат. Но вот "творить" сайт приходится нам, и хочется этот процесс
упростить. Реализовать это только с помощью SSI невозможно, так как
невозможно динамически менять имя вставляемого файла. Решить проблему
проще всего используя скрипт на языке PERL. Который (скрипт) будет
работать как SSI-директива, но вставлять тот файл, который мы ему укажем.
Передавать имя файла будем в строке запроса (после знака вопроса в адресе
странице). И адреса примут вид (к примеру):
http://www.mysite.com/wellcom.shtml?home.html Где до знака вопроса
адрес файла-шаблона, а после указание имени вставляемого файла для
PERL-скрипта. В шаблоне, в том месте, где будут вставляться наши
страницы прописываем вызов скрипта (пусть он называется
include.cgi) <!--#exec cgi="include.cgi"--> Впрочем, некоторые
серверы предпочитают другую команду: <!--#include
virtual="include.cgi"--> Уточните это у администратора Вашего
сервера.
И самое главное - исходный текст
скрипта:
#!/usr/bin/perl $file =
$ENV{'QUERY_STRING'}; open(FILE, "$file"); my @indata =
<FILE>; close(FILE); print "Content-type:
text/htmlnn"; foreach (@indata) { print $_; }
Плюсы: Те же, что и у SSI.
Плюс. Позволяет использовать один файл-шаблон для всего сайта. Минусы: Те же, что и у
SSI. Плюс. Необходим PERL как на сервере в интернете, так и на домашней
машине для отладки.
Я остановил свой выбор на третьем варианте. Вы сами могли
убедится, что программировать на PERL не так и
сложно, а вот возможности открываются большие, плюс существенно упрощается
управление сайтом, его модернизация. "Новые технологии" в лице PERL доступны не только ПРОФИ, но и обычным пользователям интернета. Надеюсь,
я убедил Вас в этом!
С некоторыми изменениями этот скрипт используется на
сервере http://www.ruu.inc.ru/.
Закачать его можно по адресу: http://www.ruu.inc.ru/include.zip. Кое-что
почерпнуть об этом скрипте можно по адресу: http://www.ruu.inc.ru/goto.shtml?sincl.
А о других скриптах, используемых на том же сервере, - здесь http://www.ruu.inc.ru/goto.shtml?script
P.S. Конечно можно вообще
генерировать страницы полностью на PERL. Но это
сложнее, чем "рисовать" страничку в визуальном редакторе. Можно
использовать JAVA-скрипты, но их исполнение
может быть запрещено самим пользователем. Так же встречаются браузеры не
поддерживающие JAVA-скрипты (хотя наверное
число их пользователей невелико). Плюс, этот скрипт необходимо передать
пользователю, чтобы браузер его выполнил, что "утяжеляет" страницу. А при
наших скоростях лучше избавится от лишнего веса. Поэтому считаю, что
предложенный вариант (концепция), является оптимальным.
Автор: Юрий
Рассадников
|