Форумы в Интернете можно встретить сплошь и рядом.Ни один уважающий себя сайт не
обходится без них. Форум дает возможность узнать мнение посетителей о сайте и о
том,что они думают об авторе и о его творениях :). Форум,пример которого я здесь
приведу не очень сложный,но он обеспечивает все необходимые функции.Для лучшего
понимания имеет смысл разбить его на несколько частей,объяснить каждую в
отдельности,а затем объединить все вместе.
Данный форум состоит из
следующих частей:
* Главная страница-вывод списка топиков. *
Создание нового топика и запись в файл. * Создание ответа на топик и запись
в файл.
Начнем не с главной страницы,потому что она обобщает всю
информацию,а с середины-добавления нового топика.
Добавление нового
топика.
Сначала в директории cgi-bin веб-сервера создадим каталог
html,куда будут записываться все сообщения. Сразу оговорюсь,что все сообщения
пишутся в html-файл:сначала топик и сообщение,затем к нему дописываются ответы.
По ходу дела все будет понятно. Сгенерируем форму для добавления новой темы
и сообщения.
#!/usr/local/bin/perl #Webforum.cgi version 1.01
$request=$ENV{′REQUEST_METHOD′}; $content=$ENV{′CONTENT_LENGTH′};
#Открываем
каталог и читаем его содержимое. Файлы в каталог записываются в виде
#001.html,002.html и т.д.То есть,каждый вновь записываемый файл,увеличивается
#на единицу.Это делается следующим образом.
# ($count-2)-это для
того,чтобы не считать подкаталоги типа "." и "..". # Проверяем,не являются ли
поля формы пустыми. Если нет-открываем файл на запись # и пишем информацию.
#Если одно из полей формы осталось
пустым-выдаем ошибку.Это делается для того,чтобы # не создавать пустые файлы,не
содержащие информации.Perl′у все равно,что писать :)
print
"Content-type:text/htmlnn"; print <<HTML; <p> <p>
vp> <body bgcolor="e6e8fa"> <h4
align=center>Sorry,you didn′t enter your nick or message! </h4>
<p><center><b>Please,go back and try again</b>
<p><a href="$cgi/webforum.cgi?action=newtop"><font
face="ferdana" size=3> <b>Back</b></font></a>
</center> HTML exit; } } closedir (DIR); }
# Если все прошло нормально,выносим пользователю благодарность.Новый
топик создан.
print "Content-type:text/htmlnn"; print
<<HTML; <p> <p> <p> <body
bgcolor="e6e8fa"> <h4 align=center>Thank you,<font
color="0000ff">$nick!</font></h4>
<p><center><b>Your message is added.</b>
<p><a href="$cgi/webforum.cgi"><font face="ferdana"
size=3> <b>View
topics</b></font></a></center> HTML
</BODY> </HTML> HTML
Добавление ответа на топик.
Добавление ответа почти ничем не отличается от добавления
топика,единственное отличие- нужно передать адрес страницы,чтобы скрипт
знал,куда писать ответ.А он содержится в файле топика.Если посмотреть чуть
выше,можно увидеть ссылку <a
href="$cgi/webforum.cgi?action=reply&file=$page.html">Post
reply</a> В ней и передается адрес страницы. Генерируем форму:
# Сначала читаем файл в массив.Это делается для того,чтобы поместить
его во фрейм ниже формы # на тот случай,если кто-то захочет вставить цитату из
предыдущих сообщений.
$page=$input {′file′};
open
(FILE,"$dir/$page"); @data=<FILE>; close (FILE);
# Снова проверяем,чтобы поля формы не были пустыми. Если все в
порядке,открываем файл, # содержащий топик на добавление и дописываем ответ.
if ($nick ne "" && $message ne "" ) { open
(FILE,">>$dir/$page"); print FILE "<table width=90% cellpadding=0
cellspacing=0 border=1>n"; print FILE "<tr><td rowspan=2
bgcolor="f7f7f7" align=center width=150> <font face="serif" size=3
color="0000ff">$nick</font></td>n"; print FILE "<td
bgcolor="e6e8fa" height=30><font face="serif" size=1 color="000080">
Posted:",scalar localtime,"</font></td></tr>n"; print
FILE "<tr><td bgcolor="f7f7f7"><font face="serif" size=2>
$message</td></tr></table>n"; close (FILE); close
(FILE); } else {
# Если одно из полей осталось пустым-выдаем ошибку.
print "Content-type:text/htmlnn"; print <<HTML;
<p> <p> <p> <body bgcolor="e6e8fa">
<h4 align=center>Sorry,you didn′t enter your nick or message!
</h4> <p><center><b>Please,go back and try
again</b> <p><a
href="$cgi/webforum.cgi?action=reply&file=$page.html"> <font
face="ferdana" size=3><b>Back</b></font></a>
</center> HTML exit; }
# Снова выносим
благодарность посетителю.Ответ добавлен.
print
"Content-type:text/htmlnn"; print <<HTML; <p> <p>
<p> <body bgcolor="e6e8fa"> <h4 align=center>Thank
you,<font color="0000ff">$nick!</font></h4>
<p><center><b>Your message is added.</b>
<p><a href="$cgi/webforum.cgi"><font face="ferdana"
size=3> <b>View
topics</b></font></a></center> HTML
</BODY> </HTML> HTML
Главная страница.
Ну вот
мы,наконец,добрались и до главной страницы.Она выводит список топиков,дату
последнего ответа на каждый топик,количество ответов,имя создателя топика.Она
заслуживает отдельного описания.
Конечно,я не реализовал все возможности.Можно добавить регистрацию
пользователя,возможность редактирования сообщений и т.д.В дальнейшем я планирую
доработать этот форум и сделать его более продвинутым. В данный момент моей
целью было объяснить,как это работает