Помимо гостевой книги основным атрибутом серьезного Web-узла является список рассылки новостей. Perl-программа для выполнения рассылки довольно проста, при желании ее можно несколько улучшить, добавив новые возможности (см. листинг 9).
При создании Web-узла, ориентированного как на русскоязычных, так и на англоязычных посетителей, в программе предусмотрена возможность выдачи сообщений в соответствующем виде. Основная форма (рис. 3) в зависимости от языка узла должна обязательно содержать поле:
или
для распознавания языка выдачи сообщений.
Чтобы облегчить разбор программы рассылки новостей, в ней расставлены комментарии.
Листинг 9. Список рассылки новостей
#!/usr/local/bin/perl
############################
# SCRIPT: POSTER.CGI #
# (c) Michael Yevdokimov #
############################
require ▒cgi_lib.pl▓;
$PathList=■../mlist■; #физический путь к каталогу с базой посетителей
$PathNews=■../mnews■; #физический путь к каталогу с документом для посылки
$ReturnPage=■index.html■ #страница, к которой нужно будет возвратиться
$mail_prog=■/usr/sbin/sendmail■; #физический адрес к почтовой программе
$Title=■News List■; #заголовок списка рассылки
$From=■maillist\@mysite.ru■; #адрес списка рассылки
$Website=■www.mysite.ru■; #источник списка рассылки для Subject
# Method Detection and Decoding
&Parse_Data; # декодировать данные из формы / URL
$Lang=$CGI{▒lang▓}; # тип языка (Рус/Англ)
$User=$CGI{▒user_name▓}; # имя посетителя
$Email=$CGI{▒user_email▓}; # email посетителя
$Flag=$CGI{▒flag▓}; # флаг для проверки некоторых условий в программе
$Command=$CGI{▒command▓}; # считать команду (send или ▒▓)
if ($Lang eq ▒english▓) {
$db=■userbase.eng■; # база с иностранными подписчиками
$nf=■news.eng■ # английская ■посылка■ (обычный TXT)
} else {
if ($Lang eq ▒russian▓) {
$db=■userbase.rus■; ■ с российскими подписчиками
$nf=■news.rus■; русская ■посылка■ (обычный TXT)
} else {
&Print_Head; # аналогично print ■Content-type:text/html\n\n■;
print ■ATTENTION! ERROR OCCURED!\n■;
print ■PRESS [BACK] TO RETURN!\n■;
exit(0);
}
}
if ($Command eq ▒send▓) { # проверка той самой команды
if ($db eq ▒userbase.eng▓) {
#Post English News
&Post_News($User,$Email);
} else {
#Post Russian News
&Post_News($User,$Email);
}
}
#Проверить значение атрибута flag
if ($Flag eq ▒eng_yes▓) { # если информация верна
&Check_Email; # вызвать подпрограмму проверки введенного email
&Add_Record($Path,$db); # добавить запись в соответ. базу
&Print_Head;
print ■Your records were added to database
\n■;
print ■Click here to return...\n■;
exit(0);
} else {
if ($Flag eq ▒rus_yes▓) {
&Check_Email;
&Add_Record;
&Print_Head;
print ■Ваши данные занесены в базу данных
\n■;
print ■Нажмите здесь для возврата...\n■;
exit(0);
} else {
}
}
# вывести форму подтверждения правильности введенной информации
if ($db eq ▒userbase.eng▓) {
#Английский вариант формы
&Print_Head;
print ■
News List Registration
\n■;
print ■\n■;
print ■
\n■;
print ■\n■;
} else {
#Русский вариант формы
&Print_Head;
print ■\n■; print ■\n■; print ■\n■; } sub Add_Record { # подпрограмма записи посетителей в БД open (UB, ■>>$PathList/$db■) || die (■Error during adding a record $!■); print UB join (■::■, ■$User■, ■$Email■), ■\n■; close (UB); } sub Post_News { # подпрограмма рассылки новостей #Открыть UB - базу пользователей open (UB, ■$PathList/$db■) || die (■Error during reading file $!■); while (
\n Email: $Email which you have entered is incorrect!
\n PRESS [BACK] TO RETURN\n■; return $ErrMsg; } else { $ErrMsg=■ВНИМАНИЕ! ВОЗНИКЛА ОШИБКА!
\n Email: $Email, который вы ввели неправилен!
\n НАЖМИТЕ [BACK] ДЛЯ ВОЗВРАТА\n■; return $ErrMsg; } }
Назад | Содержание | Вперед