Страницы общего доступа
Страницы общего доступа предназначены для обычных посетителей сайта. Как правило, они создаются после административных страниц; в этом случае вы можете использовать последние как образцы для создания "обычных" страниц. В самом деле, "обычные" страницы часто в общих чертах повторяют административные, и вам остается только удалить некоторые возможности, не нужные обычным посетителям. Так мы и сделаем.
Давайте сделаем так, чтобы при входе на сайт посетитель мог выбрать категорию высказываний (зря мы их, что ли, вводили!). А для этого нам понадобится создать страницу списка категорий, чем мы сейчас и займемся.
Создадим новую серверную страницу ASP и сохраним ее в файле Categories. asp в корневой папке сайта. И остановимся, чтобы немного подумать.
Что нам нужно? Правильно, вывести список категорий. А еще? Нам необходимо, чтобы название каждой категории в этом списке представляло собой гиперссылку. Щелкнув по ней, посетитель сайта попадет на другую страницу, на которой будут перечислены все высказывания этой категории.
Как это сделать? Очень просто: надо воспользоваться поведением Go то Detail Раде, выполняющим переход на связанную страницу.
Создадим новый набор записей под именем categories. Задайте выборку всех записей таблицы categories. После этого задайте сортировку записей по полю Name, для чего выберите это поле в раскрывающемся списке Sort диалогового окна Recordset (см. рис. 17.15). Раскрывающийся список, расположенный правее, позволит вам задать порядок сортировки записей: по возрастанию (пункт Ascending) или по убыванию (пункт Descending).
Напишите на странице Categories. asp какой-либо пояснительный текст, если хотите. После этого создайте текстовый абзац и поместите в него динамический текст, связанный с полем Name набора данных categories. Далее выделите этот текст и создайте "вокруг" него повторяющуюся область, привязав ее к созданному нами набору данных categories. Пусть она отображает сразу все записи набора — их не так много, чтобы городить огород с навигатором и строкой статуса.
Собственно, на этом создание страницы списка категорий почти закончено. Осталось только добавить поведение, реализующее переход на страницу со списком высказываний, относящихся к выбранной категории.
Чтобы нам самим было проще в дальнейшем, давайте введем еще пару терминов. Назовем страницу, отображающую список категорий, первичной, а страницу, отображающую список высказываний, относящихся к выбранной категории, — вторичной. В литературе встречаются другие названия таких страниц, но мы будем использовать эти.
Выделите содержимое повторяющейся области, а именно динамический текст. После этого выберите в меню серверных поведений панели Server Behaviors пункт Go То Detail Page. На экране появится диалоговое окно Go То Detail Page (рис. 18.7).
Рис. 18.7. Диалоговое окно Go То Detail Раде |
В поле ввода Detail Page введите интернет-адрес вторичной страницы, отображающей список высказываний. Вы также можете щелкнуть по кнопке Browse и выбрать нужную страницу в диалоговом окне Select File. Мы создадим эту страницу позднее и назовем ее так же, как уже созданную административную страницу списка высказываний, — Sentences. asp, только сохраним в корневой папке сайта.
В поле ввода Pass URL Parameter введите имя параметра, передаваемого из первичной страницы во вторичную. По умолчанию Dreamweaver подставляет в него имя первого поля ввода набора записей, и, если это то поле, которое вам нужно, менять его не стоит.
В раскрывающемся списке Recordset выбирается набор записей, чье поле используется для связи первичной и вторичной страниц. Само же это поле выбирается в раскрывающемся списке Column. В нашем случае это набор записей Categories и его поле ID.
Теперь остается задать метод передачи параметра из первичной страницы во вторичную. Это делается с помощью группы флажков Pass Existing Parameters. Флажок URL Parameters задает использование метода GET, а флажок Form Parameters — метода POST. Нам лучше выбрать метод GET, т. к.
Объем передаваемых данных очень невелик, а хранить их в секрете необязательно.
Введя все данные, нажмите кнопку ОК. После этого Dreamweaver преобразует выделенный фрагмент страницы в гиперссылку, выполняющую переход на вторичную страницу. И, разумеется, создаст поведение Go то Detail Page.
Теперь нужно ограничить доступ к этой странице. Для этого, как вы помните, нужно создать поведение Restrict Access То Page. Задайте разграничение доступа по имени и паролю (переключатель Username and Password диалогового окна Restrict Access То Page). Таким образом, на эту страницу смогут попасть все зарегистрированные посетители вне зависимости от прав доступа.
На этом создание страницы списка категорий можно считать законченным. Наш следующий шаг — создание страницы списка высказываний.
В данном случае лучше всего создать страницу списка высказываний "с нуля". Если же мы решим создать ее на основе созданной ранее административной страницы Sentences. asp, нам придется вносить в нее слишком много изменений. Поэтому создадим новую серверную страницу, напишем на ней поясняющий текст и сохраним под именем Sentences. asp в корневой папке сайта.
После этого создадим набор записей sentences, извлекающий данные из только что созданной таблицы. Зададим для него фильтр по полю Category. Для этого выберите название этого поля в раскрывающемся списке Filter диалогового окна Recordset, а в раскрывающемся списке, расположенном правее, — пункт = (равенство значений поля и фильтра). Далее в списке, расположенном ниже, выберите пункт URL Parameter (параметр, переданный методом GET), а в поле ввода, расположенном ниже и правее, введите имя этого параметра — id.
Кроме того, мы можем не извлекать из таблицы все поля, а ограничимся только полем contents. Включим переключатель Selected в группе Column диалогового окна Recordset и выберем в расположенном ниже списке пункт Content, соответствующий одноименному ПОЛЮ таблицы. Поля ID И Category нам в данном случае не нужны, потому что их содержимое никак не отображается на странице. Это позволит нам уменьшить нагрузку на серверный компьютер, который и без того сильно загружен, ведь для хранения содержимого полей таблиц расходуется его оперативная память.
Теперь поместите в текстовом абзаце динамический текст, привязанный к полю content набора записей, выделите весь абзац, щелкнув по соответствующей кнопке секции тегов, и создайте "вокруг" него повторяющуюся область. Затем сделайте навигатор и строку статуса набора данных.
После этого поместите повторяющуюся область, навигатор и строку статуса внутрь необязательной области, отображающейся только при непустом наборе записей sentences. И создайте еще одну необязательную область, отображающуюся, наоборот, при пустом наборе записей и содержащую текст "Список высказываний пуст". Как видите, мы повторяем шаги, проделанные нами при создании административной страницы Sentences. asp.
Последний шаг (его мы тоже проделывали) — это защита страницы от несанкционированного доступа и предоставление возможности выхода с сайта. Создайте соответствующие поведения и гиперссылку для выхода. Когда будете создавать поведение Restrict Access То Page, задайте разграничение доступа по имени и паролю (переключатель Username and Password диалогового окна Restrict Access То Page). После этого сохраните готовую страницу.
Теперь проверьте готовые страницы. Для этого опубликуйте сайт на Web - сервере, откройте в Web-обозревателе страницу Categories. asp, войдите на сайт (под именем "Admin" — других посетителей в списке нет), выберите категорию и просмотрите отобранные серверной программой высказывания. После этого выйдите с сайта. Если вы все сделали правильно, все должно работать.
Страница регистрации посетителя
Последняя из страниц общего доступа, которую нам нужно создать, — это страница регистрации нового посетителя нашего сайта. В самом деле, если посетитель не сможет зарегистрироваться на нашем сайте, занеся сведения о себе в список посетителей, как же он сможет добраться до содержимого этого сайта?
Создайте новую серверную страницу, поместите на ней поясняющий текст и сохраните под именем Register. asp в корневой папке нашего сайта. Поместите в нее форму и назовите user. В этой форме создайте поля ввода Name (имя посетителя) и Password (пароль) и кнопку отправки данных.
Для регистрации посетителя в списке используется хорошо вам знакомое поведение insert Record. В самом деле, если список посетителей представляет собой таблицу базы данных, а сведения о каждом посетителе — запись в этой таблице, то именно этим поведением и стоит пользоваться. Создайте же его. Пусть содержимое поля ввода Name заносится в поле Name таблицы Users, а содержимое ПОЛЯ ввода Password — В поле Password. Поле Grants, в котором записываются права посетителя, получит значение по умолчанию "user" (обычный посетитель). А в качестве страницы, на которую будет выполнен переход после успешного добавления новой записи, задайте
Categories. asp — в этом случае новоиспеченный посетитель сразу сможет зарегистрироваться и просмотреть плоды нашего ума.
Вроде бы все прекрасно. Посетитель заходит на эту страницу, вводит данные о себе и сразу же получает доступ к сайту. Однако это та самая простота, которая хуже воровства. Почему? Сейчас увидим.
Предположим, какой-то посетитель успешно зарегистрировался на нашем сайте, получил к нему доступ и успешно же вышел с него. После этого на сайте регистрируется второй посетитель. И вводит то же самое имя, под которым уже зарегистрировался первый посетитель!
Если вы не предусмотрите специальных средств для недопущения совпадения имен посетителей (например, не сделаете поле таблицы, где хранится имя, уникальным), это может породить конфликт. А такие конфликты ни к чему хорошему не ведут — они ведут только к плохому!
Именно для недопущения таких случаев Dreamweaver предусматривает особое поведение Check New Username. Это поведение проверяет таблицу списка посетителей на предмет совпадения введенного в форме регистрации имени с уже имеющимися в таблице. Если введенного новым посетителем имени нет в таблице, поведение check New username запускает поведение insert Record, успешно добавляющее в список нового посетителя.
Давайте создадим поведение check New username. Но сначала проверим, действительно ли мы создали поведение Insert Record.
Выберите в подменю User Authentication меню серверных поведений панели Server Behaviors пункт Check New Username. На экране появится диалоговое окно Check New Username, показанное на рис. 18.8.
Рис. 18.8. Диалоговое окно Check New Username |
В раскрывающемся списке Username Field выберите поле ввода, в котором вводится имя посетителя.
В поле ввода If Already Exists, Со То вводится интернет-адрес страницы, на которую будет осуществлен переход, если в списке будет найден посетитель с таким именем. Введите в это поле имя страницы регистрации Register. asp. Вы также можете нажать кнопку Browse и выбрать нужную страницу в диалоговом окне Select File.
Завершив ввод данных, нажмите кнопку ОК. И сохраните готовую страницу.
Осталось сделать совсем немного. А именно — поместить на страницу входа на сайт Login. asp гиперссылку, указывающую на страницу регистрации. Это нужно для того, чтобы новый посетитель сайта смог сразу же после открытия его зарегистрироваться в списке. Сделайте это.
Теперь можете проверить готовую страницу в действии. Опубликуйте сайт на Web-cepeepe, откройте в Web-обозревателе страницу входа Login. asp, зарегистрируйтесь на сайте под другом именем, скажем, "User", и попробуйте войти на сайт.
Реализация поиска высказываний
Все сайты, публикующие информацию из баз данных, предусматривают возможность поиска записей на основе какого-либо критерия. Давайте и мы сделаем возможность поиска высказываний по введенному посетителем слову.
Чтобы посетитель смог ввести слово для поиска, нам нужно создать где-то форму. Давайте поместим ее на странице списка категорий Categories. asp под собственно списком категорий, в новом текстовом абзаце. Назовем форму search, поле ввода слова для поиска — content и не забудем о кнопке отправки данных.
Теперь выделим форму и с помощью редактора свойств введем следующие параметры:
□ Action — имя страницы, отображающей результаты поиска, а именно — Result. asp;
□ Method — метод отправки данных, в нашем случае — GET;
□ Enctype — кодировка отправляемых данных, а именно — appiication/x - www-form-urlencoded.
Теперь, если посетитель введет слово и нажмет кнопку отправки данных, это слово будет отправлено странице Result. asp как параметр гиперссылки
Content.
Далее нужно создать страницу отображения результатов поиска. Создадим ее на основе уже существующей страницы списка высказываний Sen - tences. asp. Для этого откроем ее и сохраним под именем Result. asp в корневой папке сайта. После этого откроем новую страницу.
В панели Bindings удалим параметр гиперссылки id, если он там есть. После этого откроем диалоговое окно Recordset и изменим кое-какие параметры фильтра. В раскрывающемся списке Filter выберем пункт Content (имя поля, по которому мы будем осуществлять поиск) а в раскрывающемся списке, расположенном правее, — пункт contains (поле должно содержать введенное посетителем слово). Далее в списке, расположенном ниже, выберем пункт URL Parameter (параметр, переданный методом GET), а в поле ввода, расположенном ниже и правее, введем имя этого параметра — content. И нажмем кнопку ОК.
Сохраним страницу Result. asp и опубликуем сайт на ¥еЬ-сервере. Войдем на сайт, введем в форму поиска какое-либо слово и нажмем кнопку отправки данных. В результате мы получим страницу со списком найденных высказываний.
Все, наш сайт готов!
Вы можете расширить его. Например, сделать Web-интерфейс для работы со списками категорий и посетителей. Также вы можете добавить дизайнерские изыски — этим мы не занимались вообще. В общем, поработайте над сайтом, практика пойдет вам на пользу.
А дальше... все! Книга закончилась.