<% ASP на блюдечке %>. Часть 16
Гостевая книга своими руками — 2. Администрирование
Создание и подготовка базы данных
Интеграция системы в уже готовый сайт
Главная страничка администрирования гостевой книги (файл index.htm)
Модуль удаления сообщений (файл Delete.asp)
Модуль настройки параметров почты (файл ModeMail.asp)
Модуль настроек интерфейса (файл ModLook.asp)
Введение
предыдущей статье настоящего цикла <%ASP на блюдечке. Часть 15. Гостевая книга своими руками %> мы рассмотрели такой функциональный компонент сайта, как гостевая книга, причем сразу сделали его переносимым. В результате был получен достаточно сложный с точки зрения восприятия исходный код. Однако, хотя множественные параметры несколько усложнили восприятие исходного кода модуля, их применение раз и навсегда избавило от необходимости правки кода при их изменении. Разработанная таким образом система вполне приемлема для использования, а благодаря модульности ее реализации и описанному в статье подходу к ее внедрению в уже существующие сайты она может быть применена в качестве гостевой книги на сайте практически любой степени сложности.
Теперь, как и было обещано, мы рассмотрим Web-интерфейс для редактирования, административных настроек (схем) работы гостевой книги. Для начала стоит сказать несколько слов о самой гостевой книге (для тех читателей, кто не знаком с предыдущей статьей настоящего цикла, это будет крайне необходимо для полноты восприятия), разработанной нами в предыдущей статье настоящего цикла (см. приложение CD-ROM к журналу КомпьютерПресс № 11’2001).
Гостевая книга: краткий обзор
аиболее типичная гостевая книга состоит из системы, предоставляющей пользователю возможность ввода текста, системы выбора определенной оценки того или иного сайта, а также служит для указания собственных данных (ФИО, e-mail, http …). Кроме того, это система представления данных, введенных различными пользователями, с возможностью навигации и посылки электронных писем авторам сообщений. Возможны также вариации со всевозможными настройками и контролем нормативности лексики.
Гостевая книга — это основной механизм, обеспечивающий обратную связь с пользователями сайта. Это необходимо, например, в случае, если пользователь желает сделать свое мнение достоянием общественности. Зачастую гостевые книги на определенных сайтах превращаются в места дискусий (в форумы, чаты). Таким образом, гостевая книга, так же как и система электронного голосования, может вызвать интерес к сайту, а следовательно, является еще одним средством привлечения внимания пользователей.
Что нам понадобится
онечно же, предполагается, что читатель знаком с основами ASP- и SQL-программирования (предыдущих статей настоящего цикла для этого будет вполне достаточно). Кроме того, нам потребуется Microsoft SQL Server 7.0 или 2000, какой-нибудь HTML- или текстовый редактор (рекомендую использовать Macromedia Dreamweaver UltraDev 4.0) и немного терпения.
Создание и подготовка базы данных
ля организации хранения введенных пользователями данных нам понадобится одна таблица. В ней можно завести поля для хранения имени пользователя, его электронного адреса, страны проживания, адреса сайта, IP-адреса, значения оценки пользователем сайта по пятибалльной шкале и т.д.
Давайте представим себе пример реализации такой таблицы: .
Для организации удобного встраивания системы в уже существующие сайты рекомендуется спланировать еще одну таблицу для хранения цветовых и других установок, что позволит в дальнейшем изменять их без внесения изменений соответствующих параметров в исходных текстах модулей самого приложения гостевой книги. Разработкой интерфейса настройки всех этих параметров мы и займемся в настоящей статье.
Прежде всего необходимо прописать нашу базу данных в соответствующем разделе источников данных системы. Для этого сделайте следующее:
- запустите программу — конфигуратор источников данных (Data Sources ODBC) — Start->Settings->Control Panel->Administrative Tools->Data Sources ODBC;
- перейдите во вкладку System DSN и создайте новый источник данных, нажав на Add…;
- в появившемся списке драйверов выберите драйвер баз данных Microsoft SQL Server и нажмите на Next;
- в строке Data Source Name задайте имя нашей базы данных — в данном случае Gustbook (это имя, по которому мы в дальнейшем будем обращаться к ней);
- в строке Server укажите сервер, к которому будет осуществлено подключение, и нажмите на Next;
- выберите режим аутентификации With SQL Server…, задайте имя пользователя и пароль для подключения к SQL-серверу, определите протокол связи с сервером (кнопка Client Configuration — TCP/IP) и два раза нажмите на Next, а затем — на Finish. В результате вы увидите статистику проделанных действий. Для проверки источника данных можно воспользоваться кнопкой Test Data Source — перед вами появится строка в списке источников данных в вашей системе.
Теперь, когда база данных готова, можно переходить к созданию самой гостевой книги.
Интеграция системы в уже готовый сайт
ело в том, что наличие просто гостевой книги не имеет смысла. Посудите сами, кому нужен сайт, предназначенный исключительно для сбора мнений читателей. Ведь для того, чтобы собирать мнения о чем-либо, надо это что-либо представить на их суд. Следовательно, необходимо уделить особое внимание моментам, связанным с упрощением встраивания системы в уже готовые сайты.
В частности, для упрощения настройки системы под характерные особенности того или иного сайта рекомендуется (как уже отмечалось выше) организовать специальную таблицу для хранения всех этих предпочтений, с тем чтобы заносить в нее определенные значения, специфичные для данного конкретного сайта. Очевидное преимущество такого подхода заключается в том, что для встраивания системы в уже готовый сайт нет необходимости производить изменения в исходном коде модулей — достаточно лишь изменить настройки в соответствующей таблице базы данных.
В то же время необходима разработка системы автоматизации заполнения такой таблицы, которая позволила бы существенно упростить задачу, связанную с адаптацией гостевой книги к тому или иному сайту.
Для начала нам потребуется в деталях представить себе реализацию такой таблицы: .
Как видите, здесь присутствуют: поля для хранения информации об имени и пароле доступа к режиму настройки системы, о цветах основного фона сообщения пользователей, верхней и нижней рамок (поля Mid_Color, Top_Color, Bot_Color соответственно), о цвете и размере заголовка формы, служащей для ввода пользователем данных (поля Form_Color и FormTitleSize соответственно), о цвете, размере и начертании шрифта текста самого сообщения, информационных полей, а также самих страниц с гостевой книгой (поля MessageFontColor, MessageFontSize, MessageFontFace, InfoFontColor, InfoFontSize, InfoFontFace, PageFontColor, PageFontSize и PageFontFace соответственно); поля-переключатели для включения режима автоматической отправки уведомлений о поступлении новых сообщений по электронной почте ответственному лицу (например, менеджеру или администратору сайта); поле хранения электронного адреса ответственного лица, текста сообщения с благодарностями за оставленное пользователем сообщение, со списком недопустимых слов и с переключателем режима их фильтрации (если последний включен, то слова, находящиеся в списке недопустимых, будут автоматически заменяться в тексте сообщения на звездочки и таким образом будет осуществляться контроль за нормативностью лексики текстов сайта).
Теперь займемся разработкой управляющего интерфейса для нашей гостевой книги.
Главная страничка администрирования гостевой книги (файл index.htm)
ля начала давайте разобьем по группам функционал настройки функций нашей гостевой книги. Далее представим задачу, решаемую каждой группой настроек, и реализуем ее отдельным модулем-страничкой, после чего соберем все модули в единый интерфейс.
Итак, функциональная часть нашего интерфейса должна включать в себя:
- Систему идентификации администратора по имени и паролю, систему изменения имени и/или пароля.
- Возможность удаления сообщений.
- Возможность настройки параметров почты.
- Возможность редактирования настроек интерфейса.
Организуем набор фреймов (2 фрейма), причем в верхнем фрейме создадим строку со ссылками на функционал, а в нижнем (основном) — будем показывать содержимое по контексту:
<html> <head> <title>ASP на блюдечке. Часть 16. Гостевая книга своими руками — 2. Администрирование.</title> </head> <frameset rows="50,*"> <frame name="header" scrolling="no" noresize target="main" src="admintop.htm" marginwidth="15" marginheight="15"> <frame name="main" scrolling="auto" marginwidth="15" marginheight="15" src="login.asp"> <noframes> <body> <p>This page uses frames, but your browser doesn't support them. Get a decent one!</p> </body> </noframes> </frameset> </html>
Как видите, верхний фрейм ссылается на исходный модуль admintop.htm, а основной фрейм — на модуль идентификации пользователя login.asp.
Первый, как мы уже говорили, содержит ссылки на рассмотренный нами функционал:
<html> <head> <base target="main"> <title>ASP на блюдечке. Часть 16. Гостевая книга своими руками — 2. Режим администрирования</title> </head> <body bgcolor="#FFFFFF"><div align="center"> <table border="0" cellpadding="0" cellspacing="0" width="100%"> <tr><td width="100%" valign="middle" align="center"> <a href="delete.asp">Удаление сообщений</a> | <a href="modemail.asp">Настройка параметров почты</a> | <a href="modlook.asp">Другие опции</a> | <a href="modlogin.asp">Смена пароля</a> </td></tr> </table> </center> </div> </body> </html>
Далее следуют модули, соответствующие ссылкам в модуле верхнего фрейма набора.
Модуль идентификации пользователя (файл Login.asp)
Основу безопасности составляет именно этот модуль. Как мы уже не раз говорили в предыдущих статьях настоящего цикла, система идентификации пользователя имеет различные механизмы хранения информации о «вошедшем» пользователе. В данном модуле применяется механизм регистрации с использованием ключика:
Response.Cookies(""&Session.SessionID&"") ("Admin") = "true",
который при соответствующих условиях фиксирует состояние пользователя как прошедшего процедуру идентификации. Во всех случаях важно понимать, что все странички нашего приложения должны быть снабжены соответствующими проверками на «пройденность», дабы не допустить несанкционированного входа не с заглавной, а с какой-либо другой странички:
IF NOT Request.Cookies(""&Session.SessionID&"")("Admin") = "true" Then Response.Redirect "login.asp" End If
В остальном действия при идентификации стандартны. Из таблицы с административными настройками извлекаются записи, у которых поля с именем пользователя и паролем совпадают с заданными:
<!-- #INCLUDE FILE="config.asp" --> <%Response.Buffer = True%> <html> <head> </head> <body> <%Sub Form%> <form action="login.asp?Mode=login" method="post" name="Login"> <table border="0"> <tr> <td noWrap><font face="verdana" size="2"> <b>Имя (логин):</b> </font></td> <td><input maxLength="50" name="User" size="25"> </td></tr> <tr><td noWrap><font face="verdana" size="2"> <b>Пароль:</b> </font></td> <td><input maxLength="50" name="Password" size="25" type="password"></td></tr> <tr><td colspan="2"><input name="Submit" type="submit" value="Вход в режим"> </td></tr></table> <%End Sub Sub Login set objConn= Server.CreateObject("ADODB.Connection") set objRec = server.CreateObject("ADODB.RecordSet") objConn.Open strConn strSql ="SELECT * from admin where Name = '" & Request.Form("User") & "' and password = '" & Request.Form("Password") &"'" set objRec = objConn.Execute (StrSql) If objRec.BOF or objRec.EOF then Response.Write "<b>Неверное имя или пароль администратора</b><p>" Response.Write "<a href=""login.asp?mode=show"">Повторите попытку</a><p>" Else Response.Write "Вы находитесь в режиме администрирования гостевой книги<p>" Response.Cookies(""&Session.SessionID&"") ("Admin") = "true" End If End Sub %> <table border="0" width="100%" align="center"> <tr> <td width="100%" align="center">Введите имя и пароль для доступа к режиму администрирования гостевой книги </TD> </tr> <tr> <td width="95%" align="center"> …
Опрос состояния модуля может осуществляться двояко. В случае нажатия на кнопку входа выполняется процедура идентификации, во всех других случаях попросту осуществляется показ формы идентификации пользователя.
… <% select case Request.QueryString("mode") case "login" Call Login case "show" Call Form Case Else Call Form End Select %> </td> </tr> </table> </body> </html>
После того как процедура идентификации пройдена, осуществляется допуск пользователя к функционалу системы.
Модуль удаления сообщений (файл Delete.asp)
одуль по сути дела предоставляет нам доступ к сообщениям в том виде, в котором это выполнялось модулем guest.asp в основном режиме, как показано в предыдущей статье данного цикла. Функционал тот же, отличие только в наличии галочки-чекбокса для выбора сообщений, подлежащих удалению, и кнопки «Удалить выбранные» для выполнения действий по удалению:
<!--#include file="config.asp"--> <% Function FormatStr(String) on Error resume next String = Server.HTMLEncode(String) String2 = Replace(String, CHR(13), "") String2 = Replace(String, CHR(10) & CHR(10), "</P><P>") String2 = Replace(String, CHR(10), "<br>") FormatStr = String2 End Function Sub Delete Set objRec = Server.CreateObject ("ADODB.Recordset") objRec.Open "Messages", objConn,1, 3, &H0002 For intLoop = 1 to Request.Form("field").Count IDnum = Request.Form("field")(intloop) objRec.Filter = 0 objRec.Filter = "ID='" & IDnum & "'" objRec.Delete Next Response.Redirect "delete.asp" End Sub Sub Show NumPerPage=INT(objRec2("NumPerPage")) If Request.QueryString("page") = "" Then iPageCurrent = 1 Else iPageCurrent = CInt(Request.QueryString("page")) End If Set objRec = Server.CreateObject ("ADODB.Recordset") StrSql = "SELECT * FROM Messages ORDER BY ID DESC;" objRec.PageSize = NumPerPage objRec.CacheSize = NumPerPage objRec.Open StrSql,objConn,3,1,&H0001 iPages = objRec.PageCount TotalRows = objRec.RecordCount If iPageCurrent > iPages Then iPageCurrent = iPages If iPageCurrent < 1 Then iPageCurrent = 1 If iPages = 0 Then Response.Write "Записей не найденно!<p>" Else ObjRec.AbsolutePage = iPageCurrent %> <font face="<%=objRec2("PageFontFace") %>" color="<%=objRec2("PageFontColor")%> " size="<%=objRec2("PageFontSize")%>"> <center> <b>Удаление сообщений</b> </center> <p align=left>Всего <b> <%=TotalRows%></b> сообщений на <b> <%=iPages%></b> страницах</font></p> <% iRecordsShown = 0 Do While iRecordsShown < NumPerPage And Not objRec.EOF Rating = ObjRec("Rating") If IsNull(Rating) or Rating="0" then Rating = "nr" Else Rating = ObjRec("Rating") End If If IsNull(ObjRec("URL")) then Link = "no URL given" Else Link = "<a href='http://" & ObjRec("URL") & "'>http://" & ObjRec("URL") & "</a>" End If Email = FormatStr(ObjRec("Email")) Name = FormatStr(ObjRec("Name")) %> <table width="550" border="0" cellpadding="1" cellspacing="0"> <tr> <td colspan="2" bgcolor="<%=ObjRec2("Top_Color")%>"> <font face="<%=objRec2("InfoFontFace")%>" color="<%=objRec2("InfoFontColor")%>" size="<%=objRec2("InfoFontSize")%>"> <input type="checkbox" name="field" value="<%=objRec("ID")%>"> <%=ObjRec("DateID") %> </font> </td> <td align="right" bgcolor="<%=ObjRec2("Top_Color")%>"> <font face="<%=objRec2("InfoFontFace")%>" color="<%=objRec2("InfoFontColor")%>" size="<%=objRec2("InfoFontSize")%>"> <b>Оценка: </b></font> <img src="../images/star<%= Rating %>.gif" height="14" width="65"> </td> </tr> <tr><td colspan=3 bgcolor="<%=ObjRec2("Mid_Color")%>"> <font face="<%=objRec2("MessageFontFace")%>" color="<%=objRec2("MessageFontColor")%>" size="<%=objRec2("MessageFontSize")%>"> <%=FormatStr(ObjRec("Message"))%> </font> </td> </tr> <tr> <td width="110" valign="top" bgcolor="<%=ObjRec2("Bot_Color")%>"> <font face="<%=objRec2("InfoFontFace")%>" color="<%=objRec2("InfoFontColor")%>" size="<%=objRec2("InfoFontSize")%>"> <% If IsEmpty(Email) or Email=" " then Response.Write Name Else Response.Write "<a href=""mailto:" & Email & """><img src=../images/mail.gif border=0></a> " & Name End If %> </font> </td> <td width="180" valign="top" bgcolor="<%=ObjRec2("Bot_Color")%>"> <font face="<%=objRec2("InfoFontFace")%>" color="<%=objRec2("InfoFontColor")%>" size="<%=objRec2("InfoFontSize")%>"> <%=ObjRec("Country") %> <i>IP:<%= ObjRec("IP") %> </i></font></td> <td width=260 align="right" valign="top" bgcolor="<%=ObjRec2("Bot_Color")%>"> <font face="<%=objRec2("InfoFontFace")%>" color="<%=objRec2("InfoFontColor")%>" size="<%=objRec2("InfoFontSize")%>"><%=Link%></font></td></tr></table><br> <% iRecordsShown = iRecordsShown + 1 objRec.MoveNext Loop if iPages > 1 then %> <p align=left><font face="<%=objRec2("PageFontFace")%>" color="<%=objRec2("PageFontColor")%>" size="<%=objRec2("PageFontSize")%>"><b>Pages: </b> <% For I = 1 To iPages If I = iPageCurrent Then Response.Write "<b>" & I & "</b> " Else Response.Write "<a href=./guest.asp?page=" & I & ">" & I & "</a> " End If Next Response.Write "</font>" Else Response.Write " " End If End If objRec.Close Set objRec = Nothing %> <input type="submit" value="Удалить выбранные сообщения" name="Submit"></p></form> <% End Sub Set objConn = Server.CreateObject ("ADODB.Connection") objConn.Open StrConn Set objRec2 = Server.CreateObject ("ADODB.Recordset") ConfigSql = "SELECT * FROM Admin;" objRec2.Open ConfigSql,objConn,0,1,&H0001 %> <html> <head> <title>ASP на блюдечке. Часть 16. Гостевая книга своими руками — 2. Удаление сообщений</title> </head> <body> <center> <table border="0" width="550" cellpadding="0"> <tr> <td align=center> <form method="POST" action="delete.asp?mode=delete"> <% select case Request.QueryString("mode") case "delete" Call Delete case "show" Call Show case Else Call Show End Select objRec2.Close Set objRec2 = Nothing objConn.Close Set objConn = Nothing %> </p> </td> </tr> </table> </center> </body> </html>
Модуль настройки параметров почты (файл ModeMail.asp)
тот модуль служит для контроля посылки сообщений-уведомлений о поступлении новых записей в гостевую книгу администратору и писем с благодарностями за оставленные сообщения пользователям.
Как мы уже говорили, посылка писем будет выполняться посредством серверного компонента CDONTS, который в большинстве случаев установлен и зарегистрирован на платформах на базе NT по умолчанию, а в случаях, когда это не сделано, может генерироваться ошибка о невозможности порождения экземпляра объекта типа CDONTS. Если по какой-либо причине платформа не позволяет использовать компонент CDONTS, то можно воспользоваться бесплатным компонентом ASP-Email (http://www.aspemail.com/) компании Persits Software, Inc (http://www.persits.com/).
<%@ LANGUAGE="VBSCRIPT"%> <%Response.Buffer = True%> <!-- #INCLUDE FILE="config.asp" --> <% IF NOT Request.Cookies(""&Session.SessionID&"")("Admin") = "true" Then Response.Redirect "login.asp" End If Function ChkString(string) if string = "" then string = " " ChkString = Replace(string, "'", "''") End Function Set objConn = Server.CreateObject ("ADODB.Connection") Set objRec = Server.CreateObject ("ADODB.Recordset") objConn.Open strConn If Request.QueryString("mode") = "go" then objRec.Open "admin", objConn,2,2,&H0002 objRec.Filter = "ID=1" objRec("AutoEmail") = Request.Form("AutoEmail") objRec("YouEmail") = Request.Form("YouEmail") objRec("YourEmail") = ChkString(Request.Form("YourEmail")) objRec("ThankMessage") = ChkString(Request.Form("ThankMessage")) objRec.Update Response.Write "Изменения сохранены" Else strSQL = "SELECT * FROM admin Where ID=1" objRec.Open strSQL,objConn,0,1 %> <html> <head> <title>ASP на блюдечке. Часть 16. Гостевая книга своими руками — 2. Настройка параметров почты.</title></head> <body> <h1>Настройка параметров почты</h1> <form method="POST" action="modemail.asp?mode=go"> <b>Письмо с благодарностями пользователю:</b><br> <SELECT NAME="AutoEmail"> <OPTION VALUE="True" <% If objRec("AutoEmail") = "True" then Response.Write "selected" End if %> >Вкл.</OPTION> <OPTION VALUE="False" <% If objRec("AutoEmail") = "False" then Response.Write "selected" End if %> >Выкл.</OPTION> </SELECT> <p> <b>Обратный Email:</b><br> <input type="text" name="YourEmail" size="30" maxlength=70 value="<%=objRec("YourEmail")%>"> <p> <b>Текст благодарностей ползователю:<br> <textarea rows="7" name="ThankMessage" cols="50" wrap=physical><%=objRec("ThankMessage")%></textarea> <p> <b>Уведомление по электронной почте администратору:</b><br> <SELECT NAME="YouEmail"> <OPTION VALUE="True" <% If objRec("YouEmail") = "True" then Response.Write "selected" End if %> >Вкл.</OPTION> <OPTION VALUE="False" <% If objRec("YouEmail") = "False" then Response.Write "selected" End if %> >Выкл.</OPTION> </SELECT> <p> <input type="submit" value=" Принять изменения " name=" Modify "> </p> </form> <% End If objRec.Close Set objRec = Nothing objConn.Close Set objConn = Nothing %> </body> </html>
Модуль настроек интерфейса (файл ModLook.asp)
анный модуль содержит средства, служащие в основном для настройки цвета и шрифтов. Кроме того, он позволяет включать и выключать режим контроля нормативности лексики и формировать словарик ненормативной лексики.
<%@ LANGUAGE="VBSCRIPT"%> <%Response.Buffer = True%> <!-- #INCLUDE FILE="config.asp" --> <% IF NOT Request.Cookies(""&Session.SessionID&"")("Admin") = "true" Then Response.Redirect "login.asp" End If Function ChkString(string) if string = "" then string = " " ChkString = Replace(string, "'", "''") End Function Set objConn = Server.CreateObject ("ADODB.Connection") Set objRec = Server.CreateObject ("ADODB.Recordset") objConn.Open strConn If Request("mode") = "go" then objRec.Open "admin", objConn,2,2,&H0002 objRec.Filter = "ID=1" objRec("Top_Color") = ChkString(Request.Form("Top_Color")) objRec("Bot_Color") = ChkString(Request.Form("Bot_Color")) objRec("Mid_Color") = ChkString(Request.Form("Mid_Color")) objRec("Form_Color") = ChkString(Request.Form("Form_Color")) objRec("FormTitleSize") = Request.Form("FormTitleSize") objRec("MessageFontColor") = ChkString(Request.Form("MessageFontColor")) objRec("MessageFontSize") = Request.Form("MessageFontSize") objRec("MessageFontFace") = ChkString(Request.Form("MessageFontFace")) objRec("InfoFontColor") = ChkString(Request.Form("InfoFontColor")) objRec("InfoFontSize") = Request.Form("InfoFontSize") objRec("InfoFontFace") = ChkString(Request.Form("InfoFontFace")) objRec("PageFontColor") = ChkString(Request.Form("PageFontColor")) objRec("PageFontSize") = Request.Form("PageFontSize") objRec("PageFontFace") = ChkString(Request.Form("PageFontFace")) objRec("NumPerPage") = ChkString(Request.Form("NumPerPage")) objRec("BadWords") = ChkString(Request.Form("BadWords")) objRec("BadOn") = Request.Form("BadFilter") objRec.Update Response.Write "Изменения сохранены." Else strSQL = "SELECT * FROM admin Where ID = 1" objRec.Open strSQL,objConn,0,1 %> <html> <head><title>ASP на блюдечке. Часть 16. Гостевая книга своими руками — 2. Настройка интерфейса</title></head> <body> <h1>Настройка интерфейса гостевой книги</h1> <p> <form method="POST" action="modlook.asp?mode=go"> <b>Цвет верхней строки:</b> <br> <input type="text" name="Top_Color" size="30" maxlength=50 value="<%=objRec("Top_Color")%>"> <p> <b>Цвет нижней строки:</b><br> <input type="text" name="Bot_Color" size="30" maxlength=50 value="<%=objRec("Bot_Color")%>"> <p> <b>Цвет фона текста сообщения:</b><br> <input type="text" name="Mid_Color" size="30" maxlength=50 value="<%=objRec("Mid_Color")%>"> <p> <b>Цвет формы добавления сообщения:</b><br> <input type="text" name="Form_Color" size="30" maxlength=50 value="<%=objRec("Form_Color")%>"> <p> <b>Размер текста заголовка формы добавления сообщения:</b><br> <SELECT NAME="FormTitleSize"> <OPTION VALUE="-3" <% If objRec("FormTitleSize") = "-3" then Response.Write "selected" %> >-3</OPTION> <OPTION VALUE="-2" <% If objRec("FormTitleSize") = "-2" then Response.Write "selected" %> >-2</OPTION> <OPTION VALUE="-1" <% If objRec("FormTitleSize") = "-1" then Response.Write "selected" %> >-1</OPTION> <OPTION VALUE="+1" <% If objRec("FormTitleSize") = "+1" then Response.Write "selected" %> >+1</OPTION> <OPTION VALUE="+2" <% If objRec("FormTitleSize") = "+2" then Response.Write "selected" %> >+2</OPTION> <OPTION VALUE="+3" <% If objRec("FormTitleSize") = "+3" then Response.Write "selected" %> >+3</OPTION> </SELECT> <p> <b>Цвет текста сообщения:</b><br> <input type="text" name="MessageFontColor" size="30" maxlength=50 value="<%=objRec("MessageFontColor")%>"> <p> <b>Размер текста сообщения:</b><br> <SELECT NAME="MessageFontSize"> <OPTION VALUE="-3" <% If objRec("MessageFontSize") = "-3" then Response.Write "selected" %> >-3</OPTION> <OPTION VALUE="-2" <% If objRec("MessageFontSize") = "-2" then Response.Write "selected" %> >-2</OPTION> <OPTION VALUE="-1" <% If objRec("MessageFontSize") = "-1" then Response.Write "selected" %> >-1</OPTION> <OPTION VALUE="+1" <% If objRec("MessageFontSize") = "+1" then Response.Write "selected" %> >+1</OPTION> <OPTION VALUE="+2" <% If objRec("MessageFontSize") = "+2" then Response.Write "selected" %> >+2</OPTION> <OPTION VALUE="+3" <% If objRec("MessageFontSize") = "+3" then Response.Write "selected" %> >+3</OPTION> </SELECT> <p> <b>Шрифт сообщения:</b><br> <input type="text" name="MessageFontFace" size="30" maxlength=50 value="<%=objRec("MessageFontFace")%>"> <p> <b>Цвет остального текста:</b><br> <input type="text" name="InfoFontColor" size="30" maxlength=50 value="<%=objRec("InfoFontColor")%>"> <p> <b>Размер шрифта остального текста:</b><br> <SELECT NAME="InfoFontSize"> <OPTION VALUE="-3" <% If objRec("InfoFontSize") = "-3" then Response.Write "selected" %> >-3</OPTION> <OPTION VALUE="-2" <% If objRec("InfoFontSize") = "-2" then Response.Write "selected" %> >-2</OPTION> <OPTION VALUE="-1" <% If objRec("InfoFontSize") = "-1" then Response.Write "selected" %> >-1</OPTION> <OPTION VALUE="+1" <% If objRec("InfoFontSize") = "+1" then Response.Write "selected" %> >+1</OPTION> <OPTION VALUE="+2" <% If objRec("InfoFontSize") = "+2" then Response.Write "selected" %> >+2</OPTION> <OPTION VALUE="+3" <% If objRec("InfoFontSize") = "+3" then Response.Write "selected" %> >+3</OPTION> </SELECT> <p> <b>Шрифт остального текста гостевой книги:</b><br> <input type="text" name="InfoFontFace" size="30" maxlength=50 value="<%=objRec("InfoFontFace")%>"> <p> <b>Цвет фона страницы:</b><br> <input type="text" name="PageFontColor" size="30" maxlength=50 value="<%=objRec("PageFontColor")%>"> <p> <b>Размер шрифта остальных текстов страницы:</b><br> <SELECT NAME="PageFontSize"> <OPTION VALUE="-3" <% If objRec("InfoFontSize") = "-3" then Response.Write "selected" %> >-3</OPTION> <OPTION VALUE="-2" <% If objRec("InfoFontSize") = "-2" then Response.Write "selected" %> >-2</OPTION> <OPTION VALUE="-1" <% If objRec("InfoFontSize") = "-1" then Response.Write "selected" %> >-1</OPTION> <OPTION VALUE="+1" <% If objRec("InfoFontSize") = "+1" then Response.Write "selected" %> >+1</OPTION> <OPTION VALUE="+2" <% If objRec("InfoFontSize") = "+2" then Response.Write "selected" %> >+2</OPTION> <OPTION VALUE="+3" <% If objRec("InfoFontSize") = "+3" then Response.Write "selected" %> >+3</OPTION> </SELECT> <p> <b>Шрифт остальных текстов страницы:</b><br> <input type="text" name="PageFontFace" size="30" maxlength=50 value="<%=objRec("PageFontFace")%>"> <p> <b>Число сообщений на одной странице:</b><br> <SELECT NAME="NumPerPage"> <OPTION VALUE="5" <% If objRec("NumPerPage") = "5" then Response.Write "selected"%>>5</OPTION> <OPTION VALUE="10" <% If objRec("NumPerPage") = "10" then Response.Write"selected"%>>10</OPTION> <OPTION VALUE="15" <% If objRec("NumPerPage") = "15" then Response.Write selected"%>>15</OPTION> <OPTION VALUE="20" <% If objRec("NumPerPage") = "20" then Response.Write"selected"%>>20</OPTION> <OPTION VALUE="25" <% If objRec("NumPerPage") = "25" then Response.Write"selected"%>>25</OPTION> <OPTION VALUE="30" <% If objRec("NumPerPage") = "30" then Response.Write"selected"%>>30</OPTION> <OPTION VALUE="35" <% If objRec("NumPerPage") = "35" then Response.Write"selected"%>>35</OPTION> <OPTION VALUE="40" <% If objRec("NumPerPage") = "40" then Response.Write"selected"%>>40</OPTION> <OPTION VALUE="45" <% If objRec("NumPerPage") = "45" then Response.Write"selected"%>>45</OPTION> <OPTION VALUE="50" <% If objRec("NumPerPage") = "50" then Response.Write"selected"%>>50</OPTION> </SELECT> <p><b>Фильтр ненормативной лексики:</b><br> <SELECT NAME="BadFilter"> <OPTION VALUE="True" <% If objRec("BadOn") = "True" then Response.Write "selected" %> >Вкл.</OPTION> <OPTION VALUE="False" <% If objRec("BadOn") = "False" then Response.Write "selected" %> >Вык.</OPTION> </SELECT> <p> <b>Словарик ненормативной лексики:</b><br> <% Dim BW BW = objRec("BadWords")%> <input type="text" name="BadWords" size="30" maxlength=255 value="<% Response.Write BW%>"> <p> <input type="submit" value=" Принять изменения " name=" Modify "> </p> </form> <% End If objRec.Close Set objRec = Nothing objConn.Close Set objConn = Nothing %> </body> </html>
Заключение
ы рассмотрели систему настройки поведения и вида уже готового функционального компонента сайта. Конечно, Web-интерфейс в данном случае не единственная возможность настройки, ведь в принципе настройку можно производить и вручную, непосредственно с консоли администратора базы данных. Для этого можно также разработать программный интерфейс. Но если этот процесс выполняется неоднократно или настройки меняются слишком часто, то интерфейс просто необходим. Недостатками «программного подхода» являются необходимость его инсталляции, сложность удаленного администрирования (ведь компонент настройки может быть расположен далеко от сервера) и, как следствие, зависимость от сервера. В то же время Web-версия независима от сервера, потому что настроена «под него», и обычно работает с локальным сервером данных, поскольку предполагается, что данные и код хранятся на одном и том же сервере.
Кроме того, следует отметить, что хотя в нашем случае мы оперировали единственной настройкой, в общем случае их может быть несколько. Так, к примеру, у одного и того же сайта может быть несколько моделей гостевых книг, причем выбираться та или иная может, например, случайным образом, привнося тем самым некое разнообразие и элемент неожиданности в сайт. Такая задумка легко реализуема при помощи рассмотренной в настоящей статье технологии.
КомпьютерПресс 12'2001