Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #27, ФЕВРАЛЬ 2003 г.

ЖЕМЧУЖНЫЙ САЙТ - cкриптинг на перле

Леха ББ ака Alexys

Спецвыпуск Xakep, номер #027, стр. 027-026-4


Динамическая генерация линков

Делал ли когда-нибудь в обычном ручном html'е список однотипных ссылок? Или прайс-лист компьютерной конторы? Немного утомительно каждый раз писать <a href=...>pos 1</a>, особенно если позиций более сотни. На перле это модно сделать, приложив к этому намного меньше усилий. Рассмотрим это на примере создания списка статей, которыми тебе захотелось поделиться с людьми, выложив их на сайте. Все, что нужно сделать, - это создать текстовый файл, который будет собой представлять своеобразную текстовую базу данных, в полях которой будут указаны: название статьи, имя файла с текстом, автор, время написания. Все эти поля должны быть чем-то отделены друг от друга, например, двумя точками с запятой (;;). Нечасто в тексте встречается такое сочетание знаков, так что ;; подходит на роль разделителя, тем более что он не сильно будет маячить перед глазами при редактировании файла ручками. Хватит теории, пора переходить к скрипту.

# если параметр act пустой или отсутствует, то будет выводиться список имеющихся у тебя статей

if ($input{'act'} eq "")

{

$artindfile=$homedir.'index.txt';

open(AA1, "$artindfile");

@ind=<AA1>;

close(AA1);

print "<h1>Список статей</h1>\n";

print "<table>\n";

print "<tr><td><div>\n";

for($q=0; $q<@ind; $q++)

{

chomp($ind[$q]);

# избавление от символа новой строки

($date, $razdel, $name, $author, $filename)=split(/;;/,$ind[$q]);

# разбивка строки на части

print "<a href=\"$script?art=$q&act=read\"><b>$name</b></a>\n";

print "<br>\n";

print "<div>Автор статьи: $author.\n";

print "Дата написания: $date\n";

print "<hr width=80% align=center></div>\n";

}

print "</td></tr>\n";

print "</table>\n";

}

Функция chomp() помогает избавиться от символа новой строки на ее конце. Такой символ может сотворить такое с именем файла, что потом запаришься думать, почему у тебя ничего не работает :).

Функция split() служит для разбивки строки на части, разделенные каким-то знаком. Существует и ей обратная функция join().

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

Назад на стр. 027-026-3  Содержание  Вперед на стр. 027-026-5