Работа с динамическими атрибутами
Когда мы говорили о шаблонах (см. главу 9), то выяснили, что атрибуты тегов можно сделать изменяемыми. В Web -страницах, созданных на основе шаблона, мы можем задавать значения для этих атрибутов и, таким образом, менять их внешний вид в более широких пределах. Но атрибуты тегов можно сделать и динамическими, т. е. брать их значения из полей набора данных. Здесь мы рассмотрим, как работать с такими атрибутами.
Давайте сделаем так, чтобы содержимое разных записей набора данных Guestbook отображалось различным цветом в зависимости от значения, содержащегося в поле sign . Пусть, например, содержимое поля Content отображается темно-синим цветом, если в поле sign содержится единица ("Положительно"), темно-красным - если содержится тройка ("Отрицательно"), черным — в остальных случаях (двойка, "Нейтрально"). Соответствующие коды цветов в этом случае:
темно-синий — #000099;
темно-красный — #990000;
черный — #000000.
Откроем базу данных Guestbook.mdb в Access и создадим новое поле в таблице signs . Дадим этому полю имя color , текстовый тип и установим его длину в 7 символов — этого хватит, чтобы хранить коды цветов. После чего откроем таблицу signs и введем коды цветов в соответствующие записи таблицы. После этого закроем Access .
Далее переключимся в Dreamweaver , вызовем диалоговое окно Recordset для набора данных Guestbook и добавим в него вновь созданное поле. Попробуйте сделать это самостоятельно. Если же вы хотите сразу перейти к работе с динамическими атрибутами, просто введите в поле ввода SQL такой код:
SELECT Content, Desc, Color FROM Guestbook, Signs WHERE Sign=ID
Теперь выделим содержимое повторяющейся области страницы, щелкнув по тексту "{ Guestbook . Content }", и зададим для него черный цвет. Для этого воспользуемся хорошо знакомым селектором цвета в редакторе свойств. В результате Dreamweaver поместит содержимое повторяющейся области в тег < font > с атрибутом color — как вы помните, именно с их помощью задается цвет текста.
Теперь выделите содержимое тега < font >, щелкнув по соответствующей кнопке секции тегов. И переключитесь в режим отображения кода. Хотя в интерактивном руководстве и описано, как привязать атрибут к полю набора данных в режиме отображения страницы, но почемуто в данном случае Dreamweaver ведет себя очень странно. В частности, раскрывающийся список Bind To , с помощью которого и выполняется привязка поля набора данных к атрибуту тега, остается недоступным. Поэтому мы поступим иначе.
Выделите значение атрибута color тега < font >. А теперь просто перетащите на него пункт Color панели Bindings . Значение атрибута color примет такой вид (выделено полужирным шрифтом):
< FONT COLOR =" <%=( Guestbook . Fields . Item (" Color "). Value )%>">
Код, который Dreamweaver подставил в качестве значения атрибута color , извлекает из поля Color набора данных значение цвета и присваивает его атрибуту color . Как видите, все достаточно просто и, опять же, "прозрачно".
Точно таким же образом вы можете создавать другие динамические атрибуты. Главное — "попасть" мышью в нужный фрагмент исходного кода. Но, вероятно, вы с этим справитесь и сами.
Вот и все. Теперь можете открыть вашу страницу в Web -обозревателе и посмотреть на получившийся результат.
Получение данных от другой Web - страницы
Мы выяснили, как передать данные, введенные в форму, в таблицу, создав, таким образом, новую запись. Но не всегда данные, переданные с другой страницы, нужно сохранять в базе. Иногда их необходимо обработать на другой странице, нигде не сохраняя.
Давайте сделаем следующее. Создадим небольшую статичную Web -страничку с тремя гиперссылками, направляющими посетителя на страницу Guestbook _ table.asp и заставляющими последнюю показать только записи, удовлетворяющие определенному условию. Пусть первая из них будет показывать записи, значения поля sign которых равно 1, вторая — записи с полем sign , равным 2, третья — 3. Назовем эту страницу Selector.htm .
Интернет-адрес первой гиперссылки страницы Selector.htm будет таков:
Guestbook _ table . asp ? sign = 1
Здесь мы передаем методом GET странице Guestbook _ table.asp параметр sign , равный 1. (Вспомните главу 15, где описывались оба метода передачи данных.) Соответственно, адреса других гиперссылок будут отличаться от этого только значением параметра sign .
А для того чтобы отобрать нужные записи из набора данных Guestbook страницы
Guestbook _ table.asp , мы используем фильтр, сравнивающий значение поля sign со значением параметра sign , переданного нам от страницы Selector.htm . Как видите, все очень просто и довольно наглядно.
Нет смысла подробно описывать, как создается страница Selector.htm — это вы уже знаете. Вместо этого сосредоточимся на странице Guestbook _ table.asp и фильтре, отбирающем записи из таблиц в набор. Откройте данную страницу, если вы ее уже закрыли. И переключитесь в панель Bindings .
Для того чтобы получить данные от другой Web -страницы, нам нужно создать параметр гиперссылки. Этот параметр впоследствии примет значение, переданное от другой страницы методом GET . А уж принятое им значение мы сможем использовать где угодно.
Чтобы создать параметр гиперссылки, выберите в меню кнопки "плюс" панели Bindings пункт Request Variable . После этого на экране появится диалоговое окно Request Variable .
В раскрывающемся списке Туре выберите пункт Request . QueryString , а в поле ввода Name введите имя создаваемого параметра (в нашем случае - sign ). Затем нажмите кнопку ОК. После этого в списке панели Bindings появится новая ветвь Request с единственным пунктом QueryString . sign .
Внимание!
Вы не сможете изменить созданный вами параметр гиперссылки , так что вводите данные внимательно . Если вы все же ошиблись , удалите неверно заданный параметр и создайте его заново .
Если же вы передаете данные методом POST , вам будет нужно создать параметр формы. Для этого выберите в меню кнопки "плюс" все тот же пункт Request Variable , но в раскрывающемся списке Туре диалогового окна Request Variable выберите пункт Request . Form .
Создание фильтров
А теперь можно приступить к созданию фильтра, отбирающего записи из таблицы в набор.
Помните, как мы создали сложный набор данных? Если не помните, рассмотрим код SQL -запроса, созданного нами:
SELECT Content, Desc, Color FROM Guestbook, Signs WHERE Sign=ID
Ключевое слово where языка SQL задает условие, согласно которому из таблицы будут извлекаться записи. В приведенном выше примере мы уже фактически создали условие, отбирающее только те записи таблицы Guestbook , для которых в таблице signs имеется "пара". Причем "пары" мы отбирали по значениям поля sign таблицы Guestbook и поля id таблицы signs . Такие условия называются условиями связи таблиц.
Фильтром же называется условие отбора записей. Это условие используется не для связи таблиц, а для отбора записей из таблицы. Например, в приве денном ниже SQL -запросе используется именно условие отбора записей, иначе говоря, фильтр:
SELECT Content FROM Guestbook WHERE Sign=2
Этот запрос создаст набор данных, включающий только те записи таблицы Guestbook , поля sign которых содержат значение 2 ("Нейтрально").
Чтобы создать фильтр, нам придется добавить условие отбора записей к уже существующему условию связи таблиц. Это совсем просто. Вызовите диалоговое окно Recordset для нашего набора данных Guestbook . Если оно отобразилось в обычном виде, щелкните кнопку Advanced , чтобы переключить его в расширенный вид. И посмотрите на содержимое поля ввода SQL .
Итак, нам нужно добавить в SQL-запрос новое условие. Мы будем сравнивать значение поля sign и...
Но с чем мы его будем сравнивать?
Ах, да, с параметром sign , переданным страницей Selector.htm . Но как его сюда ввести?
Очень просто. Для этого нам понадобится создать переменную SQL -запроса, представляющую некий параметр, полученный от другой Web -страницы или в результате каких-то вычислений. И в этом нам поможет список Variables диалогового окна Recordset и относящиеся к нему элементы управления.
Нажмите кнопку со знаком "плюс". В списке появится новая строка. Щелкните по этой строке в районе колонки Name (имя создаваемой переменной) и введите это имя, в нашем случае — sign . После этого щелкните в районе колонки Default Value (значение переменной по умолчанию, присваиваемое ей изначально) и введите, скажем, 2 (т. е. по умолчанию будут выводиться только "нейтральные" записи). Теперь останется лишь ввести в колонку Runtime Value выражение, задающее истинное значение этой переменной. В нашем случае это будет следующий код:
Request . QueryString (" sign ")
Он извлекает из строки запроса, переданной методом GET , параметр sign . Если же вы передаете параметры методом POST , код будет несколько иным:
Request . Form (" sign ")
Вот и все. Мы создали переменную SQL -запроса и теперь можем ее использовать.
Откройте в списке Database Items ветви Tables и Guestbook и выберите пункт Sign . Поставьте текстовый курсор в поле ввода SQL после текста " WHERE Sign = ID " и нажмите кнопку WHERE . Содержимое поля ввода SQL станет таким :
SELECT Content, Desc, Color FROM Guestbook, Signs WHERE Sign= ID AND Sign
Поставьте текстовый курсор после текста " AND Sign " и введите вручную текст = sign . Таким образом , окончательный SQL- запрос будет выглядеть так :
SELECT Content, Desc, Color FROM Guestbook, Signs WHERE Sign=ID AND Sign=sign
Все, наш новый запрос создан. Можете нажать кнопку ОК. Перед этим, однако, лучше нажать кнопку Test , чтобы проверить правильность задания запроса. Так, на всякий случай.
Теперь сохраните страницу Guestbook _ table.asp и опубликуйте ее на Web -сервере вместе со страницей Selector.htm . После этого откройте в Web -обозревателе страницу Selector.htm , набрав в строке адреса следующее:
http://localhost/HTMLs/Selector.htm
Пощелкайте по ссылкам и посмотрите, что из этого получится. Если же серверная страница упорно выдает вам список всех записей гостевой книги, то просто нажмите кнопку обновления вашего Web -обозревателя.