Использование пакета Dreamweaver

Гиперссылки в шаблонах

Гиперссылки в шаблонах

Чтобы вы лучше поняли, о чем вам хочет поведать автор, ниже приведена физическая структура нашего сайта. Как и раньше, имена папок не имеют расширения, а имена файлов — имеют. Эта структура приведена не полностью, чтобы не загромождать текст книги и не запутывать вас, а ровно настолько, чтобы вы поняли.

<Корневая папка сайта> default.htm HTMLs

archive.htm

Pics NAVBAR

spacer.gif

Templates main.dwt

Возьмем страницу default.htm. Все гиперссылки, находящиеся на ней, даны относительно файла default.htm. Например, гиперссылка, ссылающаяся на страницу списка проектов, имеет следующий адрес:

HTMLs / Projects.htm

Проверьте по вышеприведенной схеме — он правилен.

Теперь мы создали на основе этой страницы шаблон Main.dwt. Как вы уже знаете, все шаблоны сохраняются в специальной вложенной папке Templates корневой папки сайта, поэтому гиперссылки, содержащиеся в этом шаблоне, по идее, должны "осиротеть". Однако Dreamweaver автоматически скорректирует все ссылки, чтобы они указывали на те же файлы. И ссылка, указывающая на страницу списка проектов, будет иметь такой адрес:

../HTMLs/Projects.htm

При создании страницы на основе этого шаблона (пусть это будет страница Archive.htm) Dreamweaver опять же корректирует интернет-адреса всех гиперссылок. Таким образом, наша многострадальная гиперссылка будет иметь вид:

Projects.htm

Проверьте по вышеприведенной структуре сайта — она корректна.

Все это справедливо не только для гиперссылок. Имена файлов графических изображений, фильмов и прочих внедренных объектов корректируются точно так же. Dreamweaver следит за тем, чтобы ни одна ссылка не стала "сиротой".

Конечно, мы рассматривали только те гиперссылки, адреса которых задавались относительно файла страницы. Гиперссылки с адресами, заданными относительно корневой папки сайта, всегда останутся корректными, несмотря на любые перемещения между папками.

Из этого следуют два важнейших правила, которые вам всегда следует соблюдать при использовании шаблонов и интернет-адресов, заданных относительно файлов страницы.

  • Если вы создаете гиперссылку в обычной Web-странице, задавайте ее адрес относительно файла этой страницы.
  • Если вы создаете гиперссылку в шаблоне, задавайте ее адрес относительно файла шаблона. Dreamweaver автоматически выполнит преобразование адресов при создании страниц на основе этого шаблона.


  • Изменяемые атрибуты

    Изменяемые атрибуты

    Dreamweaver MX позволяет вам сделать некоторые атрибуты любых тегов HTML-кода шаблона изменяемыми. Вы можете изменять значения этих атрибутов в страницах, созданных на основе шаблона, содержащего этот тег. Например, вы можете менять цвет фона тех или иных страниц или цвет какой-либо надписи.

    Чтобы сделать какой-то атрибут тега изменяемым, сначала откройте в окне документа нужный шаблон. После этого выберите элемент страницы, атрибут тега которого вы хотите сделать изменяемым. Пусть, например, это будет заголовок нашего сайта (текст "Иван Иванович Иванов" в верхней части страницы). Выделите весь заголовок или просто щелкните по тегу в секции тегов. Теперь все готово.

    Выберите пункт Make Attribute Editable подменю Templates меню Modify. На экране появится диалоговое окно Editable Tag Attributes (Рисунок 9.19).



    Экспорт Webстраниц основанных на шаблонах

    Экспорт Web-страниц, основанных на шаблонах

    Иногда бывает так, что вам нужно преобразовать страницы сайта, основанные на шаблонах, в обычные. Иначе говоря, вам нужно "очистить" HTML-код таких Web-страниц от всех служебных тегов, атрибутов и комментариев, которые поместил туда Dreamweaver. В терминологии последнего такое действие называется экспортом.

    К сожалению, Dreamweaver позволяет экспортировать только сайт целиком, но никак не отдельную страницу. Хотя, это может быть оправдано. В самом деле, экспортировать стоит лишь уже законченные сайты, когда вносить изменения в страницы уже не нужно. (Вспомните, что шаблоны и были созданы как раз для облегчения создания страниц и внесения в них изменений.) Если же страница не закончена, то ее необходимо прежде всего доделать, а уже потом экспортировать.

    Чтобы экспортировать сайт, сначала откройте одну из его страниц в окне документа. Далее выберите пункт Export without Markup в подменю Templates меню Modify. После этого на экране появится диалоговое окно Export Site Without Template Markup (Рисунок 9.16).



    Недостатки шаблонов и их преодоление

    Недостатки шаблонов и их преодоление

    С преимуществами шаблонов мы уже знакомы. Перечислим их еще раз.

    Используя шаблоны, вы не должны создавать всякий раз на каждой странице общие элементы: полосу навигации, заголовок, сведения об авторских правах и т. п. Вам даже не нужно создавать разметку для любой страницы. Все это вы можете сделать один-единственный раз, когда создаете шаблон, и потом Dreamweaver сам будет копировать эти общие элементы на каждую создаваемую на основе этого шаблона страницу. Таким образом, вы экономите время, повторно используя общие элементы ваших страниц.

    Если вы что-то изменили в шаблоне, все сделанные вами изменения автоматически или по специальной команде переносятся во все созданные на основе измененного шаблона страницы. Dreamweaver сам определяет, какие страницы и какой именно код в этих страницах надо обновить, т. е. Dreamweaver берет заботы по синхронизации кода шаблона и страниц на себя.

    А уж если добавить ко всему этому новые возможности, предлагаемые Dreamweaver MX, то ваши возможности по созданию шаблонов становятся практически безграничными. Необязательные и повторяющиеся области и вложенные шаблоны дают вам в руки невиданную гибкость.

    Теперь сдобрим эту огромную бочку меда капелькой дегтя: упомянем о недостатках шаблонов.

    Недостатков у них всего два, но не очень серьезных. Поэтому наша капля дегтя не так уж и велика.

    Первый недостаток — собственно, даже не недостаток, а, как иногда говорят, "продолжение достоинств" шаблонов. Шаблон — штука очень статичная, он жестко навязывает вам определенный дизайн страниц, загоняет вас в рамки, выйти из которых очень трудно, если вообще возможно. Мы не можем произвольно менять содержимое страниц, основанных на шаблонах, т. к. шаблон, как вы помните, представляет собой сплошную нередактируемую область. Мы даже вынуждены специально указывать места, где мы хотим что-то вставить в дальнейшем.

    Второй недостаток — дополнительный код HTML, добавляемый Dreamweaver для собственного удобства. Правда, этот код не слишком велик, но для "пуритан" HTML, "вылизывающих" свой код до байта, может оказаться чрезмерно большим.

    Так использовать шаблоны или продолжать все делать вручную? Вы сами должны решить этот вопрос для себя.

    Когда мы начинаем делать страницы на основе шаблона, мы теряем часть своей свободы. Готовы ли вы расстаться даже с этой частью? Не окажется ли эта часть для вас слишком велика? Задумайтесь над этими вопросами перед тем, как начать работу над сайтом.

    Автор рекомендует вам все же использовать шаблоны везде, где это возможно. В конце концов, Dreamweaver MX продвинулся в деле "шаблонизации" труда Web-дизайнера куда дальше предыдущих версий, и рамки, навязываемые вам шаблонами, стали не такими жесткими. К тому же, не забывайте, что не кто иной, как вы сами задаете эти рамки. И, если они станут для вас слишком тесными, вы всегда можете изменить шаблоны, добавить необязательные и повторяющиеся области, создать изменяемые атрибуты, одним словом, сделать все, чтобы вам было удобнее.

    Что касается "раздувшегося" HTML-кода... Вы помните, что Dreamweaver MX поддерживает экспорт сайтов с удалением всей специальной разметки? Так что вы можете создать свой сайт на основе шаблонов, а опубликовать на Web-сервере его "очищенную" копию, не содержащую вставленный Dreamweaver HTML-код. Даже пуритане HTML должны быть этим довольны, тем более что шаблоны действительно здорово облегчают работу.

    Одним словом, шаблоны — это замечательно!

    Необязательные изменяемые области

    Необязательные изменяемые области

    Далеко не всегда приходится создавать такие сложные структуры областей, наподобие той, что мы только что сделали. Часто нужно просто создать в шаблоне необязательную область и поместить в нее изменяемую область. Для таких случаев Dreamweaver предоставляет возможность сделать все это за один раз, т. е. создать необязательную изменяемую область.

    Откройте созданный нами в начале этой главы пустой шаблон Sample. С ним-то мы и будем экспериментировать.

    Чтобы создать необязательную изменяемую область, нажмите кнопку Editable Optional Region (Рисунок 9.32) на вкладке Templates панели объектов. Также вы можете выбрать пункт Editable Optional Region подменю Template Objects меню Insert.



    Необязательные области

    Необязательные области

    Эх, ну до чего же хорош Dreamweaver MX! Что он позволяет сделать! Другие программы Web-дизайнеров, да и старые версии Dreamweaver ему и в подметки не годятся!..

    Вы спросите: что это автор так расхваливает этот Dreamweaver, который и так уже у вас в печенках сидит? Ну нравится он автору, и ничего не поделаешь.

    Давайте еще раз посмотрим на страницы нашего нового сайта Sample site 3. Вроде, все неплохо. Почти все страницы созданы на основе шаблона Main. Это хорошо: нам не нужно вносить исправления во все повторяющиеся элементы на всех страницах сайта — это сделает за нас Dreamweaver. Уже одно это — повод для восхищения этой замечательной программой.

    Но одна страница нашего сайта не основана на шаблоне. Да-да, она самая — главная страница default.htm. Она сильно отличается от остальных тем, что содержит колонку новостей, которой нет в шаблоне. Вносить эту колонку в шаблон смысла нет — на остальных страницах она отсутствует. А даже если мы это сделаем, на страницах сайта появится дополнительный HTML-код, увеличивающий размер файлов и — абсолютно ненужный.

    Вот если бы имелась возможность создавать необязательные области, которые, в зависимости от некоего условия, присутствовали бы или не присутствовали бы на странице...

    Но такая возможность есть! Она появилась именно в Dreamweaver MX. Он может создавать необязательные области (они так и называются), которые могут либо быть, либо не быть. И ответ на риторический вопрос "быть или не быть" даете вы.

    Давайте создадим необязательную область, которая будет содержать колонку новостей. Для этого откроем шаблон Main в окне документа. Изменим размеры ячейки основного содержимого, чтобы справа осталось место под колонку новостей. Поместим в нее новую таблицу разметки с тремя ячейками, расположенными вертикально; они будут содержать соответственно заголовок, собственно новости и ссылку на страницу архива новостей. Как это сделать, вы уже знаете, а если забыли, посмотрите главу 8. Далее поместим в ячейки заголовка и ссылки на страницу архива новостей соответствующий текст, а ячейку новостей оставим пустой. То, что у нас должно получиться, показано на Рисунок 9.22.



    Новые возможности шаблонов

    Новые возможности шаблонов

    Здесь мы рассмотрим некоторые весьма полезные возможности, появившиеся в Dreamweaver MX. Конечно же, эти возможности касаются поддержки шаблонов.

    Обновление страниц созданных на основе шаблонов

    Обновление страниц, созданных на основе шаблонов

    Теперь представим себе такую ситуацию. Вам понадобилось что-то изменить в созданном ранее шаблоне. Может быть, это простая орфографическая ошибка или опечатка, а может, неверная гиперссылка или неудачная расцветка текста в неизменяемой области. Это не важно. Важно то, что вы открыли этот шаблон (вы знаете, как это сделать) и соответственно изменили его. Как перенести эти изменения во все созданные на его основе Web-страницы?

    Как правило, вам не нужно об этом заботиться. Dreamweaver берет на себя контроль за актуальностью страниц, созданных на основе измененного шаблона. И едва вы сохраните этот шаблон, он сразу переносит все сделанные изменения в соответствующие страницы. При этом на экране появляется диалоговое окно Update Files, показанное на Рисунок 6.14. Вам останется только нажать кнопку Update (рекомендуется) или Don't Update (может иногда пригодиться). Далее на экране появится диалоговое окно со статистикой (сколько страниц было обновлено); закройте его щелчком по кнопке Close.

    Но иногда может понадобиться обновить страницы сайта вручную.

    Чтобы обновить страницу, открытую в активном окне документа, просто выберите пункт Update Current Page подменю Templates меню Modify. Страница будет тотчас обновлена. Если у вас активна панель Assets, вы также можете выбрать пункт Update Current Page контекстного меню.

    Если вы хотите обновить все страницы сайта или все страницы, основанные на каком-либо шаблоне, выберите пункт Update Pages подменю Templates меню Modify или пункт Update Site контекстного или дополнительного меню панели Assets. На экране появится диалоговое окно Update Pages, показанное на Рисунок 6.38. Использование этого диалогового окна описано в главе 5, поэтому здесь ограничимся лишь минимальными рекомендациями. Включите флажок Templates, установите другие параметры и нажмите кнопку Start. После того как Dreamweaver закончит обновление страниц, закройте это окно, нажав кнопку Close.

    Вот и все об обновлении страниц.

    Повторяющиеся области

    Повторяющиеся области

    Кроме необязательных, Dreamweaver MX позволяет также создавать повторяющиеся области. Повторяющаяся область может содержать сколько угодно содержимых (пунктов). В качестве примера такой области можно привести

    описание новости в колонке на странице default.htm — их может быть много, но в шаблоне для него создана только одна область.

    Давайте создадим такую область.

    Откройте шаблон Main и поместите текстовый курсор в ячейку новостей внутренней таблицы разметки. После этого нажмем кнопку Repeating Region (Рисунок 9.26) на вкладке Templates панели объектов. Также можно выбрать пункт Repeating Region подменю Template Objects меню Modify или одноименный пункт подменю Templates контекстного меню. На экране появится диалоговое окно New Repeating Region, показанное на Рисунок 9.27.



    Применение шаблонов к уже созданным Webстраницам

    Применение шаблонов к уже созданным Web-страницам

    Хорошо! Создавать страницы на основе шаблонов "с нуля" мы научились. Но в Web-дизайне, как и во многих других областях человеческой жизни, далеко не всегда приходится создавать что-то с чистого листа. Возникает необходимость использовать чьи-то наработки, часто дорогостоящие, а иной раз и уникальные, неповторимые и невосстановимые. Например, очень часто приходится переделывать дизайн целых сайтов, а это как раз такой случай.

    В частности, у нас уже есть набор страниц нашего второго сайта Sample site 2, сделанного на основе фреймов. Нам нужно быстро преобразовать их в новый вид для третьего сайта, который мы создаем сейчас. Как это сделать?

    Очень просто!

    Давайте преобразуем в новый вид страницу Projects.htm сайта Sample site 2. (Остальные страницы данного сайта преобразуются аналогично.) Для этого найдите соответствующий файл во вложенной папке HTMLs корневой папки второго сайта и скопируйте его во вложенную папку HTMLs нового сайта.

    Далее в панели Site откройте папку HTMLs сайта Sample site 3 и найдите страницу Projects.htm. Откройте ее в окне документа.

    Последующие наши действия будут зависеть от того, активизирована ли у вас панель Assets со списком шаблонов. Если она активизирована, применение шаблона к странице выполняется очень просто. Для этого выберите в списке шаблонов нужный и нажмите кнопку Apply в левом нижнем углу панели, либо вызовите контекстное или дополнительное меню и выберите пункт Apply, либо просто перетащите нужный шаблон из списка в окно документа. После этого на экране появится диалоговое окно Inconsistent Region Names, показанное на Рисунок 9.14.

    Большую часть этого диалогового окна занимает список, состоящий из двух колонок: в левой отображаются имена изменяемых областей, имеющихся в открытой странице, а в правой — имена изменяемых областей шаблона, куда будет перемещено их содержимое. В нашем случае страница Projects.htm старого сайта не имеет изменяемых областей, поэтому в списке будет присутствовать только один значимый пункт — Document body (тело страницы). В правой колонке списка против этого пункта будет стоять надпись , обозначающая, что Dreamweaver не знает, куда поместить содержимое страницы.



    Работа с шаблонами

    Работа с шаблонами

    С теорией мы закончили. Пора переходить к практике.


    Редактирование шаблона

    Редактирование шаблона

    Пустой шаблон необходимо наполнить содержимым. Шаблон, созданный на основе Web-страницы, нужно отредактировать: убрать уникальное для этой страницы содержимое, оставив только общие для всех страниц сайта элементы. Для этого вам надо будет открыть шаблон для редактирования в окне документа, как обычную Web-страницу.

    Сделать это можно тремя способами:

  • щелкнуть по нужной позиции списка шаблонов правой кнопкой мыши и выбрать пункт Edit контекстного или дополнительного меню;
  • выбрать нужный шаблон в списке и нажать кнопку Edit в правом нижнем углу панели Assets (Рисунок 9.5);
  • дважды щелкнуть по нужному шаблону в списке.


  • Кнопка New Template

    Рисунок 9.1. Кнопка New Template

    Кнопка New Template

    Поскольку ваш шаблон в данный момент ничего не содержит, Dreamweaver предупредит вас об этом, выведя соответствующий текст на панели предварительного просмотра (Рисунок 9.2). Вам нужно будет поместить в этот шаблон cодержимое. Но об этом будет рассказано позже.

    Создать новый шаблон на основе существующей Web-страницы еще проще. Для этого откройте нужную Web-страницу, например default.htm, и выберите в меню File пункт Save as Template. Также вы можете нажать кнопку Make Template (Рисунок 9.3) вкладки Templates панели объектов. На экране появится диалоговое окно Save As Template, показанное на Рисунок 9.4.



    Вновь созданная изменяемая область

    Рисунок 9.10. Вновь созданная изменяемая область

    Вновь созданная изменяемая область

    Когда вы нажмете кнопку ОК, вы увидите следующее — см. Рисунок 9.10. Так выглядит в окне документа Dreamweaver изменяемая область, в которую мы превратили основное содержимое нашей страницы. Вверху вы видите небольшой голубой ярлычок — заголовок, содержащий имя изменяемой области; он похож на заголовок таблиц разметки. Щелкнув его, вы выделите изменяемую область. Ниже, в синей рамке, находится содержимое изменяемой области, в нашем случае — текст основного содержимого. (Если вы создали пустую изменяемую область, она будет содержать только текст ее имени.) При выборе изменяемой области содержимое области будет выделено.

    Чтобы поместить в изменяемую область новый текст, сначала выделите все то, что содержится в синей рамке, но не удаляйте, иначе будет удалена сама изменяемая область. После этого вы можете набирать там другой текст — он заменит собой старое содержимое изменяемой области. Также вы можете разместить внутри изменяемой области все, что предлагают вам HTML и Dreamweaver: таблицы, гиперссылки, изображения и т. п. При вводе текста или иного содержимого в изменяемую область окружающая его синяя рамка будет растягиваться, чтобы вместить его полностью.

    Запомните, что при редактировании шаблона вы можете изменять все, что угодно. В том числе, вы можете поместить в редактируемые области любое содержимое, а потом изменить его в создаваемых на базе данного шаблона Web-страницах. Но когда вы создаете сами страницы, то изменять можете только содержимое изменяемых областей.

    Чтобы выбрать нужную изменяемую область, вы можете щелкнуть по ее заголовку. Но если шаблон достаточно велик и полностью не помещается в окне документа, вам придется постоянно прокручивать его содержимое в поисках нужной изменяемой области. Для такого случая Dreamweaver припас вам приятный сюрприз. Вызовите на экран контекстное меню, откройте подменю Templates, а в нем — подменю Editable Regions. В нем будут перечислены все созданные в этом шаблоне изменяемые области. Вам останется только выбрать нужный пункт этого подменю, и Dreamweaver покажет вам соответствующую изменяемую область.

    Кроме подменю Editable Regions, список всех созданных в шаблоне изменяемых областей находится также внизу подменю Templates меню Modify.

    Если вы поместили изменяемую область не в то место, куда хотели, это можно исправить. Выделите нужную изменяемую область, щелкнув мышью по ее заголовку. После этого "ухватите" ее мышью за содержимое и перетащите на нужное место. Вот и все.

    Однако, если вы ошиблись в наборе имени, вам придется править HTML-код шаблона. Как уже говорилось, чтобы отделить неизменяемое содержимое шаблона от содержимого изменяемой области, Dreamweaver вставляет в HTML-код специальные комментарии. Они имеют такой вид:

    { Содержимое изменяемой области }

    Как видите, здесь всего два комментария: первый исполняет функцию открывающего тега, второй — закрывающего. Имя изменяемой области находится в первом комментарии; оно выделено полужирным шрифтом. Измените его на нужное.



    Диалоговое окно New

    Рисунок 9.11. Диалоговое окно New Document (вкладка Templates)

    Диалоговое окно New

    Если вам нужно создать страницу, чье содержимое будет значительно отличаться от шаблона, отключите этот флажок. После этого вы сможете изменять ее как угодно.

    Чтобы создать новую страницу на основе выбранного шаблона, нажмите кнопку Create. Чтобы отказаться от создания страницы, нажмите кнопку Cancel.

    Второй способ создания новой страницы на основе шаблона намного проще. Откройте панель Assets, переключитесь на список шаблонов, выберите в списке нужный шаблон и в контекстном или дополнительном меню -пункт New from Template.

    Как бы то ни было, на экране появится окно документа, содержащее в себе новую Web-страницу (Рисунок 9.12). Созданная нами изменяемая область выделена синей рамкой. Кроме ее содержимого, ни один другой элемент страницы не может быть изменен; при наведении на него курсора мыши последний меняет форму на перечеркнутый круг. Мы даже не можем их выделить. Также невозможно изменить параметры таблицы или ее элементов. Шаблон надежно защищен от редактирования.



    Только что созданная

    Рисунок 9.12. Только что созданная Web-страница, основанная на шаблоне Main

    Только что созданная

    В правом верхнем углу находится небольшой желтый ярлычок, показывающий имя шаблона, на котором базируется создаваемая Web-страница. Таким образом, вы не забудете его имя.

    Для поиска изменяемых областей на странице вы также можете пользоваться уже знакомым вам подменю Editable Regions, находящемся в подменю Templates контекстного меню. Там перечислен список всех имеющихся в шаблоне изменяемых областей; вам нужно будет только выбрать соответствующий пункт. Помните также, что список изменяемых областей приведен внизу подменю Templates меню Modify.

    Если вы переключитесь в режим отображения HTML-кода, вы также не сможете изменять код нередактируемой области вручную. Хотя сможете его просмотреть; HTML-код, принадлежащий шаблону (нередактируемый), выделен в окне документа тускло-серым цветом.

    Но хватит созерцать разноцветный HTML-код. Давайте создадим Web-страницу архива новостей. Введите в единственную изменяемую область какой-либо текст. Придумайте какие-нибудь старые1 новости или просто напишите, что архива пока нет, поскольку нет новостей. Сохраните страницу под именем Archive.htm во вложенной папке HTMLs. В свое время на начальной странице мы поместили гиперссылку, ссылающуюся на эту страницу.

    Взгляните на Рисунок 9.13. Там показано, что у нас должно получиться в результате. Как видите, изменяемые области также выделяются голубым цветом, как при редактировании шаблона.



    Изменяемая область

    Рисунок 9.13. Изменяемая область на создаваемой странице Archive.htm

    Изменяемая область

    Итак, новая страница, базирующаяся на шаблоне, создана! Что можно сделать с ней еще?

    Если вам вдруг понадобилось изменить шаблон (например, вы обнаружили в нем ошибку), то вы сможете легко вызвать его на редактирование. Для этого выберите пункт Open Attached Template подменю Templates меню Modify или аналогичный пункт контекстного меню. На экране тотчас появится окно документа, где будет открыт этот шаблон.

    Иногда возникает необходимость создать страницу, чей дизайн сильно отличается от предоставляемого шаблоном. В этом случае вы можете создать на основе данного шаблона страницу, а потом "отвязать" ее от этого шаблона. Для этого выберите пункт Detach from Template подменю Templates меню Modify. Страница будет "откреплена" от шаблона; и желтый ярлычок, мозолящий вам глаза в правом верхнем углу окна документа, пропадет.

    Диалоговое окно Inconsistent Region Names

    Рисунок 9.14. Диалоговое окно Inconsistent Region Names

    Диалоговое окно Inconsistent Region Names

    Под списком находится раскрывающийся список Move Content to New Region, в котором задается изменяемая область шаблона, куда будет перемещено содержимое страницы. Среди пунктов этого списка будут перечислены все изменяемые области шаблона. Если же вы выберете пункт Nowhere, содержимое страницы будет потеряно. Чтобы переместить содержимое всех изменяемых областей открытой страницы в какую-то одну, чье имя выбрано в списке Move Content to New Region, нажмите кнопку Use for All.

    Выделите единственный пункт списка и выберите в раскрывающемся списке Move Content to New Region нужную изменяемую область шаблона, в нашем случае Main. После чего нажмите кнопку ОК для перемещения в нее содержимого страницы или Cancel — для отказа от этого.

    Полученный после нажатия кнопки ОК результат показан на Рисунок 9.15. Как видите, Dreamweaver прекрасно справился со своей задачей. Теперь вы можете, если хотите, подредактировать содержимое страницы и сохранить ее.

    Теперь преобразуем в новый вид страницу Links.htm сайта Sample site 2. Найдите ее в папке HTMLs корневой папки второго сайта, скопируйте его в папку HTMLs нового сайта и откройте в окне документа. Предположим теперь, что панель Assets у вас закрыта.



    Готовая страница списка проектов Projects htm

    Рисунок 9.15. Готовая страница списка проектов Projects.htm

    Готовая страница списка проектов Projects htm

    Выберите пункт Apply Template to Page подменю Templates меню Modify. На экране появится диалоговое окно Select Template, похожее на окно Save as Template (см. Рисунок 9.4). Выберите нужный шаблон в списке Templates и нажмите кнопку ОК. После этого опять появится диалоговое окно Inconsistent

    Region Names (см. Рисунок 9.14), где вы будете должны выбрать изменяемую область, куда будет помещено содержимое страницы, и еще раз нажать кнопку ОК.

    Заметьте, что все параметры страниц Projects.htm и Links.htm (цвет фона, текста и гиперссылок) пропадут после применения к странице шаблона. Точнее, они не пропадут, а станут такими же, как у шаблона, поскольку параметры страниц задаются шаблоном и в отдельных страницах не могут быть изменены.

    Как видите, можно очень просто подогнать под один шаблон все существующие у вас Web-страницы. Скопируйте остальные страницы предыдущего (второго) сайта в третий (напомним, что все они содержатся во вложенной папке HTMLs корневой папки сайта) и переделайте их так же, как и страницы Projects.htm и Links.htm. После этого можно считать, что наш новый сайт почти готов.

    Но что, если страница, которую вы хотите "подогнать" под шаблон, уже основана на каком-то шаблоне? Да ничего сложного! Dreamweaver выполнит за вас львиную часть работы — вам же останется только указать ему, что куда распихивать.

    Когда вы применяете шаблон к странице, которая базируется на другом шаблоне, Dreamweaver сравнивает имена изменяемых областей этих двух шаблонов. Если у каких-то изменяемых областей, находящихся в разных шаблонах, эти имена равны, то содержимое одной области переносится в другую. Это может вам сильно помочь в том случае, если вы не слишком радикально меняете дизайн своего сайта. Для этого просто создайте в новом шаблоне изменяемые области с теми же именами, что и в старом, а остальное — как говорится, дело техники.

    Если же в старом шаблоне встретится изменяемая область, для которой Dreamweaver не найдет "достойной" пары в новом шаблоне, понадобится ваша помощь. В этом случае Dreamweaver выведет на экран диалоговое окно Inconsistent Region Names (см. Рисунок 9.14). Здесь вы должны будете выбрать изменяемую область нового шаблона, куда будет перемещено содержимое изменяемой области старого шаблона, не имеющей пары. После нажатия кнопки ОК все будет сделано в лучшем виде.

    Если вы случайно применили к странице не тот шаблон или что-то напутали с изменяемыми областями и их содержимым, Dreamweaver предоставляет вам возможность "отката". Для этого воспользуйтесь "волшебной палочкой" всех изучающих новые программы методом "научного тыка" - - комбинацией клавиш + или пунктом Undo меню Edit.

    А теперь рассмотрим еще один очень важный вопрос. Он касается гиперссылок, используемых в шаблонах, и поддержания их корректности.

    Диалоговое окно Export

    Рисунок 9.16. Диалоговое окно Export Site Without Template Markup

    Диалоговое окно Export

    В поле ввода Folder введите имя и путь папки, куда будет экспортирован ваш сайт. (Эта папка станет корневой для нового сайта.) Также вы можете нажать кнопку Browse и выбрать нужную папку в появившемся на экране диалоговом окне выбора папки.

    Если вы хотите экспортировать файлы шаблонов, включите флажок Keep Template Data Files (впрочем, он включен по умолчанию). Если вы перед этим уже экспортировали в выбранную папку сайт, и теперь хотите только обновить его файлы, включите флажок Extract Only Changed Files (он также включен по умолчанию).

    Задав нужные данные, нажмите кнопку ОК. Если вы хотите отказаться от экспорта сайта, нажмите кнопку Cancel.


    Кнопка Delete панели Assets

    Рисунок 9.17. Кнопка Delete панели Assets


    Кнопка Delete панели Assets





    Кнопка Refresh Site List панели Assets

    Рисунок 9.18. Кнопка Refresh Site List панели Assets

    Кнопка Refresh Site List панели Assets

    Хорошо подумайте, прежде чем удалять шаблон. Ведь если вы его удалите, основанные на нем страницы потеряют с ним связь, а значит, вы лишитесь всех преимуществ, предоставляемых шаблонами.

    Как уже неоднократно говорилось, шаблоны — неотъемлемая собственность сайта. Конечно, вы можете создать страницу на основе шаблона, находящегося в другом сайте, но этого лучше не делать. Ведь после того, как вы закончите работу над сайтом, откуда был взят шаблон, вы его (сайт) удалите, чтобы освободить место на жестком диске. И страница, созданная на базе этого шаблона, потеряет с ним связь со всеми вытекающими отсюда последствиями. Так что лучше следовать всем известному принципу "все свое несу с собой", т. е. скопировать нужный шаблон в текущий сайт.

    Скопировать нужный шаблон можно в окне Проводника Windows или аналогичной программе управления файлами (например, FAR). Но проще сделать это в самом Dreamweaver. Для этого, прежде всего, в панели Site активизируйте сайт, где находится нужный шаблон. Далее откройте панель Assets, если она не открыта, переключитесь на список шаблонов, выберите необходимый шаблон в списке и щелкните по нему правой кнопкой мыши, чтобы открыть контекстное меню. В подменю Copy to Site будут перечислены все введенные в Dreamweaver сайты; просто выберите нужный.

    Также Dreamweaver может показать вам, в каком файле сохранен тот или иной шаблон. Для этого выберите пункт Locate in Site контекстного или дополнительного меню. После этого будет активизирована панель Site, в списке файлов которого будет выбран найденный файл шаблона.

    Иногда после манипуляций в панели Site Dreamweaver или окне Проводника Windows список шаблонов отображает неверную информацию. В частности, в нем могут быть перечислены уже удаленные шаблоны. Чтобы обновить содержимое списка шаблонов, выберите пункт Refresh Site List контекстного или дополнительного меню или нажмите кнопку Refresh Site List, расположенную в правом нижнем углу панели Assets (Рисунок 9.18).

    Диалоговое окно Editable Tag Attributes

    Рисунок 9.19. Диалоговое окно Editable Tag Attributes

    Диалоговое окно Editable Tag Attributes

    В раскрывающемся списке Attribute выберите нужный атрибут (впрочем, там он один — COLOR). Если же вы его там не найдете, нажмите кнопку Add, введите в единственном поле ввода диалогового окна добавления нового атрибута (Рисунок 9.20) имя нужного атрибута и нажмите кнопку ОК.

    Чтобы сделать выбранный атрибут изменяемым, включите флажок Make Attribute Editable. После этого станет доступной группа элементов управления, находящаяся ниже.



    Новый пустой шаблон в списке шаблонов

    Рисунок 9.2. Новый пустой шаблон в списке шаблонов


    Новый пустой шаблон в списке шаблонов





    Диалоговое окно добавления нового атрибута

    Рисунок 9.20. Диалоговое окно добавления нового атрибута

    Диалоговое окно добавления нового атрибута

    В поле ввода Label введите имя созданного изменяемого атрибута. Вообщето, Dreamweaver создаст его сам, и нам в большинстве случаев не придется вводить его самим.

    Раскрывающийся список Туре задает тип значения атрибута. В нем доступны пять пунктов:

  • Text — текстовое значение, строка;
  • URL — интернет-адрес;
  • Color — значение цвета;
  • True/False — значение типа "да-нет";
  • Number — числовое значение.
  • Выберите пункт Color, т. к. атрибут COLOR тега задает именно цвет шрифта.

    В поле ввода Default введите значение изменяемого атрибута по умолчанию. Dreamweaver сам подставит туда текущее значение атрибута выбранного вами тега, но вы, конечно, можете его изменить.

    Закончив ввод данных, нажмите кнопку ОК. Если вы передумали делать атрибут изменяемым, нажмите кнопку Cancel.

    Теперь сохраните шаблон и закройте его. Dreamweaver выведет диалоговое окно Update Files; нажмите кнопку Update, чтобы обновить все созданные на основе этого шаблона Web-страницы.

    Теперь давайте откроем какую-нибудь Web-страницу, основанную на этом шаблоне, и изменим значение только что созданного атрибута. Пусть это будет страница Links.htm.

    Чтобы задать значение изменяемого атрибута, выберите пункт Template Properties в меню Modify. На экране появится диалоговое окно Template Properties (Рисунок 9.21).

    Большую часть данного окна занимает список изменяемых атрибутов, заданных в шаблоне, на основе которого создана эта страница. В левой колонке списка отображается имя атрибута, а в правой — его текущее значение. Если вы выберете какой-либо атрибут в списке, под ним появятся элементы управления, с помощью которых вы сможете задать его новое значение. В нашем случае это будет селектор цвета color.



    Диалоговое окно Template Properties

    Рисунок 9.21. Диалоговое окно Template Properties

    Диалоговое окно Template Properties

    Задайте для атрибута color темно-красный цвет шрифта. После этого нажмите кнопку ОК. И посмотрите на результат. Нет смысла приводить здесь рисунок, т. к. черно-белая иллюстрация не передает цвет. Но, если вы все сделали правильно, шрифт заголовка должен стать темно-красным.

    Шаблон Main с колонкой новостей

    Рисунок 9.22. Шаблон Main с колонкой новостей

    Шаблон Main с колонкой новостей

    Теперь поместим всю таблицу разметки, в которой находится колонка новостей, в необязательную область. Для этого сначала выделим эту таблицу. Далее нажмем кнопку Optional Region (Рисунок 9.23) на вкладке Templates панели объектов. Также можно выбрать пункт Optional Region подменю Template Objects меню Modify или одноименный пункт подменю Templates контекстного меню. На экране появится диалоговое окно New Optional Region, показанное на Рисунок 9.24.



    Кнопка Optional Region панели объектов

    Рисунок 9.23. Кнопка Optional Region панели объектов


    Кнопка Optional Region панели объектов





    Диалоговое окно New Optional Region

    Рисунок 9.24. Диалоговое окно New Optional Region

    Диалоговое окно New Optional Region

    В поле ввода Name введем имя создаваемой необязательной области — News. Отключим флажок Show by Default, т. к. мы не хотим, чтобы она отображалась по умолчанию. И нажмем кнопку ОК. То, что у нас должно получиться, показано на Рисунок 9.25.

    Скорее всего, вам придется подредактировать HTML-код. Проверьте — он должен выглядеть так (служебные комментарии, созданные Dreamweaver для выделения необязательной области, выделены полужирным шрифтом):



     

    Это ячейка внешней таблицы, задающая просвет между основным содержимым и колонкой новостей




    Содержимое внутренней таблицы разметки





    Необязательная область

    Рисунок 9.25. Необязательная область, включающая в себя внутреннюю таблицу разметки страницы default.htm

    Необязательная область

    Внутри необязательной области должны оказаться ячейка просвета и ячейка, в которой находится колонка новостей. Если это не так, отредактируйте HTML-код.

    Вот, собственно, и все. Мы создали необязательную область.

    Теперь, если вы создаете страницу на основе шаблона Main, то можете задать присутствие или неприсутствие в ней колонки новостей. Сделать это можно с помощью уже знакомого вам диалогового окна Template Properties (см. Рисунок 9.21). Выберите пункт Template Properties в меню Modify — и вы увидите, что в списке этого окна присутствует пункт News, т. е. параметр, задающий присутствие созданной нами необязательной области. А в нижней части диалогового окна находится флажок Show News, включив который вы зададите присутствие области на странице.

    На этом все? Увы, нет.

    Дело в том, что необязательная область Dreamweaver по своей природе не является изменяемой. Нам нужно поместить в нее изменяемую область, чтобы мы смогли задать содержимое колонки новостей.

    Но мы сделаем лучше. И Dreamweaver нам поможет.

    Кнопка Repeating Region панели объектов

    Рисунок 9.26. Кнопка Repeating Region панели объектов


    Кнопка Repeating Region панели объектов





    Диалоговое окно New Repeating Region

    Рисунок 9.27. Диалоговое окно New Repeating Region

    Диалоговое окно New Repeating Region

    Введите имя создаваемой повторяющейся области в единственном поле ввода этого окна. Давайте назовем ее NewsList. После этого нажмите кнопку ОК. Результат показан на Рисунок 9.28.



    Повторяющаяся область

    Рисунок 9.28. Повторяющаяся область

    Повторяющаяся область

    Теперь отформатируйте содержимое этой области как обычный текстовый абзац, выбрав в раскрывающемся списке Format редактора свойств пункт Paragraph. Если хотите, уменьшите шрифт текста на одну ступень. На этом создание повторяющейся области можно считать законченным.

    Но проблема в том, что повторяющаяся область Dreamweaver также не является изменяемой. Поэтому нам нужно поместить внутрь нее еще и изменяемую область. Таким образом, получится троекратная вложенность "необязательная область — повторяющаяся область — изменяемая область".

    Сложно, конечно, зато очень интересно.

    Поставьте текстовый курсор внутри содержимого повторяющейся области. И создайте изменяемую область. Вы уже знаете, как это делается. Назовите ее News item. После этого удалите остатки содержимого повторяющейся области, не входящего в изменяемую область. И поправьте HTML-код — он должен выглядеть так:





    Содержимое изменяемой области NewsItern





    Внутри изменяемой области должен находиться только текст описания новости, без всех форматирующих тегов. (Вставленные Dreamweaver служебные комментарии помечены полужирным шрифтом.) Результат показан на Рисунок 9.29.



    Окончательный вид

    Рисунок 9.29. Окончательный вид колонки новостей в шаблоне Main

    Окончательный вид

    Но не торопитесь теперь применять шаблон Main к странице default.htm. Если вы это сделаете, Dreamweaver запихает в изменяемую область Main все содержимое этой страницы, и вам придется ее долго редактировать. Лучше удалите страницу default.htm и создайте ее заново на основе шаблона Main. Поскольку текст приветствия уже имеется в шаблоне, вам даже не нужно будет ничего вводить с клавиатуры. Не забудьте только сохранить новую главную страницу сайта в файле default.htm.

    Но как же колонка новостей? Сейчас мы ей займемся.

    Откройте новую страницу default.htm, если вы ее уже закрыли. Выберите пункт Template Properties в меню Modify и в появившемся на экране диалоговом окне Template Properties задайте для параметра News значение true, для чего просто включите флажок Show News. После этого нажмите кнопку ОК.

    Теперь вы видите, что правее основного содержимого страницы появилась колонка новостей. В ней находятся уже знакомые вам повторяющаяся и изменяемая области, вложенные друг в друга. Выделите содержимое изменяемой области Newsitem, удалите его и введите описание какой-либо новости. У вас должно получиться нечто, похожее на Рисунок 9.30.



    Кнопка Make Template панели объектов

    Рисунок 9.3. Кнопка Make Template панели объектов


    Кнопка Make Template панели объектов





    Текст описания первой

    Рисунок 9.30. Текст описания первой новости, введенный в колонку

    Текст описания первой

    Так, одна новость у нас есть. Но как добавить остальные? Очень просто!

    Для работы с пунктами повторяющихся областей Dreamweaver предоставляет набор особых кнопок, появляющихся в заголовке повторяющейся области, и набор пунктов меню. Эти пункты меню находятся в подменю Repeated Entries, вложенного в подменю Templates меню Modify, а также в подменю Templates контекстного меню. Все они перечислены в табл. 9.1.



    Готовая главная страница

    Рисунок 9.31. Готовая главная страница сайта Sample site 3 с готовой колонкой новостей


    Готовая главная страница




    Кнопка Editable Optional Region панели объектов

    Рисунок 9.32. Кнопка Editable Optional Region панели объектов


    Кнопка Editable Optional Region панели объектов





    Необязательная изменяемая

    Рисунок 9.33. Необязательная изменяемая область, представляющая собой комбинацию из необязательной и изменяемой областей

    Необязательная изменяемая

    На экране появится уже знакомое вам диалоговое окно New Optional Region. Введите имя создаваемой области в поле ввода Name, если хотите, отключите флажок Show by Default и нажмите кнопку ОК. После этого Dreamweaver создаст необязательную изменяемую область (Рисунок 9.33).

    Как видите, Dreamweaver просто вкладывает изменяемую область внутрь необязательной. Вдобавок он еще и называет изменяемую область по-своему, не спрашивая нас. Но все равно это весьма удобно.

    Кнопка Repeating Table панели объектов

    Рисунок 9.34. Кнопка Repeating Table панели объектов

    Кнопка Repeating Table панели объектов

    Большинство элементов управления этого окна знакомо вам по диалоговому окну Insert Table. Поэтому здесь они рассматриваться не будут. Представим только элементы управления, находящиеся в группе Repeat row of table, которые нам пока еще незнакомы.



    Диалоговое окно Insert Repeating Table

    Рисунок 9.35. Диалоговое окно Insert Repeating Table

    Диалоговое окно Insert Repeating Table

    Поля ввода Starting Row и Ending Row позволяют задать номера соответственно первой и последней строк таблицы, которые будут помещены в создаваемую повторяющуюся область. (Это строки, которые станут пунктами повторяющейся области.) Если вы не хотите вносить в повторяющуюся область первую и последнюю строки, в которых часто помещают заголовок и "поддон" таблицы, задайте соответствующие номера.

    В поле ввода Region Name вводится имя создаваемой повторяющейся области.

    Табличная повторяющаяся область будет создана после нажатия кнопки ОК. Эту область вы можете увидеть на Рисунок 9.36.



    Табличная повторяющаяся

    Рисунок 9.36. Табличная повторяющаяся область — комбинация таблицы, повторяющейся области и изменяемых областей

    Табличная повторяющаяся

    Как видите, Dreamweaver и в этом случае особо не мудрствует: он просто создает таблицу, помещает указанные вами строки в повторяющуюся область и создает в каждой ячейке этих строк изменяемые области. Это, кстати, очень удобно; мы могли бы создать такую область для нашей колонки новостей. Попробуйте, если хотите, — это будет вашей самостоятельной работой.

    Кнопка Make Nested Template панели объектов

    Рисунок 9.37. Кнопка Make Nested Template панели объектов

    Кнопка Make Nested Template панели объектов

    Теперь удалим все содержимое изменяемой области Main. Сейчас мы создадим для нее новое содержимое в виде повторяющейся и изменяемой областей.

    Прежде всего, введите текст "Архив новостей" и отформатируйте его как заголовок. После этого поместите текстовый курсор ниже этого текста и создайте там повторяющуюся область. Назовите ее News Archive.

    Вы, наверно, уже заметили, что изменяемая область Main базового шаблона изменила свой вид — ее граница стала оранжевой. Так Dreamweaver показывает, что вы начали создание вложенного шаблона.

    Теперь поместите внутрь повторяющейся области изменяемую область. Назовите ее NewsArchiveitem. На этом работу можно считать законченной. Сохраните готовый шаблон.

    Создайте на основе шаблона NewsArchive новую Web-страницу. Введите текст архивных новостей, точнее, "старостей". Сохраните ее под именем Archive.htm.

    Теперь, если вы измените что-либо в шаблоне NewsArchive, будет изменена единственная страница, созданная на его основе, — Archive.htm. Если же вы измените какой-либо элемент шаблона Main, будут изменены как все страницы, созданные на его основе, так и шаблон NewsArchive. Как видите, Dreamweaver MX следит за вложенными шаблонами как за обычными Web-страницами.

    Диалоговое окно Save As Template

    Рисунок 9.4. Диалоговое окно Save As Template

    Диалоговое окно Save As Template

    В раскрывающемся списке Site выбирается сайт, в котором сохраняется шаблон. (Шаблоны являются неотъемлемой собственностью сайта, помните?) По умолчанию там выбран текущий сайт.

    В списке Existing Templates перечислены уже сохраненные в этом сайте шаблоны. В нашем случае там есть только один шаблон — созданный нами ранее пустой шаблон Sample. Вы можете выбрать в этом списке любой шаблон и перезаписать его; в этом случае Dreamweaver переспросит вас, действительно ли вы хотите перезаписать существующий шаблон.

    Само имя шаблона вводится в поле ввода Save As. Давайте назовем наш новый шаблон Main ("главный"), поскольку это наш главный шаблон, на основе которого мы построим наш сайт.

    Введя все нужные данные, нажмите кнопку Save для сохранения шаблона или Cancel — для отказа от этого. Поскольку мы нуждаемся в шаблоне, нам нужно нажать кнопку Save.

    После того как мы создадим новый шаблон, последний появится в списке шаблонов. А поскольку мы создали этот новый шаблон на основе существующей Web-страницы, т. е. он имеет содержимое, мы можем просмотреть его на панели предварительного просмотра панели Assets. Правда, эта панель очень мала, и, чтобы получить представление о содержимом шаблона, нам придется открыть его в окне документа.

    Кнопка Edit панели Assets

    Рисунок 9.5. Кнопка Edit панели Assets

    Кнопка Edit панели Assets

    В любом случае на экране появится окно документа, в котором будет открыт выбранный нами шаблон (Рисунок 9.6). Как видите, сейчас он ничем отличается от Web-страницы default.htm, на основе которой был создан.

    Что вы можете сделать с шаблоном? Все что угодно. Можете считать, что это обычная Web-страница с некоторыми особенностями. (Эти особенности будут описаны ниже.) Вы можете набирать текст, форматировать его, размещать изображения, фильмы, таблицы, гиперссылки, переключаться в режим разметки и создавать таблицы и ячейки разметки, создавать наборы фреймов, пользоваться активами и библиотекой, "чистить" HTML-код и т. д. В общем, делать все то, что вы уже знаете.

    Но все-таки шаблон — не Web-страница и имеет некоторые особенности. Вспомните, ведь, помимо всего прочего, вам необходимо разместить на нем изменяемые области, в которых впоследствии будет размещено содержимое сраниц. Более того, вам обязательно нужно это сделать, иначе шаблон вам, фактически, так и не пригодится. Сейчас вы узнаете, как это сделать.

    Откройте шаблон Main, который мы создали на основе страницы default.htm (если вы его еще не открыли). Уберите текст основного содержимого и



    Открытый в окне документа шаблон Main

    Рисунок 9.6. Открытый в окне документа шаблон Main


    Открытый в окне документа шаблон Main





    Отредактированный

    Рисунок 9.7. Отредактированный шаблон Main (включен режим разметки)

    Отредактированный

    колонку новостей, оставьте только заголовок, полосу навигации и сведения об авторских правах. Проще всего это сделать, переключившись в режим разметки. Проверьте, является ли ячейка основного содержимого "саморастягивающейся". В результате у вас должно получиться нечто, похожее на Рисунок 9.7.

    Сохраните шаблон. При этом Dreamweaver предупредит вас, что шаблон не содержит ни одной изменяемой области, выведя небольшое окно-предупреждение. Нажмите кнопку ОК, чтобы все-таки сохранить шаблон, или Cancel — для отказа от этого. Если вы не хотите, чтобы это окно появлялось в дальнейшем, перед тем, как нажать кнопки ОК или Cancel, включите флажок Don't warn me again.

    Теперь нам нужно разместить на шаблоне изменяемые области. В нашем случае изменяемая область будет всего одна — основное содержимое страницы. И располагаться она будет в самой большой ячейке нашей таблицы разметки.

    Кнопка Editable Region панели объектов

    Рисунок 9.8. Кнопка Editable Region панели объектов

    Кнопка Editable Region панели объектов

    В единственном поле ввода Name, находящемся в этом окне, вводится уникальное имя вновь создаваемой изменяемой области. Каждая созданная вами в шаблоне изменяемая область должна иметь уникальное имя, иначе Dreamweaver не сможет ее обработать. Это имя может содержать любые символы, кроме букв русского алфавита, кавычек, апострофа и знаков "<", ">" и "&". После этого нажмите кнопку ОК, чтобы создать изменяемую область, или Cancel — для отказа от этого.



    Диалоговое окно New Editable Region

    Рисунок 9.9. Диалоговое окно New Editable Region


    Диалоговое окно New Editable Region





    Создание изменяемых областей

    Создание изменяемых областей

    Как и в случае с самим шаблоном, вы можете создать изменяемые области двумя способами. Во-первых, вы можете создать пустую изменяемую область на пустом месте страницы. Во-вторых, вы можете преобразовать фрагмент текущего содержания страницы в изменяемую область. Первый способ лучше всего подходит, если создали шаблон "с нуля", а второй -если вы преобразовали в шаблон существующую страницу.

    Поместить в шаблон пустую изменяемую область очень просто. Для этого сначала поставьте текстовый курсор в то место, где вы хотите создать изменяемую область. Если же вы хотите преобразовать в изменяемую область фрагмент содержимого страницы, просто выделите этот фрагмент (в нашем случае — основное содержимое страницы).

    После этого выберите в подменю Template Objects меню Modify окна документа пункт New Editable Region или нажмите комбинацию клавиш + ++. Вы можете также выбрать пункт New Editable Region подменю Template контекстного меню. Если вы предпочитаете пользоваться панелью объектов, то можете нажать кнопку Editable Region на вкладке Templates (Рисунок 9.8). На экране появится диалоговое окно New Editable Region, показанное на Рисунок 9.9.



    Создание шаблона

    Создание шаблона

    Есть два способа создать шаблон Dreamweaver. Во-первых, его можно создать "с нуля", а потом заполнить содержимым, как обычную Web-страницу. Во-вторых, существующую страницу можно сохранить как шаблон, а потом отредактировать, удалив полезное содержимое и оставив только общие элементы. И то, и другое сделать одинаково легко.

    Прежде всего, активизируйте панель Assets и переключитесь на список шаблонов, щелкнув вторую снизу кнопку в списке категорий. Список шаблонов ничем не отличается от списков других видов активов, знакомых вам по главе 6. Поэтому мы не будем приводить его рисунок.

    Чтобы создать новый шаблон "с нуля", либо нажмите кнопку New Template в правом нижнем углу панели Assets (Рисунок 9.1), либо выберите пункт New Template в контекстном или дополнительном меню этой панели. В списке появится новый пункт, вместо названия которого будет находиться поле ввода с текстом Untitled. Введите в него имя вновь создаваемого шаблона и нажмите клавишу . Имейте при этом в виду, что имя шаблона есть на самом деле имя файла, в котором сохраняется шаблон, поэтому оно должно удовлетворять соглашениям по именованию файлов. (Автор, например, назвал новый шаблон Sample.) Все, вы только что создали новый пустой шаблон.



    Создание Webстраниц на основе шаблонов

    Создание Web-страниц на основе шаблонов

    Создать Web-страницу на основе шаблона можно тремя способами.

    Первый способ заключается в том, чтобы использовать уже знакомый вам пункт New меню File окна документа Dreamweaver. При этом на экране появится диалоговое окно New Document, показанное на Рисунок 3.1. Переключитесь на вкладку Templates — и вы увидите то, что показано на Рисунок 9.11.

    В списке Templates For выбирается сайт, из которого будет взят шаблон. Это значит, что вы можете создать страницу на основе шаблона, который принадлежит другому сайту.

    В списке Site <имя сайта> выбирается нужный шаблон. Выберите шаблон Main. После этого в расположенной справа панели предварительного просмотра появится изображение выбранного шаблона.

    Если флажок Update Pages when Template Changes включен (а он включен по умолчанию), при изменении шаблона, на основе которого создается Web-страница, она будет соответственно изменена. Если же этот флажок отключить, то в новую страницу будет просто скопировано содержимое выбранного шаблона. В этом случае она не будет содержать ни изменяемых, ни неизменяемых областей и при изменении шаблона изменяться не будет. Фактически это будет независимая страница, просто содержащая все содержимое шаблона.



    Кнопки и пункты меню

    Таблица 9.1. Кнопки и пункты меню, предназначенные для работы с пунктами повторяющихся областей

    Пункт меню

    Назначение

    New Entry After Selection

    Добавляет новый пункт ниже (правее)



    выделенного

    New Entry Before Selection

    Добавляет новый пункт выше (левее)



    выделенного

    New Entry at End

    Добавляет новый пункт в самый конец

    New Entry at Beginning

    Добавляет новый пункт в самое начало

    Delete Repeating Entry

    Удаляет выделенный пункт

    Move Entry Up

    Перемещает выделенный пункт выше

    Move Entry Down

    Перемещает выделенный пункт ниже

    Move Entry to Beginning

    Перемещает выделенный пункт в самый



    верх

    Move Entry to End

    Перемещает выделенный пункт в самый низ

    Cut Repeating Entry

    Вырезает выделенный пункт в буфер обмена

    Copy Repeating Entry

    Копирует выделенный пункт в буфер обмена

    Как вы уже заметили, в табл. 9.1 не указан пункт Paste Repeating Entry, который осуществлял бы вставку пункта из бушеоа обмена. Это выполняется как обычно, вызовом пункта Paste меню Edit или нажатием комбинации клавиш +.

    С помощью этих пунктов вы можете добавлять, удалять и перемещать пункты повторяющейся области. Создайте еще два или три пункта и впишите в них текст новостей. Результат вы можете увидеть на Рисунок 9.31.

    Dreamweaver MX — настоящий король шаблонов!



    Табличная повторяющаяся область

    Табличная повторяющаяся область

    Еще одна весьма удобная возможность Dreamweaver — создание табличных повторяющихся областей. Это обычная повторяющаяся область, пункты которой организованы в виде таблицы. При этом каждая ячейка такой таблицы содержит изменяемую область, т. е. вы можете вводить данные в каждую ее ячейку.

    Как и в случае с необязательной изменяемой областью, табличную повторяющуюся область можно создать только с помощью кнопки панели объектов. Это кнопка Repeating Table (Рисунок 9.34) вкладки Templates. Также вы можете выбрать пункт Repeating Table подменю Template Objects меню Insert. После этого на экране появится диалоговое окно Insert Repeating Table (Рисунок 9.35).



    Управление шаблонами в окне шаблонов

    Управление шаблонами в окне шаблонов

    Вы можете управлять шаблонами так же легко, как управляете содержимым библиотеки (см. главу 5).

    Вы можете переименовать любой шаблон. Для этого выберите его в списке и либо щелкните мышью по его имени, либо выберите пункт Rename в контекстном или дополнительном меню. Вместо имени данного шаблона появится поле ввода, где вы сможете ввести новое имя. После этого нажмите клавишу для сохранения введенного имени или — для отказа от него и возврата старого имени.

    Чтобы удалить ненужный шаблон, выберите его в списке и либо нажмите клавишу , либо выберите пункт Delete контекстного или дополнительного меню, либо нажмите кнопку Delete (Рисунок 9.17), расположенную в правом нижнем углу панели. Dreamweaver спросит вас, действительно ли вы хотите удалить этот шаблон; нажмите кнопку Да (Yes) или Нет (No). Если вы нажмете кнопку Да, шаблон будет безвозвратно удален.



    Вложенные шаблоны

    Вложенные шаблоны

    Последняя возможность работы с шаблонами, предоставляемая Dreamweaver MX, которую мы рассмотрим, — это вложенные шаблоны. Вложенный шаблон — это шаблон, созданный на основе другого шаблона (так называемого базового шаблона). При создании вложенного шаблона используются изменяемые области базового шаблона: в них вносится новое неизменяемое содержимое и создаются новые изменяемые области.

    Давайте создадим вложенный шаблон, на основе которого будет сделана страница архива новостей Archive.htm. Мы создадим повторяющуюся область, в которой и будет помещаться текст новостей. За основу возьмем колонку новостей нашего основного шаблона Main.

    Сначала удалим старую страницу Archive.htm. После этого создадим на основе шаблона Main новую страницу. Сохраним ее как шаблон, выбрав пункт Save as Template меню File. (Также можно нажать кнопку Make Nested Template (Рисунок 9.37) вкладки Templates панели объектов.) В поле ввода Save As диалогового окна Save As Template (см. Рисунок 9.4) введем имя нового шаблона — NewsArchive. После этого нажмем кнопку Save. Готовый шаблон NewsArchive будет в точности похож на шаблон Main. Пока...



    Вы не можете дать изменяемой

    Внимание

    Вы не можете дать изменяемой области имя doctitle. Почему, будет рассказано позже.



    После того, как на основе

    Внимание

    После того, как на основе шаблона были созданы какие-либо Web-страницы, вы не сможете переименовать ни одну из имеющихся в нем изменяемых областей.

    И, наконец, может случиться так, что вы захотите удалить изменяемую область. Сделать это можно двумя способами: простым и очень простым. Очень простой способ заключается в том, чтобы выбрать изменяемую область щелчком по заголовку и нажать клавишу . Простой способ — поставить текстовый курсор куда-либо внутрь содержимого изменяемой области и выбрать пункт Remove Editable Markup подменю Templates меню Modify или контекстного меню. Учтите, что после удаления изменяемой области ее содержимое остается в шаблоне. Так что, если вы хотите удалить всю изменяемую область, вам также придется удалить ее содержимое.

    А теперь — небольшой сюрприз. Дело в том, что Dreamweaver при создании любого шаблона автоматически создает небольшую изменяемую область doctitie. (Вот поэтому вы и не можете дать изменяемой области имя doctitie — такая изменяемая область уже существует!) Эта изменяемая область включает в себя содержимое тега , иначе говоря, название Web-страницы. Это невидимая изменяемая область — она не отображается ни в подменю Editable Regions подменю Templates контекстного меню, ни внизу подменю Templates меню Modify.<br> <br> <br><br> <h1>Если вы удалите скрытую изменяемую </h1>Внимание<br><br> Если вы удалите скрытую изменяемую область doctitie, то потеряете возможность менять названия Web-страниц, основанных на этом шаблоне. В данном случае все эти страницы будут иметь одно название, совпадающее с названием шаблона.<br><br> <h1> Использование пакета Dreamweaver </h1> <h1>Дополнительные параметры</h1>Дополнительные параметры<br><br> Стандарт CSS предоставляет целый набор дополнительных атрибутов, задающих особые параметры элементов страницы. Эти параметры задаются на вкладке <b>Extensions </b>диалогового окна CSS <b>Style Definition, </b>которая показана на Рисунок 10.23.<br> <br> <p align="center"><br><br> <h1>Недостатки таблиц стилей и их преодоление</h1>Недостатки таблиц стилей и их преодоление<br><br> Настала пора поговорить о недостатках таблиц стилей. Всего их два:<br> <br> <li> сравнительная "молодость" стандарта CSS, из-за которой его поддерживают только сравнительно новые программы Web-обозревателей, выпущенные после 1997 года;<br> </li> <li> крайняя несовместимость между реализациями поддержки таблиц стилей в разных Web-обозревателях, в основном в старых версиях Internet Explorer и Navigator.<br> </li> Теперь рассмотрим эти недостатки подробнее.<br> <br> Как мы уже говорили, CSS — довольно молодой стандарт. Он был принят в 1997 году, уже после того, как многие разработчики выпустили на рынок свои программы Web-обозревателей. Конечно, наиболее популярные из них в то время — Internet Explorer и Navigator — вскорости обзавелись поддержкой недавно принятого стандарта. Но очень и очень многие программы не знали о его существовании. И такие "неграмотные" программы используются до сих пор, в частности, в США и Европе, на множестве старых компьютеров, которые там все еще в ходу.<br> <br> Так какие же Web-обозреватели поддерживают таблицы стилей?<br> <br> Во-первых, это, конечно, популярнейший Microsoft Internet Explorer. Полная поддержка стандарта CSS появилась в нем, начиная с версии 4.0, хотя некоторые элементы, как говорят, поддерживались еще в приснопамятной 3.0. (Помнится, эта версия принимала файлы таблиц стилей с расширением ess за видеофильмы. С чего бы это?) Версии 5.0 и 5.5 поддерживают расширенный набор атрибутов стилей, как стандартных, так и фирменных, не определенных в стандарте. Полное описание атрибутов стилей, поддерживаемых Internet Explorer, вы можете найти на сайте Microsoft для разработчиков: <a href="http://msdn.microsoft.com"><b>http://msdn.microsoft.com</b></a><b>. </b>Поверьте — их очень много, и среди них есть совсем уж экзотические. И Dreamweaver поддерживает далеко не все из них.<br> <br> Во-вторых, следующий по популярности Netscape Navigator. Таблицы стилей он также стал поддерживать, начиная с версии 4.0. Набор поддерживаемых им атрибутов стилей невелик и практически не включает нестандартные, фирменные. Хотя последние версии этой программы — 6.0 и 7.0 — полностью поддерживают стандарт CSS1. Полный список поддерживаемых Navigator атрибутов стилей вы можете найти на сайте Netscape: <b>http://developer.netscape.com.</b><br> <br> В третьих, новейшие Web-обозреватели: Opera и Mozilla. У них, как говорят разработчики, все с поддержкой стилей в порядке. На самом же деле, у каждой программы свои причуды...<br> <br> Эти программы составляют подавляющее большинство современного парка Web-обозревателей. Так что вы можете использовать стили в своих страницах без боязни, что кто-то, обладающий "древней" программой, не сможет их прочитать. Абсолютное большинство современных Web-дизайнеров так и поступает. И никаких акций протеста наподобие "Пользователи старого программного обеспечения против таблиц стилей" автор что-то не припомнит.<br> <br> Но если ваша аудитория будет включать достаточно большой процент пользователей таких "несовместимых" программ, вам придется принимать особые меры, чтобы сделать ваши страницы доступными для них. Какие это меры, объяснять особо не нужно: вы должны полностью отказаться от стилей, где можно, заменить их тегами и атрибутами HTML, а где нельзя -отказаться от всех "наворотов", предлагаемых CSS. Конечно, ваши страницы от этого во многом проиграют, но их, по крайней-мере, смогут просмотреть посетители.<br> <br> Dreamweaver идет вам навстречу в этом нелегком труде. Чтобы сделать вашу страницу совместимой со старыми программами Web-обозревателей, просто откройте ее в окне документа и выберите пункт <b>3.0 Browser Compatible </b>подменю <b>Convert </b>меню <b>File. </b>На экране появится диалоговое окно <b>Convert to 3.0 Browser Compatible, </b>показанное на Рисунок 10.39.<br> <br> <p align="center"><br><br> <h1>Определение стиля</h1>Определение стиля <br><br> Группа переключателей <b>Туре </b>задает элементы страницы, к которым будет применен вновь создаваемый стиль:<br> <br> <li> переключатель <b>Make Custom Style (class) </b>позволяет создать новый стилевой класс. Если вы его включите, то в комбинированном списке <b>Name </b>сможете ввести имя создаваемого стилевого класса, например .cit;<br> </li> <li>переключатель <b>Redefine HTML Tag </b>позволяет создать стиль переопределения тега. Если выбран этот переключатель, в раскрывающемся списке <b>Tag </b>вы сможете выбрать нужный тег;<br> </li> <li> переключатель <b>Use </b>CSS <b>Selector </b>позволяет создать стиль-селектор. Он же позволит вам создать псевдостиль гиперссылок или комбинированный стиль наподобие H1 I или I.cit. Если включен этот переключатель, в комбинированном списке <b>Selector </b>может быть введено имя создаваемого комбинированного стиля или селектора. Развернув этот список, вы сможете выбрать нужный псевдостиль.<br> </li> Вторая группа переключателей <b>Define In </b>задает, в какой таблице стилей будет находиться вновь создаваемый стиль:<br> <br> <li> если выбран верхний переключатель, в расположенном правее раскрывающемся списке вы сможете выбрать имя файла внешней таблицы стилей, привязанной к этой странице. Также вы можете выбрать пункт <b>(New Style Sheet File), </b>чтобы создать новую таблицу стилей. В последнем случае после нажатия кнопки <b>ОК </b>на экране появится диалоговое окно сохранения файла, где вы сможете ввести имя файла новой таблицы стилей;<br> </li> <li> если выбран переключатель <b>This Document Only, </b>стиль будет помещен во внутреннюю таблицу стилей.<br> </li> <p align="center"><br><br> <h1>Параметры абзаца</h1>Параметры абзаца<br><br> Параметры текстового абзаца задаются на вкладке <b>Block </b>диалогового окна CSS <b>Style Definition. </b>Здесь же задаются параметры, применяемые к нетекстовым элементам страницы, таким как графические изображения и таблицы. Эта вкладка показана на Рисунок 10.9.<br> <br> <p align="center"><br><br> <h1>Параметры фона</h1>Параметры фона<br><br> Параметры фона элемента страницы задаются на вкладке <b>Background </b>диалогового окна <b>CSS Style Definition. </b>Эта вкладка показана на Рисунок 10.8.<br> <br> <p align="center"><br><br> <h1>Параметры маркеров списка</h1>Параметры маркеров списка<br><br> Параметры, задающие вид маркеров списка, задаются на вкладке <b>List </b>диалогового окна <b>CSS Style Definition. </b>Эта вкладка показана на Рисунок 10.22.<br> <br> Как вы помните, HTML предоставляет возможность создания списков, состоящих из множества позиций, помеченных специальными значками — маркерами или цифрами (буквами). В первом случае список называется маркированным, а во втором — нумерованным. Пример маркированного списка вы можете увидеть выше, в описании стилей рамки. Ну а пример нумерованного списка без труда можно найти в этой книге — здесь они используются довольно часто.<br> <br> HTML предоставляет вам некоторые способы изменить маркер или нумерацию позиций списка. CSS предлагает практически те же возможности.<br> <br> <p align="center"><br><br> <h1>Параметры местонахождения</h1>Параметры местонахождения<br><br> Вкладку <b>Positioning </b>диалогового окна CSS <b>Style Definition </b>мы рассмотрим позже, когда будем изучать свободно позиционируемые элементы. Сейчас атрибуты, устанавливаемые с ее помощью, нам не пригодятся.<br><br><br> <h1>Параметры рамки</h1>Параметры рамки<br><br> Параметры, определяющие цвет и толщину рамки вокруг элемента страницы, задаются на вкладке <b>Border </b>диалогового окна CSS <b>Style Definition. </b>Эта вкладка показана на Рисунок 10.17.<br> <br> <p align="center"><br><br> <h1>Параметры размеров и размещения</h1>Параметры размеров и размещения<br><br> Параметры, задающие размеры и размещение элемента страницы, задаются на вкладке <b>Box </b>диалогового окна <b>CSS Style Definition. </b>Эта вкладка показана на Рисунок 10.10.<br> <br> Ширину и высоту элемента страницы вы можете задать в комбинированных списках <b>Width и Height. </b>Эти размеры могут быть заданы как абсолютные величины или процентное значение от ширины или высоты родительского элемента (например, самой страницы). Единица измерения, как обычно, выбирается в раскрывающемся списке, расположенном справа от соответствующего комбинированного списка. Чтобы вернуть Web-обозревателю управление размерами элемента страницы, выберите значение auto или вообще очистите соответствующий комбинированный список.<br> <br> <p align="center"><br><br> <h1>Параметры шрифта</h1>Параметры шрифта<br><br> Взгляните еще раз на Рисунок 10.6. На нем, как вы помните, показана вкладка <b>Туре </b>диалогового окна <b>CSS Style Definition. </b>На этой вкладке задаются параметры шрифта текста.<br> <br> Сам шрифт выбирается в комбинированном списке <b>Font. </b>Вы можете выбрать один из шрифтов либо ввести его имя вручную. Правда, при этом вы должны быть уверены, что этот шрифт гарантированно установлен на компьютерах пользователей, или специально позаботиться об этом. (Например, распространить файл шрифта среди всех потенциальных посетителей вашего Web-сайта.)<br> <br> В комбинированном списке <b>Size </b>задается размер шрифта. На Рисунок 10.7 этот список показан в раскрытом виде. Вы можете либо ввести числовое значение в одной из поддерживаемых CSS величин, либо выбрать в списке предопределенное, абсолютное или относительное.<br> <br> В общем, в этом комбинированном списке можно найти три вида пунктов:<br> <br> <li> пункты — числовые значения. Задают размер шрифта в одной из поддерживаемых CSS единиц измерения;<br> </li> <li> пункты <b>xx-small, x-small, small, medium, large, x-large и xx-large, </b>задающие одно из предопределенных значений размера шрифта;<br> </li> <li> пункты <b>larger и smaller, </b>задающие относительный размер шрифта. Пункт <b>larger </b>увеличивает шрифт на одну позицию в списке предопределенных значений, а пункт <b>smaller </b>— уменьшает.<br> </li> Как уже говорилось, вы можете также вводить нужные числовые значения прямо в этом списке.<br> <br> <p align="center"><br><br> <h1>Почему "каскадные"</h1>Почему "каскадные"<br><br> В одной и той же Web-странице могут использоваться и внутренние стили, и таблицы стилей обоих видов: внешние и внутренняя. При этом "в работе" будут все определенные в них стили.<br> <br> Но что делать, если какой-то стиль будет определен одновременно два или три раза? Одним словом, что делать, если произойдет конфликт стилей!<br> <br> В этом случае каскадные таблицы стилей оправдывают свое название. Вступает в действие правило каскадности, разрешающее конфликт стилей. И разрешается он столь изящно, что нельзя не восторгаться. Эх, если бы так решались все конфликты на свете!..<br> <br> Давайте рассмотрим пример. Предположим, у нас есть внешняя таблица стилей.<br> <br> Р ( font-size: 9pt } HI { font-size: 24pt;<br> <br> text-align: center } .copyright { font-size: 8pt;<br> <br> font-style: italic;<br> <br> text-align: right }<br> <br> Здесь мы переопределили внешний вид текста, отформатированного тегами <р> и <HI>, и задали новый стиль copyright. Атрибут text-align задает выравнивание текста параграфа; значение center задает выравнивание по центру, a right — по правому краю.<br> <br> Сохраним эту таблицу стилей в файле 10. Less. И создадим небольшую Web-страницу.<br> <br> <HTML> <br> <head> <link rel="canonical" href="https://www.e-lave.ru//index.htm"/><br> <br> <ТITLЕ>Стили</ТITLЕ><br> <br> <LINK REL="stylesheet" HREF="10.l.css">;<br> <br> <STYLE><br> <br> H1 { font-size: 16pt; color: #00FF00 } I { font-size: larger } </STYLE> </HEAD> <BODY><br> <br> <Н1>Заголовок</Н1><br> <br> <Р>Параграф<br> <br> <Р>Параграф<br> <br> <HR><br> <br> <Р CLASS="copyright"><br> <br> Авторские <SPAN STYLE=" font-style: normal!">права</SPAN>.<br> <br> </BODY> </HTML><br> <br> Сохраним эту страничку в файле 10.1.htm. И откроем в Web-обозревателе. То, что мы увидим в его окне, показано на Рисунок 10.2.<br> <br> <p align="center"><br><br> <h1>Поддержка внутренних стилей</h1>Поддержка внутренних стилей<br><br> Вот мы и выяснили все о том, как Dreamweaver поддерживает внутренние и внешние таблицы стилей. А что же внутренние стили? А с внутренними стилями ситуация сложнее.<br> <br> Дело в том, что Dreamweaver поддерживает внутренние стили не полностью. Он отображает на экране результаты их применения, но не предлагает никаких удобных инструментов для создания внутренних стилей и управления ими. По мнению автора, это самый большой и досадный его недостаток. Так что, если вы хотите привязать к какому-либо элементу страницы внутренний стиль, то вам придется править HTML-код вручную либо пользоваться диалоговым окном <b>Tag Editor.</b> Как это сделать?<br> <br> Давайте рассмотрим работу с внутренними стилями на примере. Откроем все ту же нашу многострадальную страницу 10.2.htm, раскрасим текст заголовка в зеленый цвет, а текст, выделенный курсивом, увеличим в размерах на одну ступень. И сделаем мы это разными способами.<br> <br> Сначала займемся курсивным текстом. Выделите его, щелкнув по нужной кнопке секции тегов, и выберите в контекстном меню пункт <b>Edit Tag <название тега>. </b>После этого выберите в списке, расположенном в левой части диалогового окна <b>Tag Editor, </b>пункт <b>Style Sheet/Accessibility. </b>Окно примет вид, показанный на Рисунок 10.34.<br> <br> <p align="center"><br><br> <h1>Применение стилей</h1>Применение стилей<br><br> После того как вы зададите атрибуты стиля, нажмите кнопку <b>ОК </b>диалогового окна CSS <b>Style Definition. </b>Вы также можете нажать кнопку <b>Apply, </b>чтобы сохранить стилевые установки без закрытия этого диалогового окна. Чтобы отказаться от создания нового стиля, нажмите кнопку <b>Cancel </b>(хотя таблица стилей при этом все-таки будет создана).<br> <br> После того как стиль сохранен в таблице (внешней или внутренней — неважно), его нужно применить к выделенному фрагменту текста или целому абзацу. Конечно, если это стиль переопределения тега, его не надо никак применять — Web-обозреватель использует заданные в нем установки при обработке соответствующего тега. Другое дело стилевой класс — нам нужно будет самим указать, что данный текст форматируется с его использованием.<br> <br> Предположим, что вы задали для тега <р> шрифт Verdana размером 9 пунктов. Теперь задайте для тега <BODY> светло-желтый цвет фона, но сохраните эту установку не во внешней таблице стиля, а в самой Web-странице 10.2.htm. Для этого в диалоговом окне New CSS <b>Style </b>(см. Рисунок 10.5) включите переключатель <b>This Document Only. </b>Это пригодится нам в дальнейшем, когда мы будем изучать работу со стилями.<br> <br> Создайте еще два стиля для наших экспериментов. Первый из них будет называться centered, а второй — red. (Как вы уже догадались, это стилевые классы, и поэтому для их создания нужно выбрать переключатель <b>Make Custom Style (class) </b>и ввести их имена в меню <b>Name.) </b>Для первого стиля задайте выравнивание текста посередине, а для второго — красный цвет текста. Сохраните их также во внешней таблице стилей 10.2.css.<br> <br> После всех этих манипуляций наша страница примет вид, показанный на Рисунок 10.24, а панель CSS <b>Styles </b>— на Рисунок 10.25.<br> <br> Как видите, в списке CSS-стилей отображаются три пункта: No CSS Style <b>centered </b>и <b>red. </b>Первый пункт обозначает отсутствие любого стиля, т. е. элемент страницы будет форматироваться по умолчанию. Два других задают созданные нами стилевые классы. Заметьте, что стили, переопределяющие теги, здесь не отображаются, и это правильно.<br> <br> <p align="center"><br><br> <h1>Псевдостили гиперссылок</h1>Псевдостили гиперссылок<br><br> А теперь мы узнаем еще об одной интересной возможности, предлагаемой Web-дизайнеру таблицами стилей. Это псевдостили гиперссылок, позволяюие в достаточно широких пределах менять внешний вид гиперссылок на ваших страницах.<br> <br> Вы уже знаете, что для каждой Web-страницы можно задать цвет фона, текста и кодировку текста. Кроме того, HTML позволяет вам также сменить цвета гиперссылок, отдельно — для непосещенных, отдельно — для посещенных и отдельно — для активной гиперссылки. Этр позволяет немного оживить Web-сайт, сделать его не похожим на другие. Но возможности, предлагаемые псевдостилями, несравнимо шире. Вы можете менять шрифт, начертание и даже убирать надоевшее подчеркивание у активной гиперссылки.<br> <br> Но как же это делается? Обычным переопределением стилей во внешней или внутренней таблице.<br> <br> Но сначала давайте перечислим все доступные в данный момент псевдостили. Как видно из табл. 10.1, всего их четыре.<br> <br> <p align="center"> <b></b><br><br> <h1>Работа с таблицами стилей в Dreamweaver</h1>Работа с таблицами стилей в Dreamweaver<br><br> Вы уже много узнали о таблицах стилей. И, наверно, вас уже давно мучает вопрос: а что же Dreamweaver? Поддерживает ли он работу с таблицами стилей? И если поддерживает, то насколько? И почему автор не упомянул об этом ни слова, а все заваливал нас примерами на этом ужасном и ни капельки не понятном HTML? Неужели нам все-таки придется создавать стили вручную?!!<br> <br> Успокойтесь. Все в порядке. Dreamweaver прекрасно поддерживает и внешние, и внутренние таблицы стилей и позволяет вам создавать стили, "понятные" самым последним на момент его выхода в свет Web-обозревателям. А применять созданные стили к элементам страницы вообще проще простого.<br> <br> Но зачем же понадобилось столько исходного кода? Для того чтобы вы поняли, что такое таблицы стилей и как они работают. А разъяснить это проще всего на примерах, написанных на языках HTML и CSS. К тому же, знать языки HTML и CSS Web-дизайнеру совсем не вредно, наоборот, полезно. Лишние знания — багаж необременительный и зачастую оказывающийся совсем не лишним.<br> <br> В этом есть, правда, еще один резон. Дело в том, что Dreamweaver не поддерживает удобное создание и присвоение элементам страницы встроенных стилей. Единственный способ создавать их — вводить вручную в мини-редакторе HTML или пользоваться диалоговым окном <b>Tag Editor, </b>описанным в главе 2.<br><br> <h1>Справка по атрибуту color в панели Reference</h1>Рисунок 10.1. Справка по атрибуту color в панели <b>Reference</b><br><br><div style="text-align:center;"><img src="image/risunok-10-1-spravka-po-atributu-color-v-paneli_1.gif" alt="Справка по атрибуту color в панели Reference"></div><br> <b>Book </b>этой панели выберите пункт <b>O'REILLY CSS Reference. </b>Чтобы просмотреть справочную информацию по какому-либо атрибуту, достаточно выбрать его имя в раскрывающемся списке <b>Style. </b>Например, на Рисунок 10.1 представлена справочная информация по уже знакомому нам атрибуту<br> color.<br> <br> Мы познакомились с одной из двух разновидностей таблиц стилей — внешней или привязанной. О второй их разновидности, а также об альтернативном способе задания стиля для элемента страницы мы сейчас узнаем.<br><br> <h1>Вкладка Box диалогового</h1>Рисунок 10.10. Вкладка <b>Box </b>диалогового окна <b>CSS Style Definition</b><br><br><div style="text-align:center;"><img src="image/risunok-10-10-vkladka-box-dialogovogo-okna-css_1.gif" alt="Вкладка Box диалогового"></div><br> Воспользовавшись раскрывающимся списком <b>Float, </b>вы до какой-то степени сможете "освободить" элемент страницы, вынеся его за пределы пресловутого "потока" текста. В этом списке доступны три пункта:<br> <br> <li> <b> left </b>- "прижимает" элемент к левому краю страницы. Все остальное содержимое страницы "обтекает" "освобожденный" элемент;<br> </li> <li> <b> right </b>— "прижимает" элемент к правому краю страницы;<br> </li> <li><b> nоnе </b>— оставляет элемент в "потоке" текста (поведение по умолчанию).<br> </li> На Рисунок 10.11 показано графическое изображение, вынесенное за пределы "потока" текста и выровненное по правому краю (атрибут <b>Float </b>был установлен в <b>right).</b><br> <br> <p align="center"><br><br> <h1>Графическое изображение</h1>Рисунок 10.11. Графическое изображение, выровненное по правому краю<br><br><div style="text-align:center;"><img src="image/risunok-10-11-graficheskoe-izobrazhenie_1.gif" alt="Графическое изображение"></div><br> Вы также можете задать, будет ли текущий элемент страницы отображаться с той же стороны и в той же горизонтальной позиции, что и соседствующий с ним "освобожденный" элемент. Задается это с помощью раскрывающегося списка <b>Clear, </b>причем значение этого атрибута должно быть одинаковым у обоих элементов.<br> <br> В списке <b>Clear </b>доступны четыре пункта:<br> <br> <li><b> left </b>— если "освобожденный" и текущий элементы должны находиться слева, то текущий элемент перемещается ниже "освобожденного";<br> </li> <li> <b> right </b>— то же самое, только справа; </li> <li><b> both </b>— то же самое, с обеих сторон;<br> </li> <li> <b> nоnе </b>— разрешает "освобожденному" и текущему элементам занять одну и ту же горизонтальную позицию (поведение по умолчанию).<br> </li> На Рисунок 10.12 показано уже знакомое нам графическое изображение, выровненное по правому краю. Внизу вы видите текстовый абзац, находящийся в другой горизонтальной позиции. Значения атрибута <b>Clear </b>и у изображения, и у абзаца должны быть установлены в <b>right, </b>иначе ничего не получится.<br> <br> <p align="center"><br><br> <h1>Графическое изображение</h1>Рисунок 10.12. Графическое изображение и текстовый абзац, размещенные в разных горизонтальных позициях<br><br><div style="text-align:center;"><img src="image/risunok-10-12-graficheskoe-izobrazhenie-i_1.gif" alt="Графическое изображение"></div><br> Вам придется поэкспериментировать с этими двумя атрибутами стиля, чтобы получить нужный результат. Слишком много тут всяких нюансов, которые полностью никогда не опишешь и не всегда учтешь.<br> <br> А теперь мы с вами подходим к самому интересному.<br> <br> Воспользовавшись особыми атрибутами стиля, вы можете задать отступы от границы элемента до содержащегося в нем текста. Это позволит вам обойтись без громоздких таблиц. Посмотрите, например, на Рисунок 10.13 -там для текста в абзаце заданы сантиметровые отступы слева и справа.<br> <br> Величины отступов задаются в группе элементов управления <b>Padding. </b>В нее входят раскрывающиеся списки <b>Тор </b>(задает отступ сверху), <b>Right </b>(справа), <b>Bottom </b>(снизу) и <b>Left </b>(слева). Единицы измерения выбираются, как обычно, в раскрывающихся списках, расположенных справа. Учтите, что доступны только абсолютные единицы — процентов нет.<br> <br> Группа элементов управления <b>Margin </b>аналогична группе <b>Padding </b>хотя бы тем, что в нее также входят раскрывающиеся списки <b>Тор </b>(задает величину отступа сверху), <b>Right </b>(справа), <b>Bottom </b>(снизу) и <b>Left </b>(слева). Однако, в отличие от <b>Padding, </b>списки этой группы задают расстояние между границей элемента и другими элементами страницы. Единицы измерения выбираются также в раскрывающихся списках справа. В отличие от атрибутов группы <b>Padding, </b>здесь доступны относительные единицы измерения — проценты, т. е. вы можете задать отступ как процент от соответствующего размера родителя.<br> <br> <p align="center"><br><br> <h1>Текст с отступами заданными атрибутами стилей</h1>Рисунок 10.13. Текст с отступами, заданными атрибутами стилей<br><br><div style="text-align:center;"><img src="image/risunok-10-13-tekst-s-otstupami-zadannymi_1.gif" alt="Текст с отступами заданными атрибутами стилей"></div><br> Обе этих группы создают на странице свободное пространство. Но, если свободное пространство, полученное с помощью элементов группы <b>Padding. </b>принадлежит текущему элементу страницы, то созданное с помощью группы <b>Margin </b>— не принадлежит ему, а точнее, принадлежит самой странице. Это можно использовать для получения различного рода эффектов, наподобие тех, что изображены на Рисунок 10.14 и 10.15.<br> <br> На Рисунок 10.14 изображен текстовый абзац, расположенный на странице с отступами слева и справа, равными 1 см. Эти отступы были созданы с помощью элементов управления группы <b>Margin. </b>Сравните его с Рисунок 10.15, где эти же отступы были созданы с помощью группы <b>Padding. </b>(Для вашего удобства для этого абзаца был задан светло-серый фон.) Как видите, в первом случае создаются отступы от границ абзаца до границ родителя (в нашем случае — страницы), т. е. создаваемое свободное пространство не является частью абзаца. Во втором же случае создаваемые отступы находятся внутри абзаца, между его границами и его же содержимым; и свободное пространство, как видите, принадлежит самому абзацу.<br> <br> Вы можете комбинировать эти два способа создания свободного пространства. Взгляните, например, на Рисунок 10.16. И попробуйте догадаться, какие атрибуты стиля были заданы в этом случае.<br> <br> <p align="center"><br><br> <h1>Текстовый абзац</h1>Рисунок 10.14. Текстовый абзац с отступами, созданными с помощью группы атрибутов <b>Margin</b><br><br><br><div style="text-align:center;"><img src="image/risunok-10-14-tekstovyj-abzac-s-otstupami_1.gif" alt="Текстовый абзац"></div><br> <p align="center"><br><br> <br><br> <h1>Текстовый абзац</h1>Рисунок 10.15. Текстовый абзац с отступами, созданными с помощью группы атрибутов <b>Padding</b><br><br><br><div style="text-align:center;"><img src="image/risunok-10-15-tekstovyj-abzac-s-otstupami_1.gif" alt="Текстовый абзац"></div><br> <p align="center"><br><br> <br><br> <h1>Текстовый абзац</h1>Рисунок 10.16. Текстовый абзац с отступами, созданными с помощью групп атрибутов <b>Padding и Margin</b><br><br><div style="text-align:center;"><img src="image/risunok-10-16-tekstovyj-abzac-s-otstupami_1.gif" alt="Текстовый абзац"></div><br> Если вы хотите задать одинаковые отступы со всех сторон, то можете включить флажок <b>Same for All, </b>находящийся в соответствующей группе элементов управления. После этого введите нужную величину отступа в комбинированный список <b>Тор </b>(остальные списки станут недоступными). Флажок Same <b>for All </b>включен по умолчанию, т. к. отступы для элемента страницы, как правило, задаются одинаковыми со всех сторон.<br> <br> Пользуясь атрибутами стиля, задаваемыми на вкладке <b>Box </b>диалогового окна <b>CSS Style Definition </b>(см. Рисунок 10.10), вы можете в некоторой степени обойтись без таблиц. В частности, если вы используете таблицы для задания отступа или отступов вокруг текста (иначе говоря, просветов), то теперь можете от них отказаться. В самом деле, атрибуты стилей <b>Margin и Padding </b>предпочтительнее, так они как не обладают недостатками, в изобилии присущими таблицам.<br><br> <h1>Вкладка Border диалогового</h1>Рисунок 10.17. Вкладка Border диалогового окна <b>CSS Style Definition</b><br><br><div style="text-align:center;"><img src="image/risunok-10-17-vkladka-border-dialogovogo-okna-css_1.gif" alt="Вкладка Border диалогового"></div><br> Рамка рисуется по воображаемой границе элемента страницы (Рисунок 10.18). Значит, вы можете задать расстояние от границы до содержимого элемента, используя атрибуты группы <b>Padding. </b>А расстояние от границы до "соседей" этого элемента задается атрибутами <b>Margin. </b>Эти атрибуты задаются на вкладке <b>Box </b>диалогового окна CSS <b>Style Definition </b>(подробнее см. выше).<br> <br> <p align="center"><br><br> <h1>Рамка вокруг абзаца</h1>Рисунок 10.18. Рамка вокруг абзаца (фон абзаца для удобства сделан светло-серым)<br><br><div style="text-align:center;"><img src="image/risunok-10-18-ramka-vokrug-abzaca-fon-abzaca-dlja_1.gif" alt="Рамка вокруг абзаца"></div><br> Группа комбинированных списков <b>Style </b>задает стиль линии рамки: будет ли она сплошная, точечная или вообще невидимая. Всего в каждом из этих списков доступны девять пунктов:<br> <br> <li> <b>nоnе </b>— рамка отсутствует (поведение по умолчанию);<br> </li> <li> <b>dotted </b>— точечная линия;<br> </li> <li> <b>dashed </b>— пунктирная линия;<br> </li> <li> <b>solid </b>— сплошная линия;<br> </li> <li> <b>double </b>— двойная линия;<br> </li> <li> <b>groove </b>- "вдавленная" трехмерная линия;<br> </li> <li> <b>ridge </b>- "выпуклая" трехмерная линия;<br> </li> <li> <b> inset </b>— элемент страницы напоминает выпуклый трехмерный прямоугольник (Рисунок 10.19);<br> </li> <li> <b> outset </b>— элемент страницы напоминает вдавленный трехмерный прямоугольник (Рисунок 10.20).<br> </li> Как видите, стандарт CSS предоставляет вам довольно много различных стилей для рамок. Пользуясь ими, вы можете создавать довольно интересные вещи, например, подобие стандартных кнопок Windows. (Забегая вперед, можно отметить, что и вести себя они будут как обычные кнопки, если вы кое-что измените в их коде.)<br> <br> Толщина рамки задается группой комбинированных списков <b>Width. </b>В эту группу входят списки <b>Тор </b>(задает толщину верхней стороны рамки), <b>Right </b>(правой), <b>Bottom </b>(нижней) и <b>Left </b>(левой). Вы можете ввести в любой из этих списков числовое значение и выбрать в расположенном правее раскрывающемся списке единицу измерения, абсолютную или относительную.<br> <br> Кроме того, в этих комбинированных списках доступны три пункта, задающие предопределенные значения толщины рамки:<br> <br> <li> <b> thin </b>— тонкая рамка; </li> <li><b>medium </b>— средняя; </li> <li><b>thick </b>— толстая.<br> </li> Описанным выше способом мы можем создавать линейки, не пользуясь, как раньше, для этой цели таблицами. Как видите, стили — самый радикальный способ преодолеть недостатки таблиц.<br> <br> <p align="center"><br><br> <h1>Элемент страницы</h1>Рисунок 10.19. Элемент страницы, созданный с использованием стиля рамки inset<br><br><br><div style="text-align:center;"><img src="image/risunok-10-19-jelement-stranicy-sozdannyj-s_1.gif" alt="Элемент страницы"></div><br> <p align="center"><br><br> <br><br> <h1>Webстраница использующая стили</h1>Рисунок 10.2. Web-страница, использующая стили<br><br><div style="text-align:center;"><img src="image/risunok-10-2-web-stranica-ispolzujushhaja-stili_1.gif" alt="Webстраница использующая стили"></div><br> Так что же мы получим в результате?<br> <br> Во внешней таблице стилей для тега <HI> задаются шрифт размером 24 пункта и выравнивание текста параграфа по центру. Однако во внутренней таблице стилей для того же тега задается размер шрифта 16 пунктов и зеленый цвет текста. Какому определению стилю верить?<br> <br> Web-обозреватель "верит" обоим. Точнее, делает следующее. К определению стиля, сделанному во внешней таблице, добавляет определение, сделанное во внутренней таблице. А если определение затрагивает один и тот же атрибут (в нашем случае — размер шрифта), берется определение, сделанное во внутренней таблице. И результирующий стиль тега <HI> будет иметь такой вид:<br> <br> H1 { font-size: 16pt;<br> <br> text-align: center; color: #00FF00 }<br> <br> Здесь автор просто перевел результирующее определение стиля, хранящееся в памяти Web-обозревателя, на понятный вам язык. Оно-то и будет применено к тексту, отформатированному с использованием тега <H1>.<br> <br> Говорят, что стиль, определенный во внутренней таблице, имеет приоритет перед стилем из внешней таблицы. Аналогично, внутренний стиль, помещенный внутрь тега, имеет приоритет перед и внутренней, и внешней таблицами стилей. Это и называется каскадностью.<br> <br> Давайте рассмотрим стиль copyright.<br> <br> Во внешней таблице для него были заданы курсивный шрифт размером 8 пунктов и выравнивание по правому краю. Когда мы присвоили его элементу, отформатированному с помощью тега <р>, стиль copyright полностью заменил определение стиля для тега <р>, сделанное в той же внешней таблице. Из этого следует, что стили с именем (т. е. стилевые классы и гибридные стили) имеют приоритет перед переопределениями тегов.<br> <br> Теперь рассмотрим подробнее последний параграф нашей странички. Вот он:<br> <br> <Р CLASS="copyright"><br> <br> Авторские <SPAN STYLE="font-style: normal ">права</SРАМ>.<br> <br> Здесь присутствует новый, не знакомый нам тег <SPAN>. Этот тег позволяет выделить фрагмент какого-либо текста и произвести над ним некоторые действия, например применить стиль. Что мы и сделали -- применили к фрагменту текста новый стиль, встроенный в этот тег. Мы убрали курсивное выделение текста, и наши установки перекрыли определение стиля copyright, сделанное во внешней таблице стилей.<br> <br> Каскадность — огромное преимущество. Благодаря ему мы можем сократить размеры своих таблиц стилей до минимума. Нам достаточно будет просто переопределить необходимые атрибуты во внутренней таблице стилей или во внутреннем стиле, чтобы изменить Web-страницу до неузнаваемости. Web-обозреватель однозначно разрешает все конфликты стилей, пользуясь правилом каскадности и приоритета. А правило это звучит просто: своя рубашка, т. е. таблица стилей, ближе к телу... простите, тегу.<br> <br> Однако для неопытного Web-дизайнера каскадность — бич божий. Иной раз бывает трудно сразу выяснить, что перед чем имеет приоритет. И с таким трудом созданные Web-страницы выглядят как кошмар умалишенного. В таком случае помогают только тщательные проверки и перепроверки различных вариантов определения стилей.<br><br> <h1>Элемент страницы</h1>Рисунок 10.20. Элемент страницы, созданный с использованием стиля рамки outset<br><br><div style="text-align:center;"><img src="image/risunok-10-20-jelement-stranicy-sozdannyj-s_1.gif" alt="Элемент страницы"></div><br> С помощью группы селекторов цветов <b>Color </b>задаются цвета каждой из сторон рамки. Если цвет не задан, рамка отображается тем цветом, который задан как цвет текста текущего элемента.<br> <br> Опять же, если вы хотите задать одинаковые параметры для всех сторон рамки, включите флажок <b>Same for All, </b>находящийся в соответствующей группе элементов управления. После этого задайте нужные параметры в списке или селекторе цвета, которые станут после этого доступными.<br> <br> Да, рамка обычно делается одинаковой со всех сторон. Но Dreamweaver и таблицы стилей позволяют вам задать различные стили, значения ширины и цвета для каждой стороны рамки отдельно. Вы даже можете убрать какие-то из сторон рамки или вообще оставить только одну сторону. Такой пример показан на Рисунок 10.21. Здесь мы задали для левой стороны значение thick, а для остальных сторон — 0. Кроме того, мы задали величину отступа <b>Padding </b>слева равной 0,5 см, а с других трех сторон убрали его совсем. Попробуйте сделать так же!<br> <br> <p align="center"><br><br> <h1>Вертикальная линия слева от текста абзаца</h1>Рисунок 10.21. Вертикальная линия слева от текста абзаца<br><br><br><div style="text-align:center;"><img src="image/risunok-10-21-vertikalnaja-linija-sleva-ot-teksta_1.gif" alt="Вертикальная линия слева от текста абзаца"></div><br><br> <br><br> <h1>Вкладка List диалогового</h1>Рисунок 10.22. Вкладка <b>List </b>диалогового окна <b>CSS Style Definition</b><br><br><div style="text-align:center;"><img src="image/risunok-10-22-vkladka-list-dialogovogo-okna-css_1.gif" alt="Вкладка List диалогового"></div><br> В раскрывающемся списке <b>Туре </b>задается вид маркера или нумерации позиций списка. Здесь доступны девять пунктов:<br> <br> <li> <b> disc </b>— маркер в виде кружка с заполнением (поведение по умолчанию для маркированных списков);<br> </li> <li> <b> circle </b>— маркер в виде окружности без заполнения;<br> </li> <li> <b> square </b>— маркер в виде маленького квадратика, с заполнением (на компьютерах Apple Macintosh отображается без заполнения);<br> </li> <li> <b>decimal</b> — нумерация арабскими цифрами (поведение по умолчанию для нумерованных списков);<br> </li> <li> <b>lower-roman </b>— нумерация малыми римскими цифрами; </li> <li><b>upper-roman </b>— нумерация большими римскими цифрами; </li> <li><b>lower-alpha </b>— нумерация малыми латинскими буквами; </li> <li><b>upper-alpha </b>— нумерация большими латинскими буквами;<br> </li> <li> <b>nоnе</b> — нет ни маркера, ни нумерации (поведение по умолчанию для обычных текстовых абзацев).<br> </li> В поле ввода <b>Bullet Image </b>вводится имя файла графического изображения, которое будет использоваться в качестве маркера. Вы можете ввести его вручную или щелкнуть кнопку <b>Browse </b>и выбрать нужный файл в диалоговом окне <b>Select File. </b>Заметьте, что если задан графический маркер, установки атрибута <b>Туре </b>теряют силу.<br> <br> Раскрывающийся список <b>Position </b>задает местонахождение маркера или нумерации. Здесь доступны два пункта. Если выбран пункт <b>inside, </b>то маркер (нумерация) располагается внутри границ текстового абзаца, т. е. принадлежит ему. Если же выбран пункт <b>outside, </b>то маркер (нумерация) размещается за пределами границ абзаца. Таким образом, если задано значение <b>inside, </b>позиция списка выглядит компактнее, а если <b>outside </b>— текст позиции будет лучше читаться. Значение по умолчанию — <b>outside.</b><br><br> <h1>Вкладка Extensions</h1>Рисунок 10.23. Вкладка <b>Extensions </b>диалогового окна <b>CSS Style Definition</b><br><br><div style="text-align:center;"><img src="image/risunok-10-23-vkladka-extensions-dialogovogo-okna_1.gif" alt="Вкладка Extensions"></div><br> Группа раскрывающихся списков <b>Page Break </b>пригодится, если вы планируете дать возможность пользователю распечатать вашу Web-страницу на принтере. С помощью списков этой группы вы можете дать команду драйверу принтера выполнить прогон листа до или после печати какого-либо элемента страницы и продолжить печать с нового листа. Это может быть полезно, если вы хотите предотвратить появление "висячих" строк или если вы разработали хитроумный печатный дизайн, где одни элементы помещаются на левых, а другие — на правых листах (если используется двусторонняя печать). В этом случае воспользуйтесь раскрывающимися списками <b>Before и After, </b>задающими прогон листа соответственно перед и после текущего элемента страницы.<br> <br> В обоих этих списках доступно по четыре пункта. Поскольку они абсолютно одинаковы и вызывают практически идентичные действия, мы рассмотрим их вместе.<br> <br> Пункт <b>auto </b>передает управление размещением информации на бумажных листах Web-обозревателю, т. е. сам Web-обозреватель будет размещать элементы страницы на листах, как ему заблагорассудится. Это поведение по умолчанию.<br> <br> Если вы хотите, чтобы перед текущим элементом страницы или после него принтер начинал печать с нового листа, выберите в соответствующем раскрывающемся списке пункт <b>always. </b>В частности, вы можете установить атрибут <b>Before в always </b>для всех заголовков, т. к. "повисшие" заголовки -грубейшая ошибка в полиграфии.<br> <br> Также вы можете захотеть, чтобы какой-то элемент страницы напечатался только на левой или правой странице, если пользователь использует двустороннюю печать. В этом случае вы должны будете выбрать соответственно пункт <b>left </b>или <b>right </b>раскрывающегося списка. Но учтите при этом, что какая-то страница может остаться вообще пустой.<br> <br> И еще учтите, что атрибуты управления прогоном листа поддерживаются только достаточно новыми версиями Web-обозревателей.<br> <br> Группа раскрывающихся списков <b>Visual Effect </b>управляет визуальным представлением текущего элемента страницы. В частности, с ее помощью вы можете применить к элементу такое замечательное нововведение, появившееся в Internet Explorer 4.0, как фильтры и преобразования.<br> <br> Но сначала обратимся к раскрывающемуся списку <b>Cursor. </b>С его помощью вы можете задать вид курсора мыши, который он примет при наведении на текущий элемент страницы. Это может быть очень забавно.<br> <br> Все доступные формы курсора мыши перечислены в табл. 10.3.<br> <br> <p align="center"> <b></b><br><br> <h1>Webстраница 10 2 htm после задания всех стилей</h1>Рисунок 10.24. Web-страница 10.2.htm после задания всех стилей<br><br><br><div style="text-align:center;"><img src="image/risunok-10-24-web-stranica-10-2-htm-posle-zadanija_1.gif" alt="Webстраница 10 2 htm после задания всех стилей"></div><br> <p align="center"><br><br> <br><br> <h1>Панель CSS Styles после задания всех стилей</h1>Рисунок 10.25. Панель <b>CSS Styles </b>после задания всех стилей<br><br><div style="text-align:center;"><img src="image/risunok-10-25-panel-css-styles-posle-zadanija-vseh_1.gif" alt="Панель CSS Styles после задания всех стилей"></div><br> Имейте в виду также следующее. Если вы задали стиль вида, скажем, H1. right (гибрид стилевого класса и переопределения тега), Dreamweaver отобразит его как right в списке стилей. При этом он позволит вам присвоить его любому элементу страницы, что будет неправильно, т. к. этот стиль будет работать только в теге <HI>. Очень досадно, но если вы используете в своих страницах подобные гибридные стили, вам придется самим помнить о них и выполнять только корректные присвоения.<br> <br> Так как же применить стилевой класс к элементу страницы? Если у вас открыта панель CSS <b>Styles, </b>вам достаточно только выбрать нужный стиль в списке. Естественно, перед этим вы будете должны выделить в окне документа элемент страницы, к которому хотите применить стилевой класс.<br> <br> Давайте поставим текстовый курсор на заголовок нашей страницы и щелкнем по стилевому классу centered. После этого выделим слова "Web-страничка" и щелкнем по стилевому классу red. Что получится? (Ответ см. на Рисунок 10.26.)<br> <br> <p align="center"><br><br> <h1>Страница 10 2 htm</h1>Рисунок 10.26. Страница 10.2.htm после применения стилевых классов centered и red<br><br><div style="text-align:center;"><img src="image/risunok-10-26-stranica-10-2-htm-posle-primenenija_1.gif" alt="Страница 10 2 htm"></div><br> Теперь поставьте текстовый курсор куда-нибудь на текст заголовка и взгляните на окно CSS-стилей. Dreamweaver подсветит в списке стилевой класс сentered. To же самое произойдет с классом red, если вы поместите текстовый курсор на выделенную красным надпись. Таким образом, вы всегда будете знать, с помощью какого стилевого класса отформатирован тот или иной элемент страницы.<br> <br> Но что делать, если панель <b>CSS Styles </b>у вас закрыта? Специально для такого случая в меню <b>Text </b>и контекстном меню предусмотрено подменю CSS <b>Styles. В </b>верхней части этого подменю перечислены все созданные вами к этому моменту стилевые классы. Выбранный класс будет выделен галочкой. Само собой, также присутствует пункт <b>None, </b>позволяющий убрать форматирование с использованием стилевого класса.<br> <br> Вообще, Dreamweaver (как и многие популярные Windows-приложения, например, Microsoft Word) ценен тем, что почти любое действие в нем можно выполнить несколькими различными способами. Вам остается только выбрать тот способ, который придется вам больше по душе.<br><br> <h1>Панель CSS Styles в режиме правки стилей</h1>Рисунок 10.27. Панель <b>CSS Styles </b>в режиме правки стилей<br><br><div style="text-align:center;"><img src="image/risunok-10-27-panel-css-styles-v-rezhime-pravki_1.gif" alt="Панель CSS Styles в режиме правки стилей"></div><br> Чтобы изменить необходимый стиль, выделите его и выберите пункт <b>Edit </b>контекстного или дополнительного меню. Также вы можете дважды щелкнуть по нужному пункту списка стилей. После этого на экране появится диалоговое окно CSS <b>Style Definition, </b>в котором вы сможете выполнить требуемые изменения. После нажатия кнопки <b>ОК </b>все сделанные изменения сохранятся и будут тотчас применены.<br> <br> Удалить стиль вы можете, воспользовавшись пунктом <b>Delete </b>контекстного или дополнительного меню. Но проще и нагляднее нажать кнопку <b>Delete Style </b>(Рисунок 10.28) в правом нижнем углу панели CSS <b>Styles. </b>Естественно, перед этим вы должны будете выбрать нужный стиль в списке.<br> <br> <p align="center"><br><br> <h1>Кнопка Delete Style панели CSS Styles</h1>Рисунок 10.28. Кнопка <b>Delete Style </b>панели <b>CSS Styles</b><br><br><div style="text-align:center;"><img src="image/risunok-10-28-knopka-delete-style-paneli-css_1.gif" alt="Кнопка Delete Style панели CSS Styles"></div><br> Стиль удаляется сразу же, без всякого предупреждения. Форматирование всех элементов страницы, к которым был применен удаленный стиль, приводится к виду по умолчанию. Однако атрибуты CLASS и их значения в тегах этих элементов все же сохраняются, и если вы в дальнейшем создадите стилевой класс с таким же названием, он будет тотчас к ним применен.<br> <br> Также Dreamweaver предоставляет вам возможность создать копию выбранного стиля. Это может быть полезно, если вы хотите создать новый стиль, слегка переделав уже существующий. Для этого выберите нужный стиль и воспользуйтесь пунктом <b>Duplicate </b>контекстного или дополнительного меню.<br> <br> На экране появится уже надоевшее вам диалоговое окно CSS <b>Style Definition. </b>Ну а с ним-то вы знаете, что делать.<br><br> <h1>Кнопка Edit Style Sheet панели CSS Styles</h1>Рисунок 10.29. Кнопка <b>Edit Style Sheet </b>панели <b>CSS Styles</b><br><br><div style="text-align:center;"><img src="image/risunok-10-29-knopka-edit-style-sheet-paneli-css_1.gif" alt="Кнопка Edit Style Sheet панели CSS Styles"></div><br> После этого на экране появится диалоговое окно <b>Edit Style Sheet, </b>показанное на Рисунок 10.30.<br> <br> Большую часть этого диалогового окна занимает список стилей, определенных во внутренней таблице (если таковая есть), и внешних таблиц стилей, привязанных к этой странице. Вы видите, что этот список в нашем случае содержит два пункта. Нижний пункт обозначает стиль, переопределяющий тег <BODY>. (Помните, мы задали для тела документа светло-желтый цвет Верхний же пункт обозначает внешнюю таблицу стилей 10.2.css, привязанную к нашей странице. Заметьте, что этот пункт помечен специальным значком.<br> <br> Под списком находится небольшое текстовое поле, где выводится код определения выбранного в списке стиля. Так что вы сразу можете видеть, что з* стиль попал вам под руку... т. е. под мышку.<br> <br> <p align="center"><br><br> <h1>Панель CSS Styles</h1>Рисунок 10.3. Панель <b>CSS Styles</b><br><br><div style="text-align:center;"><img src="image/risunok-10-3-panel-css-styles_1.gif" alt="Панель CSS Styles"></div><br> Чтобы создать новый стиль, выберите пункт New <b>CSS Style </b>контекстного или дополнительного меню либо нажмите одноименную кнопку (Рисунок 10.4), расположенную в правом нижнем углу панели <b>CSS Styles. </b>Также вы можете активизировать окно документа и выбрать пункт New <b>style </b>подменю <b>CSS Styles </b>контекстного меню или одноименный пункт одноименного подменю, находящегося в меню <b>Text. </b>В результате любого из этих действий на экране появится диалоговое окно New CSS Style, показанное на Рисунок 10.5.<br> <br> <p align="center"><br><br> <h1>Диалоговое окно Edit Style Sheet</h1>Рисунок 10.30. Диалоговое окно <b>Edit Style Sheet</b><br><br><div style="text-align:center;"><img src="image/risunok-10-30-dialogovoe-okno-edit-style-sheet_1.gif" alt="Диалоговое окно Edit Style Sheet"></div><br> Левее списка находятся пять кнопок. Перечислим их по порядку.<br> <br> Кнопка <b>Link </b>позволяет привязать к странице внешнюю таблицу стилей. Если вы на нее нажмете, на экране появится диалоговое окно <b>Link External Style Sheet, </b>показанное на Рисунок 10.31. В поле ввода <b>File/URL </b>введите имя файла внешней таблицы стилей, которую вы хотите привязать к своей странице. Если вы не хотите вводить ее вручную, щелкните кнопку <b>Browse </b>и выберите нужный файл в диалоговом окне <b>Select File. </b>После этого нажмите кнопку <b>ОК </b>для привязки таблицы стилей или <b>Cancel </b>— для отказа от этого.<br> <br> <p align="center"><br><br> <h1>Диалоговое окно Link External Style Sheet</h1>Рисунок 10.31. Диалоговое окно <b>Link External Style Sheet</b><br><br><div style="text-align:center;"><img src="image/risunok-10-31-dialogovoe-okno-link-external-style_1.gif" alt="Диалоговое окно Link External Style Sheet"></div><br> В диалоговом окне <b>Link External Style Sheet </b>имеется также группа переключателей <b>Add </b>As. Переключатель <b>Link </b>(включен по умолчанию) выполняет обычную привязку таблицы стилей с помощью тега <LINK>; это, собственно, делается почти всегда. А переключатель <b>Import </b>позволяет вам импортировать внешнюю таблицу стилей, т. е. перенести все содержимое внешней таблицы стилей во внутреннюю. Однако такой возможностью пользоваться не рекомендуется, поскольку команда CSS @import, с помощью которой выполняется импортирование, поддерживается далеко не всеми программами<br> <br> Web-обозревателей. А, кроме того, при импортировании возможен неразрешимый конфликт стилей, когда во внутренней и внешней таблицах оказывается два стиля с одинаковым именем. (При импортировании механизм "каскадности" не работает.)<br> <br> Однако вернемся к диалоговому окну <b>Edit Style Sheet.</b><br> <br> Кнопка New позволит вам создать новый стиль. После ее нажатия на экране появится уже диалоговое окно <b>CSS Style Definition. В </b>нем вы сможете создать новый стиль, а, возможно, и новую внешнюю таблицу стилей.<br> <br> Кнопка <b>Edit </b>позволит вам отредактировать существующий стиль. Не будем рассказывать, как это делается, — вы уже это знаете. Чтобы вызвать нужный стиль для редактирования, также можно дважды щелкнуть по нужному пункту списка.<br> <br> Кнопка <b>Duplicate </b>позволит вам создать стиль, являющийся точной копией уже существующего стиля, выбранного в списке. Это полезно, если вы хотите создать новый стиль, взяв за основу уже существующий и слегка его подредактировав.<br> <br> Кнопка <b>Remove </b>удаляет выбранный стиль.<br> <br> И, наконец, кнопка <b>Done </b>закрывает диалоговое окно <b>Edit Style Sheet.</b> Вы также можете нажать кнопку закрытия окна, находящуюся в его заголовке.<br> <br> Ну, вот и все. С кнопками мы разобрались. Но остается вопрос: как все-таки добраться до внешней таблицы стилей? Как ее отредактировать? Как, в конце концов, удалить ссылку на нее?<br> <br> Очень просто.<br> <br> Чтобы отредактировать внешнюю таблицу стилей, выберите в списке стилей соответствующий ей пункт и нажмите кнопку <b>Edit </b>или просто дважды щелкните по этому пункту. На экране появится еще одно диалоговое окно <b>Edit Style Sheet, </b>но в нем будет отображаться содержимое внешней таблицы стилей. В этом-то окне вы и сможете отредактировать ее содержимое. Не верите? Посмотрите на Рисунок 10.32.<br> <br> Чтобы удалить ссылку на внешнюю таблицу стилей, воспользуйтесь все той же кнопкой <b>Remove.</b><br> <br> Выше мы рассматривали, как можно привязать к Web-странице еще одну таблицу стилей. Это можно было сделать в диалоговом окне <b>Edit Style Sheet. </b>Однако это совсем не обязательно — то же самое вы можете выполнить, нажав кнопку <b>Attach Style Sheet </b>(Рисунок 10.33) в правом нижнем углу панели <b>CSS Styles </b>либо выбрав пункт <b>Attach Style Sheet, </b>расположенный в контекстном и дополнительном меню этой же панели. Также этот пункт находится в подменю <b>CSS Styles </b>меню <b>Text </b>и контекстном меню окна документа. При выборе этого пункта на экране появится диалоговое окно <b>Select File, </b>где вы сможете выбрать нужный файл. После нажатия кнопки <b>Select </b>выбранная таблица стилей будет тотчас привязана к странице.<br> <br> <p align="center"><br><br> <h1>Содержимое внешней</h1>Рисунок 10.32. Содержимое внешней таблицы стилей 10.2.сss в диалоговом окне <b>Edit Style Sheet</b><br><br><br><div style="text-align:center;"><img src="image/risunok-10-32-soderzhimoe-vneshnej-tablicy-stilej_1.gif" alt="Содержимое внешней"></div><br> <p align="center"><br><br> <br><br> <h1>Кнопка Attach Style Sheet панели CSS Styles</h1>Рисунок 10.33. Кнопка <b>Attach Style Sheet </b>панели <b>CSS Styles</b><br><br><div style="text-align:center;"><img src="image/risunok-10-33-knopka-attach-style-sheet-paneli-css_1.gif" alt="Кнопка Attach Style Sheet панели CSS Styles"></div><br> Если вы считаете, что сделали удачную внутреннюю таблицу стилей, и хотите сохранить ее в отдельном файле как внешнюю (экспортировать таблицу стилей), то Dreamweaver поможет вам и в этом случае. Для этого выберите пункт <b>Export Style Sheet, </b>расположенный в контекстном и дополнительном меню панели <b>CSS Styles. </b>Также этот пункт располагается в подменю <b>CSS</b> <b>Styles, </b>находящемся в меню <b>Text </b>и контекстном меню окна документа. После выбора этого пункта на экране появится стандартное диалоговое окно сохранения файла Windows. Введите имя файла и нажмите кнопку сохранения.<br><br> <h1>Диалоговое окно</h1>Рисунок 10.34. Диалоговое окно <b>Tag Editor </b>(выбрана вкладка <b>Style Sheet/Accessibility)</b><br><br><div style="text-align:center;"><img src="image/risunok-10-34-dialogovoe-okno-tag-editor-vybrana_1.gif" alt="Диалоговое окно"></div><br> Собственно определение тега вводится в поле ввода <b>Style. </b>Введите в него текст font-size: larger. И нажмите кнопку ОК. После этого шрифт курсивного текста увеличится в размерах — наш внутренний стиль работает!<br> <br> Теперь примемся за заголовок. И используем мини-редактор HTML, описанный еще в главе 2 этой книги. Конечно, можно работать в режиме отображения кода окна документа. Но мини-редактор HTML несколько удобнее, т. к. вы можете видеть одновременно и саму страницу, и нужный фрагмент кода.<br> <br> Поместите текстовый курсор в текст заголовка и выберите в контекстном меню пункт <b>Edit Tag <H1>... </b>Результат этого действия показан на Рисунок 10.35.<br> <br> Вставьте в тег <H1> атрибут STYLE и присвойте ему значение color: #00FF00;. Должно получиться так, как показано на Рисунок 10.36.<br> <br> <p align="center"><br><br> <h1>Миниредактор HTML</h1>Рисунок 10.35. Мини-редактор HTML, отображающий HTML-код тега <Н1><br><br><br><div style="text-align:center;"><img src="image/risunok-10-35-mini-redaktor-html-otobrazhajushhij_1.gif" alt="Миниредактор HTML"></div><br> <p align="center"><br><br> <br><br> <h1>Измененный HTMLкод в миниредакторе HTML</h1>Рисунок 10.36. Измененный HTML-код в мини-редакторе HTML<br><br><div style="text-align:center;"><img src="image/risunok-10-36-izmenennyj-html-kod-v-mini-redaktore_1.gif" alt="Измененный HTMLкод в миниредакторе HTML"></div><br> Теперь закройте мини-редактор, нажав клавишу <Enter>. (Нажатие клавиши <Esc> позволит вам отменить сделанные изменения.) И посмотрите на заголовок. Он позеленел, но не от злости, а от того, что мы применили к нему встроенный стиль.<br> <br> Так что вы можете создавать в Dreamweaver и встроенные стили. Однако имейте в виду, что в этом случае вам придется полагаться только на свое знание HTML и CSS — Dreamweaver почти не автоматизирует ваш труд. А узнать побольше о HTML и CSS вам помогут интерактивные руководства, поставляемые вместе с этой замечательной программой.<br><br> <h1>Диалоговое окно Design Time Style Sheets</h1>Рисунок 10.37. Диалоговое окно <b>Design Time Style Sheets</b><br><br><div style="text-align:center;"><img src="image/risunok-10-37-dialogovoe-okno-design-time-style_1.gif" alt="Диалоговое окно Design Time Style Sheets"></div><br> В этом окне находятся два списка. В списке <b>Show Only at Design Time </b>перечислены таблицы стилей времени редактирования. В списке <b>Hide at Design</b> <b>Time </b>перечислены таблицы стилей времени просмотра. Точнее, не сами таблицы стилей, а имена файлов, в которых они сохранены.<br> <br> Чтобы добавить файл в один из списков, нажмите кнопку со знаком "плюс", находящуюся над ним. После этого вам останется выбрать нужный файл в диалоговом окне <b>Select File </b>и нажать кнопку открытия.<br> <br> Чтобы удалить файл из списка, выберите его и нажмите кнопку со знаком "минус", находящуюся над списком.<br> <br> После нажатия кнопки <b>OK </b>Dreamweaver примет ваши указания к сведению. Причем, немедленно.<br> <br> Для примера вы можете открыть страницу 10.2.htm и задать в качестве таблицы времени редактирования 10.1.htm, а в качестве таблицы времени просмотра — 10.2.htm. Получившийся результат показан на Рисунок 10.38.<br> <br> <p align="center"><br><br> <h1>Страница 10 2 htm</h1>Рисунок 10.38. Страница 10.2.htm, для которой были заданы временные таблицы, в окне документа Dreamweaver и в окне Web-обозревателя<br><br><br><div style="text-align:center;"><img src="image/38a.gif" alt="Страница 10 2 htm"></div><br><br> <br><br> <h1>Диалоговое окно</h1>Рисунок 10.39. Диалоговое окно <b>Convert to 3.0 Browser Compatible</b><br><br><div style="text-align:center;"><img src="image/39.gif" alt="Диалоговое окно"></div><br> Чтобы преобразовать страницу, использующую стили, в совместимую со старыми программами, включите один из переключателей в группе <b>Convert: </b>либо CSS <b>Styles to HTML Markup, </b>либо <b>Both. </b>(О переключателе <b>Layers to Table </b>мы поговорим потом, а сейчас вы пока можете не обращать на него внимания — стилей он все равно не затрагивает.) После этого нажмите кнопку <b>ОК </b>для запуска преобразования, либо <b>Cancel </b>— для отказа от него.<br> <br> По окончании преобразования Dreamweaver выведет на экран новое окно документа, в котором будет находиться новая Web-страница, являющаяся результатом преобразования старой, "несовместимой" страницы. Это очень удобно: вы можете оставить у себя старую (использующую стили) страницу для каких-то нужд. На взгляд автора, лучше всего делать так: вносить все изменения в старые (использующие стили) версии страниц, а потом преобразовывать их в "совместимые" и именно их публиковать в Сети. Таким образом, вам не нужно будет вносить одни и те же изменения по два раза в разные версии страниц.<br> <br> Попробуйте преобразовать в "совместимый" вид страничку 10.2.htm. Посмотрите на Рисунок 10.40 — даже встроенный стиль преобразовался! Хотя фон страницы, заданный в стиле, переопределяющем тег <BODY>, Dreamweaver все же "потерял". Ну и растяпа!..<br> <br> <p align="center"><br><br> <h1>Кнопка New CSS Style</h1>Рисунок 10.4. Кнопка <b>New CSS Style</b><br><br><br><div style="text-align:center;"><img src="image/risunok-10-4-knopka-new-css-style_1.gif" alt="Кнопка New CSS Style"></div><br> <p align="center"><br><br> <br><br> <h1>Результат преобразования</h1>Рисунок 10.40. Результат преобразования страницы 10.2.htm (на переднем плане)<br><br><br><div style="text-align:center;"><img src="image/40.gif" alt="Результат преобразования"></div><br><br> <br><br> <h1>Диалоговое окно New CSS Style</h1>Рисунок 10.5. Диалоговое окно <b>New CSS Style</b><br><br><br><div style="text-align:center;"><img src="image/risunok-10-5-dialogovoe-okno-new-css-style_1.gif" alt="Диалоговое окно New CSS Style"></div><br><br> <br><br> <h1>Вкладка Type диалогового окна New CSS Style</h1>Рисунок 10.6.Вкладка <b>Type</b> диалогового окна <b>New CSS Style</b><br><br><div style="text-align:center;"><img src="image/risunok-10-6-vkladka-type-dialogovogo-okna-new-css_1.gif" alt="Вкладка Type диалогового окна New CSS Style"></div><br> Введя нужные данные, нажмите кнопку ОК для создания стиля или <b>Cancel </b>— для отказа от этого.<br> <br> Давайте предположим, что мы хотим переопределить стиль тега <р> и поместить определение этого стиля в новую таблицу стилей, которую затем привяжем к новой Web-странице 10.2.htm. Для этого сначала выберите педостигается тот или иной эффект. Дело в том, что атрибутов стилей, которые здесь будут описаны, довольно много, и примечания получатся слишком большими. Если вам понадобится выяснить синтаксис какого-то атрибута CSS, обратитесь к электронному руководству, поставляемому в составе Dreamweaver. Как его вызвать, вы уже знаете.<br> <br> <br><br> <h1>Комбинированный список</h1>Рисунок 10.7. Комбинированный список Size, задающий размер шрифта<br><br><div style="text-align:center;"><img src="image/risunok-10-7-kombinirovannyj-spisok-size_1.gif" alt="Комбинированный список"></div><br> В раскрывающемся списке, расположенном правее <b>Size, </b>выбирается единица измерения размера шрифта. Этот список доступен только тогда, когда в <b>Size </b>выбрано или введено числовое значение. Всего здесь доступно девять пунктов, представляющих девять единиц измерения, поддерживаемых стандартом CSS. Все они перечислены и описаны в табл. 10.2.<br> <br> <p align="center"> <b></b><br><br> <h1>Вкладка Background</h1>Рисунок 10.8. Вкладка <b>Background </b>диалогового окна <b>CSS Style Definition</b><br><br><div style="text-align:center;"><img src="image/risunok-10-8-vkladka-background-dialogovogo-okna_1.gif" alt="Вкладка Background"></div><br> Селектор цветов <b>Background Color </b>задает цвет фона. Значение по умолчанию зависит от программы Web-обозревателя.<br> <br> В комбинированном списке <b>Background Image </b>задается графическое изображение, которое будет использоваться в качестве графического фона страницы. Вы можете ввести имя нужного файла или выбрать пункт <b>попе, </b>убирающий графический фон. Если вы не хотите вводить имя файла вручную, щелкните кнопку <b>Browse </b>и выберите нужный файл в диалоговом окне <b>Select File.</b><br> <br> Обычно графическое изображение, использующееся в качестве фона, значительно меньше в размерах, чем сама страница. В этом случае Web-обозреватель многократно повторяет это изображение, выкладывая своего рода "мозаику", занимающую всю страницу. Управлять тем, как будет повторяться это изображение, можно с помощью раскрывающегося списка <b>Repeat. </b>Здесь доступны четыре пункта:<br> <br> <li> <b>no-repeat </b>— отключает повторение. Изображение помещается на страницу всего один раз, в левом верхнем углу элемента;<br> </li> <li> <b> repeat </b>— включает повторение изображения по горизонтали и вертикали (поведение по умолчанию);<br> </li> <li> <b>repeat-x </b>— включает повторение изображения только по горизонтали; </li> <li><b>repeat-y </b>— устанавливает повторение изображения только по вертикали.<br> </li> Когда вы прокручиваете содержимое окна Web-обозревателя, то вместе с содержимым Web-страницы прокручивается и графический фон, если он есть. Некоторые Web-обозреватели поддерживают одну забавную возможность: можно запретить прокрутку графического фона, зафиксировав его на месте. Это может придать странице некоторую оригинальность, однако при прокрутке отнимет больше ресурсов компьютера. И сделать это можно с помощью раскрывающегося списка <b>Attachment. </b>Пункт <b>scroll </b>этого списка заставляет графический фон прокручиваться (поведение по умолчанию), a <b>fixed </b>— фиксирует его на месте.<br> <br> Также некоторые Web-обозреватели позволяют вам поместить графический фон в нужное место страницы. Для этого предназначены раскрывающиеся списки <b>Horizontal Position и Vertical Position. </b>Вы можете ввести в них числовые значения соответственно горизонтальной и вертикальной координат графического фона. В раскрывающихся списках, расположенных правее, выбирается одна из единиц измерения, поддерживаемых CSS.<br> <br> Кроме того, в раскрывающемся списке <b>Horizontal Position </b>доступны три пункта:<br> <br> <li> <b>left </b>— выравнивание графического фона по левому краю элемента страницы (поведение по умолчанию);<br> </li> <li> <b>center </b>— выравнивание по центру;<br> </li> <li> <b>right </b>— выравнивание по правому краю.<br> </li> В раскрывающемся списке <b>Vertical Position </b>доступны также три пункта:<br> <br> <li> <b>top</b> — выравнивание графического фона по верху элемента страницы (поведение по умолчанию);<br> </li> <li> <b> center </b>— выравнивание по центру; </li> <li><b>bottom </b>— выравнивание по низу.<br> </li> Очевидно, что задавать эти параметры нужно, предварительно задав соответствующие параметры других атрибутов стиля, перечисленных на вкладке <b>Background. </b>А для достижения необходимого результата наверняка придется поэкспериментировать.<br><br> <h1>Вкладка Block диалогового</h1>Рисунок 10.9. Вкладка <b>Block </b>диалогового окна <b>CSS Style Definition</b><br><br><div style="text-align:center;"><img src="image/risunok-10-9-vkladka-block-dialogovogo-okna-css_1.gif" alt="Вкладка Block диалогового"></div><br> В комбинированном списке <b>Word Spacing </b>задается величина дополнительного пространства, помещаемого между словами. Введите нужную величину и выберите в расположенном правее раскрывающемся списке единицу измерения. Здесь доступны все единицы измерения, кроме процентов. Пункт <b>normal </b>комбинированного списка <b>Word Spacing </b>убирает дополнительное расстояние между словами текста.<br> <br> В комбинированном списке <b>Letter Spacing </b>задается величина дополнительного пространства, помещаемого между символами. Введите нужную величину и выберите в расположенном правее раскрывающемся списке единицу измерения. Здесь доступны все единицы измерения, кроме процентов. Пункт <b>normal </b>комбинированного списка убирает дополнительное расстояние между символами текста.<br> <br> Комбинированный список <b>Vertical Alignment </b>задает вертикальное выравнивание элемента страницы относительно родителя. Здесь доступны следующие пункты:<br> <br> <li> <b> baseline </b>— выравнивание базовой линии элемента страницы по базовой линии текста родителя (поведение по умолчанию);<br> </li> <li> <b>sub</b> — помещает текст ниже остального текста, имитируя нижний индекс;<br> </li> <li><b> super </b>— помещает текст выше остального текста, имитируя верхний индекс;<br> </li> <li> <b>top</b> — выравнивание элемента страницы по верхнему краю родительского элемента;<br> </li> <li> <b> text-top </b>— выравнивает верхний край элемента страницы по верхнему краю текста родителя;<br> </li> <li> <b> middle </b>— помещает середину элемента страницы на половину высоты шрифта выше базовой линии текста родителя;<br> </li> <li> <b> bottom </b>— выравнивание элемента страницы по нижнему краю родительского элемента:<br> </li> <li> <b> text-bottom </b>— выравнивает нижний край элемента страницы по нижнему краю текста родителя.<br> </li> Кроме того, вы можете ввести в этот комбинированный список процентное значение, задающее, насколько выше или ниже базовой линии родителя находится базовая линия элемента страницы.<br> <br> Как бы то ни было, для того чтобы получить в окне Web-обозревателя необходимый результат, вам придется поэкспериментировать с разными значениями этого атрибута. Рассказать, как будет выглядеть тот или иной элемент страницы при том или ином значении, невозможно — его нужно видеть своими глазами. (Это, впрочем, справедливо и для многих других параметров элементов страниц, задаваемых в Dreamweaver.)<br> <br> Раскрывающийся список <b>Text Align </b>задает горизонтальное выравнивание текста в абзаце. Здесь доступны четыре пункта:<br> <br> <li> <b> left </b>— выравнивание по левому краю (поведение по умолчанию);<br> </li> <li> <b> center </b>— по центру;<br> </li> <li> <b> right </b>— по правому краю;<br> </li> <li> <b> justify </b>— по ширине.<br> </li> В поле ввода <b>Text Indent </b>задается величина отступа красной строки. Эта величина может быть как положительной, так и отрицательной (выступ). В раскрывающемся списке, расположенном правее, выбирается единица измерения.<br> <br> В раскрывающемся списке <b>Whitespace </b>задается поведение пробелов внутри текста абзаца. Здесь доступны три пункта:<br> <br> <li> <b> normal </b>— задает обычное отображение текста, т. е. Web-обозреватель может переносить строки по пробелам, если они (строки) не будут помещаться в родительском элементе;<br> </li> <li> <b> рrе</b> — превращает текст абзаца в фиксированно отформатированный. Как вы помните из главы 5, такой текст отображается так, как он введен в исходном HTML-коде, с учетом пробелов, возвратов каретки и т. п. Одним словом, текст ведет себя так, словно заключен внутрь тега <PRE>;<br> </li> <li> <b> nowrap </b>— запрещает перенос текста по пробелам. Вам будет необходимо поставить в нужные места строк теги разрыва текста <BR>, если вы хотите, чтобы они все-таки переносились. Это может быть полезно, если вы захотите контролировать, как текст будет переноситься на другую строку.<br> </li> Раскрывающийся список <b>Display </b>задает поведение элемента страницы. В нем доступно очень много пунктов:<br> <br> <li> <b> попе </b>— элемент вообще не будет присутствовать на странице, словно он и не задан в ее коде;<br> </li> <li> <b> inline </b>— элемент страницы ведет себя как отдельный символ текста (встроенный элемент);<br> </li> <li> <b> block </b>— элемент страницы ведет себя как абзац текста (блочный элемент); </li> <li><b>list-item </b>— элемент страницы ведет себя как пункт списка;<br> </li> <li> <b> run-in </b>— встраивающийся элемент. Если за таким элементом идет блочный элемент, он становится первым символом блочного элемента, в противном случае он сам становится блочным элементом;<br> </li> <li> <b> compact </b>— компактный элемент. Если за таким элементом идет блочный элемент, он форматируется как однострочный встроенный элемент и помещается на левой границе блочного элемента (если эта граница задана). В противном случае он сам форматируется как блочный элемент;<br> </li> <li> <b> marker </b>— маркер списка;<br> </li> <li> <b> table </b>— таблица;<br> </li> <li> <b>inline-table </b>— таблица, отформатированная как встроенный элемент;<br> </li> <li> <b> table-row-group </b>— строки секции тела таблицы;<br> </li> <li> <b> table-header-group </b>— строки секции заголовка таблицы;<br> </li> <li> <b> table-footer-group </b>— строки секции "поддона" таблицы;<br> </li> <li> <b>table-row </b>— строка таблицы;<br> </li> <li> <b> table-column-group </b>— группа колонок таблицы;<br> </li> <li> <b> table-column </b>— колонка таблицы;<br> </li> <li><b> table-cell </b>— ячейка таблицы;<br> </li> <li><b> table-caption </b>— заголовок таблицы.</li> <br><br> <h1>Создание стилей</h1>Создание стилей<br><br> Перед тем как начать экспериментировать со стилями, откройте Web-страницу 1.1.htm, созданную нами в самом начале изучения Dreamweaver. Над ее содержимым мы и будем издеваться. Только пересохраните ее под именем 10.2.htm, выбрав пункт Save As в меню <b>File </b>или нажав комбинацию клавиш <Ctrl>+<Shift>+<S>.<br> <br> Вся работа со стилями протекает в панели CSS <b>Styles </b>Dreamweaver, показанной на Рисунок 10.3. Чтобы вызвать ее на экран, либо выберите в меню <b>Window </b>пункт CSS <b>Styles, </b>либо нажмите комбинацию клавиш <Shift>+<F11>.<br> <br> <p align="center"><br><br> <h1>Псевдостили гиперссылок</h1>Таблица 10.1. Псевдостили гиперссылок<br><br> <table border=1> <tr> <td> </td> <td> </td> <td> </td> <td> </td> </tr> <tr> <td> </td> <td> <b>Псевдостиль</b><br> <br> </td> <td> <b>Описание</b><br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> A: link<br> <br> </td> <td> Применяется ко всем гиперссылкам документа<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> A: active<br> <br> </td> <td> Применяется ко всем активным гиперссылкам документа<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> A: visited<br> <br> </td> <td> Применяется ко всем посещенным гиперссылкам документа<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> A: hover<br> <br> </td> <td> Применяется к гиперссылке, на которую указывает курсор мыши<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> </td> <td> </td> <td> </td> </tr> </table> Теперь давайте создадим небольшой пример Web-странички, использующей псевдостили.<br> <br> <HTML> <head> <link rel="canonical" href="https://www.e-lave.ru//index.htm"/><br> <br> <ТIТLЕ>Псевдостили</ТIТLЕ> <STYLE><br> <br> A: link { color: tCC0000;<br> <br> background-color: #FFFFFF; text-decoration: none } A: activ<br> e { color: #FFFFFF; <br> background-color: #CC0000; text-decoration: none } A: visited <br> { color: #CC0000;<br> <br> background-color: ttFFFFFF; text-decoration: line-through } A: hover <br> { color: #FFFFFF;<br> <br> background-color: #CC0000; text-decoration: none }<br> <br> </STYLE> <br> </HEAD> <br> <BODY><br> <br> <A НRЕF="">Гиперссылка 1</А></Р><br> <br> <A НRЕF="">Гиперссылка 2</А></Р><br> <br> <A НRЕF="">Гиперссылка 3 </А></Р><br> </BODY><br> </HTML><br> <br> Сохраните эту страницу в файле 10.2.htm и откройте в Web-обозревателе. Попробуйте провести курсором мыши над любой гиперссылкой и посмотрите, что из этого получится.<br> <br> Автор не будет подробно разбирать таблицу стилей и ее атрибуты. Попробуйте разобраться в ней сами. Учтите только, что атрибут background-color задает цвет фона текста, а атрибут text-decoration — подчеркивание или зачеркивание текста. Значение line-through последнего задает зачеркивание текста, а попе — отсутствие подобного "украшения".<br> <br> Вообще, псевдостили лучше всего задавать во внешней таблице стилей, поскольку все таблицы сайта должны выглядеть одинаково. Тем более это касается гиперссылок. Представьте себе удивление и гнев посетителя, если на различных страницах гиперссылки отображаются разным цветом.<br><br> <h1>Единицы измерения поддерживаемые стандартом CSS</h1>Таблица 10.2. Единицы измерения, поддерживаемые стандартом CSS<br><br> <table border=1> <tr> <td> </td> <td> </td> <td> </td> <td> </td> </tr> <tr> <td> </td> <td> <b>Единица измерения</b><br> <br> </td> <td> <b>Описание</b><br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> pixels<br> <br> </td> <td> Пикселы<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> points<br> <br> </td> <td> Пункты<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> in<br> <br> </td> <td> Дюймы<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> cm<br> <br> </td> <td> Сантиметры<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> mm<br> <br> </td> <td> Миллиметры<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> picas<br> <br> </td> <td> Пики<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> ems<br> <br> </td> <td> Размер буквы "m" текущего шрифта<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> exs<br> <br> </td> <td> Размер буквы "х" текущего шрифта<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> %<br> <br> </td> <td> Проценты от размера шрифта родительского элемента<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> </td> <td> </td> <td> </td> </tr> </table> В комбинированном списке <b>Weight </b>задается величина "жирности" шрифта. Вы можете ввести числовое значение "жирности" от 100 до 900, либо выбрать одно из предопределенных абсолютных или относительных значений. Как и в списке <b>Size, </b>здесь доступны пункты трех типов:<br> <br> <li> пункты — числовые значения. Задают "жирность" шрифта в числах от 100 до 900. Обычный шрифт имеет значение 400, жирный — 700;<br> </li> <li> пункты <b>normal и bold, </b>задающие соответственно обычный и жирный шрифт;<br> </li> <li> пункты <b>bolder и lighter, </b>задающие относительную "жирность" шрифта. Пункт <b>bolder </b>увеличивает "жирность" на одну позицию в списке предопределенных значений, а пункт <b>lighter </b>— уменьшает.<br> </li> В раскрывающемся списке <b>Style </b>вы можете выбрать "стиль" шрифта, а именно, будет ли он являться курсивом или нет. Доступны три пункта: <b>normal </b>— обычный шрифт, <b>italic </b>— курсив и <b>oblique </b>— зависит от конкретной программы Web-обозревателя, но обычно тоже курсив.<br> <br> В раскрывающемся списке <b>Variant </b>задается вид малых букв шрифта. Пункт <b>normal </b>задает нормальный их вид, a <b>small-caps </b>делает их похожими на уменьшенные заглавные буквы.<br> <br> В комбинированном списке <b>Line Height </b>задается вертикальный размер строки текста. Значение <b>normal </b>задает размер по умолчанию, вычисляемый самим Web-обозревателем. Чтобы задать свой размер, введите его вручную и выберите единицу измерения. Раскрывающийся список, задающий единицу измерения, находится правее. Если вы его откроете, то увидите, что он имеет новый пункт <b>multiple; </b>он задает умножение размера по умолчанию на введенное вами число.<br> <br> В раскрывающемся списке <b>Case </b>задается вид текста: будет ли он отображаться только большими или только маленькими буквами. Здесь доступны четыре пункта:<br> <br> <li> <b> capitalize </b>— каждое слово текста отображается с большой буквы; </li> <li><b>uppercase </b>— текст отображается только большими буквами; </li> <li><b>lowercase </b>— только маленькими буквами;<br> </li> <li> <b> nоnе </b>— текст отображается как он набран, без всяческих преобразований (поведение по умолчанию).<br> </li> Группа флажков <b>Decoration </b>задает дополнительное "украшение" текста: подчеркивание, надчеркивание или зачеркивание. Здесь доступно пять флажков:<br> <br> <li> <b> underline </b>— подчеркивает текст (поведение по умолчанию для гиперссылок); </li> <li><b>overline </b>— надчеркивает текст; </li> <li><b>line-through </b>— зачеркивает текст;<br> </li> <li> <b> blink </b>— заставляет текст мерцать (поддерживается только старыми версиями Navigator);<br> </li> <li> <b> попе </b>- убирает все эти "украшения" (поведение по умолчанию для остального текста).<br> </li> Селектор цветов <b>Color </b>задает цвет текста.<br><br> <h1>Формы курсора мыши</h1>Таблица 10.3. Формы курсора мыши, доступные для задания в раскрывающемся списке <b>Cursor</b><br><br> <table border=1> <tr> <td> </td> <td> </td> <td> </td> <td> </td> </tr> <tr> <td> </td> <td> <b>Пункт раскрывающегося списка Cursor</b><br> <br> </td> <td> <b>Вид курсора мыши</b><br> <br> </td> <td> </td> </tr> <tr> <td></td> <td> hand<br> <br> </td> <td> "Указующий перст", появляющийся при наведении курсора мыши на гиперссылки<br> <br> </td> <td></td> </tr> <tr> <td> </td> <td> crosshair<br> <br> </td> <td> Перекрестье, "прицел"<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> text<br> <br> </td> <td> Текстовый курсор<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> wait<br> <br> </td> <td> Песочные часы, обозначающие, что Windows "думу думает"<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> default<br> <br> </td> <td> Обычная стрелка<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> help<br> <br> </td> <td> Обычная стрелка с вопросительным знаком справа<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> e-resize<br> <br> </td> <td> Стрелка вправо, "на восток"<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> ne-resize<br> <br> </td> <td> Стрелка вверх и вправо, "на северо-восток"<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> n-resize<br> <br> </td> <td> Стрелка вверх, "на север"<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> nw-resize<br> <br> </td> <td> Стрелка вверх и влево, "на северо-запад" .<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> w-resize<br> <br> </td> <td> Стрелка влево, "на запад"<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> sw-resize<br> <br> </td> <td> Стрелка вниз и влево, "на юго-запад"<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> s-resize<br> <br> </td> <td> Стрелка вниз, "на юг"<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> se-resize<br> <br> </td> <td> Стрелка вниз и вправо, "на юго-восток"<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> auto<br> <br> </td> <td> Управление формой курсора мыши передается Web-обозревателю. Поведение по умолчанию<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> </td> <td> </td> <td> </td> </tr> </table> Имейте, однако, в виду, что перед тем, как задавать форму курсора мыши для каких-то элементов вашей страницы, подумайте, нужно ли это. Скажем, если при наведении курсора мыши на текст он будет принимать форму песочных часов, пользователь вас, мягко говоря, не поймет. Поэтому сначала уясните, что обозначает та или иная форма курсора. Не от нечего же делать Windows ее меняет!<br> <br> А вот раскрывающийся список <b>Filter </b>даст в ваши руки неограниченные возможности по созданию графических спецэффектов. Например, вы можете сделать графическое изображение или текст заголовка размытым или заставить его плавно появляться и так же плавно исчезать. Поверьте — это выглядит потрясающе! И задать эти спецэффекты вы сможете с помощью раскрывающегося списка <b>Filter, </b>но... Описание фильтров может растянуться на целую главу — такой это мощный инструмент, поэтому мы не будем описывать их здесь. Если вы заинтересовались фильтрами или преобразованиями, найдите хорошую книжку по CSS или, что еще лучше, обратитесь на сайт Microsoft за нужной документацией.<br><br> <h1>Таблица стилей в этом случае имеет</h1>Таблица стилей в этом случае имеет тот же самый формат, что и внешняя, но располагается в секции заголовка той же Web-страницы и помещается внутрь специального тега <STYLE>.<br><br> <li> Внутренние (также встроенные или внедренные) стили. Определение стиля помещается прямо в нужный тег, для чего используется специальный атрибут STYLE.<br> </li> С внешними таблицами стилей вы уже познакомились. Поэтому перейдем сразу к внутренним.<br> <br> Внутренняя таблица стилей по своему устройству аналогична внешней. Разница между ними в том, что внутренняя таблица стилей помещается прямо в заголовке HTML-файла. И, соответственно, может быть использована только в нем.<br> <br> Давайте превратим внешнюю таблицу стилей, созданную выше, во внутреннюю. Это проще простого.<br> <br> <STYLE><br> <br> .cit { font-size: smaller;<br> <br> font-style: italic } I {color: #00FFOO } HI I { color: #FF0000;<br> <br> font-size: larger } </STYLE><br> <br> Как видите, ничего радикально не изменилось. Единственное, добавился парный тег <STYLE>, определяющий таблицу стилей. Вся эта конструкция помещается в секции заголовка Web-страницы, т. е. внутри тега <head> <link rel="canonical" href="https://www.e-lave.ru//index.htm"/>. Само собой, внутренняя таблица стилей может быть только одна на страницу.<br> <br> Обращаться к внутренней таблице стилей можно так же, как и к внешней:<br> <br> <Р CLASS="cit">Этo цитата.</Р><br> <br> Вот, собственно, и все о внутренних таблицах стилей.<br> <br> Внутренние стили вообще помещаются внутри тегов, определяющих тот или иной элемент страницы. Делается это с помощью атрибута STYLE, поддерживаемого, как и CLASS, практически всеми тегами.<br> <br> <Р STYLE="font-size: smaller; font-style: italic">это цитата.</Р><br> <br> Таким образом, пользуясь внутренними стилями, вы можете переопределить внешний вид любого элемента страницы, вообще не создавая таблицы стилей, ни внешней, ни внутренней. Внутренние стили незаменимы для создания уникальных элементов, не встречающихся больше нигде на странице.<br> <br> В каких случаях следует применять тот или иной способ задания стилей? На этот случай есть простое правило: выясните, где и как часто будет использован тот или иной стиль.<br> <br> Если стиль необходим во многих Web-страницах, вынесите его во внешнюю таблицу стилей. Например, если вы создали стиль основного текста страницы, который должен быть использован на всех страницах сайта, определите его в глобальную таблицу стилей, одну на весь сайт. Если какой-то стиль применяется не во всех страницах, а в их небольшом подмножестве, определите его во второстепенной таблице стилей, которая будет использована только данным подмножеством страниц. В этом случае вы можете определить весь набор необходимых стилей в одной таблице, а можете "разбросать" его по нескольким; во втором случае не забудьте создать ссылки на все эти таблицы.<br> <br> Если стиль должен быть использован в нескольких местах одной-един-ственной Web-страницы, смело переносите его во внутреннюю таблицу стилей. В результате внешние таблицы стилей не будут заполняться стилями, применяемыми только в одной странице, и их файлы сохранят компактность. Можно, конечно, вынести все такие стили во внешнюю таблицу, которая будет использоваться единственной страницей, но такой подход неоптимален.<br> <br> Если же стиль должен быть использован в одном-единственном месте од-ной-единственной Web-страницы, внедрите его прямо в HTML-тег. Так он будет "ближе к месту действия" и не станет загромождать таблицы стилей, как внутреннюю, так и внешние.<br> <br> Но почему таблицы стилей называются еще и каскадными? Дело в том, что у них есть одна интересная и полезная особенность, о которой вам обязательно нужно будет узнать.<br><br> <h1>Таблицы стилей и шаблоны</h1>Таблицы стилей и шаблоны<br><br> А теперь представим такую ситуацию. Вы прочитали о замечательных возможностях таблиц стилей и решили переделать свой сайт Sample site 3 с использованием таблиц стилей. Вы задали таблицу стилей (внешнюю или внутреннюю) для шаблона, сохранили его и обновили все основанные на нем Web-страницы. Все у вас получилось, и, кажется, ничто не предвещает беды...<br> <br> Но вот вы открыли одну из основанных на шаблоне страниц и решили создать для нее внутреннюю таблицу стилей, дополняющую ту, что находится в шаблоне. Но как это сделать? Ведь внутренняя таблица стилей записывается в HTML-заголовок страницы, куда, как было сказано ранее, хода нет!<br> <br> Не думайте об этом! Используйте те же, уже знакомые вам, инструменты для создания новых стилей. Единственное: вы не можете переопределить<br> <br> атрибуты стилей, заданные в таблице, что находится в шаблоне, иначе это вызовет неразрешимый конфликт. За исключением этого, вы полностью свободны!<br> <br> Дело в том, что при создании шаблона Dreamweaver MX создает еще одну изменяемую область по имени head. Эта изначально пустая область находится в HTML-заголовке страницы, внутри тега <head> <link rel="canonical" href="https://www.e-lave.ru//index.htm"/>. Когда вы создаете в Web-странице внутреннюю или привязываете к ней внешнюю таблицу стилей, необходимый код помещается как раз в эту область. Вы можете посмотреть HTML-код страницы, основанной на шаблоне, и убедиться в этом сами.<br><br> <h1>Три способа задания стиля</h1>Три способа задания стиля<br><br> Всего стандарт CSS определяет три способа задания стиля для элемента страницы. Давайте перечислим их и дадим краткое описание каждому способу.<br> <br> <li> Внешняя (или привязанная) таблица стилей. Стили сохраняются в отдельном файле с расширением css и привязываются к Web-странице с помощью особого тега <LINK>. Вы уже познакомились с внешними таблицами стиля, так что не будем сейчас подробно на них останавливаться.<br> </li> <li> Внутренняя (или внедренная) таблица стилей.</li> <br><br> <h1>Управление стилями</h1>Управление стилями<br><br> Осталось рассмотреть, как в Dreamweaver осуществляется управление стилями, в частности, изменение и удаление (как создавать новые стили, вы уже знаете).<br> <br> В верхней части панели <b>CSS Styles </b>вы уже заметили два переключателя: <b>Apply Styles и Edit Styles. </b>Мы не рассматривали их, т. к. они пока что нам были не нужны. Но сейчас они пригодятся.<br> <br> Как видите, по умолчанию включен переключатель <b>Apply Styles, </b>и список панели CSS <b>Styles </b>имеет вид, показанный на Рисунок 10.3. Говорят, что панель CSS <b>Styles </b>работает в режиме применения стилей. При этом вы можете щелкнуть по любому пункту этого списка, и Dreamweaver тотчас применит соответствующий стиль к выделенному вами элементу страницы. Но, к сожалению, править стили при этом неудобно: вы не можете выбрать стиль без того, чтобы он не был применен. Что же делать?<br> <br> Включите переключатель <b>Edit Styles. </b>Панель в этом случае примет такой вид, как на Рисунок 10.27. Она переключится в режим правки стилей, в котором очень удобно именно управлять стилями, не опасаясь, что услужливый Dreamweaver применит выбранный стиль к выделенному вами элементу страницы.<br> <br> Как видите, список стилей в этом режиме имеет несколько другой вид — он стал иерархическим. В качестве ветвей списка выступают таблицы стилей и Web-страницы, в которых сохранен тот или иной стиль. Более того, в этом случае Dreamweaver правильно показывает ВСЕ заданные вами стили, даже переопределения тегов! Это же просто замечательно: теперь нам видно все. что мы нагородили! Но Dreamweaver идет дальше: он показывает даже сам код определения стилей — в правой колонке списка. (Правда, если этот код достаточно велик, вам придется прокручивать список по горизонтали, но это не вина Dreamweaver.)<br> <br> <p align="center"><br><br> <h1>Управление таблицами стилей</h1>Управление таблицами стилей<br><br> Кроме манипуляций над отдельными стилями, Dreamweaver предоставляет возможность управлять целыми таблицами стилей. Вы можете редактировать их, создавать и удалять, а также присоединять к документу внешние таблицы и экспортировать внутренние таблицы во внешний файл.<br> <br> Как правило, нужда редактировать саму таблицу стилей возникает нечасто. Dreamweaver предоставляет достаточно мощные средства правки стилей по отдельности, вне зависимости от того, где они сохранены. Но если все же вам понадобится отредактировать таблицу стилей, выполните одно из нижеперечисленных действий:<br> <br> <li> нажмите кнопку <b>Edit Style Sheet </b>(Рисунок 10.29) в правом нижнем углу панели <b>CSS Styles;</b><br> </li> <li> дважды щелкните по свободному пространству списка стилей (он должен находиться в режиме правки стилей, т. е. должен быть включен переключатель <b>Apply</b> <b>Styles</b>);<br> </li> <li> выберите пункт <b>Edit Style Sheet </b>в контекстном или дополнительном меню панели <b>CSS Styles;</b><br> </li> <li> выберите пункт <b>Edit Style Sheet </b>в подменю CSS <b>Styles </b>контекстного меню окна документа или меню <b>Text.</b><br> </li> <p align="center"><br><br> <h1>обозревателей поддерживают все атрибуты CSS. </h1>Внимание<br><br> Далеко не все программы Web- обозревателей поддерживают все атрибуты CSS. Поэтому перед тем, как применить тот или иной атрибут, справьтесь в руководстве по CSS, поставляемым с Dreamweaver MX.<br> <br> <br><br> <h1>Dreamweaver не всегда корректно отображает </h1>Внимание<br><br> Dreamweaver не всегда корректно отображает элементы страницы, к которым было применено специальное CSS-форматирование. Чтобы увидеть правильные результаты использования того или иного атрибута стилей, воспользуйтесь Web-обозревателем.<br><br> <h1>Временные таблицы стилей</h1>Временные таблицы стилей<br><br> Еще одна из новых возможностей Dreamweaver MX — это поддержка так называемых временных таблиц стилей. Временные таблицы стилей действуют не все время, а только тогда, когда вы редактируете свою Web-страницу в среде Dreamweaver (таблицы времени редактирования), но не действуют в Web-обозревателе. Другие таблицы могут, наоборот, быть отключены, когда вы редактируете страницу в Dreamweaver (таблицы времени просмотра), а действовать только в Web-обозревателе. Иногда такие таблицы стилей бывают полезны.<br> <br> Как же работать с временными таблицами стилей? Очень просто!<br> <br> Выберите пункт <b>Design Time Style Sheets </b>в контекстном или дополнительном меню панели <b>CSS Styles. </b>Этот пункт также доступен в подменю CSS <b>Styles </b>контекстного меню окна документа и меню <b>Text. </b>На экране появится диалоговое окно <b>Design Time Style Sheets </b>(Рисунок 10.37).<br> <br> <p align="center"><br><br> <h1>Введение в каскадные таблицы стилей</h1>Введение в каскадные таблицы стилей<br><br> Что же представляют собой каскадные таблицы стилей? Как они могут помочь нам? Как они создаются, в конце концов? И нужно ли их использовать?<br><br> <h1>Зачем они нужны</h1>Зачем они нужны<br><br> В конце предыдущей главы был приведен пример, когда таблицы стилей могут нам здорово помочь. Вспомним его еще раз.<br> <br> Вы создали сложный Web-сайт с большим количеством объемистых страниц. Текст этих страниц очень сложно отформатирован: обильно используются различные шрифты разных цветов и размеров, жирное и курсивное выделения и т. п. В частности, все цитаты выделены красным курсивным шрифтом. Сайт создан, опубликован и достаточно давно работает; посетители довольны, никаких неполадок нет, все ошибки давно исправлены, и вы о своем сайте уже, честно говоря, забыли.<br> <br> Вдруг, откуда ни возьмись, — распоряжение начальства: срочно выделить цитаты на сайте еще и уменьшенным шрифтом. (Этому начальству всегда нечего делать, как давать идиотские указания...) А цитат у вас хватает на всех страницах, вдобавок они разбросаны по всему тексту так, что их нужно еще и поискать. Вспомним также, что сайт очень большой, и страницы его также велики.<br> <br> Ваши действия?<br> <br> Чтобы уменьшить шрифт цитаты, его необходимо выделить и выбрать в раскрывающемся списке размеров нужный пункт. Сами понимаете, это крайне трудоемко. Можно также попытаться воспользоваться мощнейшими возможностями, предлагаемыми диалоговым окном <b>Find and Replace. </b>Но. чтобы это сделать, надо правильно ввести подстроки для поиска и замены, для чего нужно долго экспериментировать. Наконец можно воспользоваться регулярными выражениями, но это вообще занятие не для слабонервных. Выходит, так и придется форматировать цитаты вручную?<br> <br> Почему мы вынуждены так поступать? Чтобы объяснить это, надо немного рассказать о принципах написания и хранения программ и используемых ими данных.<br> <br> Возьмем любую программу, например Microsoft Word. Данные этой программы (документ) находятся в одном файле (с расширением doc), а сама программа — в другом (исполняемый файл ехе). Если нужно изменить программу (скажем, вы получили новую версию), вы просто переписываете файл программы, не трогая данные. Если вам надо изменить данные, то вы просто откроете их в программе и измените, а сама программа останется неизмененной.<br> <br> В этом случае говорят, что данные и их представление (т. е. описание правил отображения этих данных или программа, отображающая эти данные) хранятся отдельно. Преимущество такого подхода в том, что мы можем заменить представление, не трогая сами данные, или отредактировать данные, не трогая представления. Все современные программные продукты строятся на таком принципе; благодаря этому мы можем установить на свой компьютер новую версию программы, сохранив созданные в ней данные.<br> <br> Это обычные программы. А что же HTML?<br> <br> Беда HTML в том, что данные и их представление хранятся в одном файле. Более того, они представляют собой единое целое. Откройте любой HTML-файл в текстовом редакторе (например, Блокноте) и посмотрите на него. Текст перемешан с тегами форматирования самым причудливым образом. Найти какую-то нужную информацию в "сыром" HTML-коде — проблема. И еще большая проблема — изменить способ ее представления: для этого надо "перелопачивать" весь файл с риском повредить сами данные. Это очень неудобно, но что ж поделаешь — таков уж этот HTML...<br> <br> И все же было бы очень неплохо создать некий набор правил форматирования различных фрагментов текста в зависимости от их назначения. Этот набор правил хранился бы в отдельном файле, независимо от содержимого Web-страницы. А в HTML-файл записать только сам текст, разбитый на логические фрагменты тегами <р> и <нп>. Таким образом, и данные хранятся отдельно от представления, и форматированы они гораздо "прозрачнее", и нужную информацию искать значительно проще.<br> <br> У такого подхода есть еще одно преимущество: становится намного легче изменять представление страниц. Скажем, если нам нужно изменить форматирование какого-либо типа фрагментов текста, мы просто корректируем соответствующие ему правила в файле правил. После этого Web-обозрезатель при следующей загрузке этой страницы покажет все так, как нам надо. Таким образом, мы можем наконец-то изменить вид наших многострадальных цитат редактированием всего одного файла вместо того, чтобы править все страницы.<br> <br> Хорошо? А как вам понравится, если окажется, что все это существует уже достаточно давно, с 1997 года? Да-да, существует и называется каскадными таблицами стилей.<br> <br> Каскадные таблицы стилей или просто таблицы стилей (CSS — Cascading Style Sheets) — это набор правил, описывающих форматирование разных фрагментов HTML-кода и хранящихся отдельно от него. Одно такое правило, отображающее форматирование какого-то одного фрагмента или однотипной группы фрагментов кода, называется стилем. Таблицы стилей описываются на особом языке CSS и хранятся в особых файлах с расширением сss, хотя могут быть внедрены в саму Web-страницу.<br> <br> Таблицы стилей, как и многое другое, лучше представить на примере. Давайте рассмотрим небольшой фрагмент классического, "чистого" HTML-кода, созданного без использования таблиц стилей.<br> <br> <?><FONT COLOR="#FF0000">Это цитата.</FONT><br><br> <br> Как видите, это одна из тех цитат, которые по приказу нашего гипотетического начальства должны были "измельчать". Давайте же все-таки доставим начальству это удовольствие.<br> <br> <FONT COLOR="#FF0000" size="-1">Это цитата.</FONT><br><br> <br> С одной цитатой мы справились без труда. А если их сотня? Нет, без таблицы стилей тут не обойтись. Перепишем наш пример с использованием стилей.<br> <br> Сначала напишем саму таблицу стилей.<br> <br> .cit { font-style: italic; color: #FF0000 }<br> <br> Эта таблица стилей содержит определение всего одного стиля — cit. Такой стиль, имеющий уникальное имя (чтобы Web-обозреватель мог однозначно его идентифицировать), называется стилевым классом.<br> <br> Этот стиль содержит определение параметров для двух атрибутов стиля. Первый атрибут — font-style — задает "стиль" текста; в нашем случае значение italic делает текст курсивом, словно бы его поместили внутрь тега . Второй атрибут — color — задает цвет текста. Как видите, два атрибута стиля cit заменили оба тега: и <FONT>, и .<br> <br> Собственно, красивое форматирование текста таблицы стилей, которое вы видите здесь, совсем не обязательно. Ваша таблица стилей может выглядеть и следующим образом:<br> <br> .cit {font-style:italic;color: #FF0000}<br> <br> Так она получается даже компактнее — весьма немаловажное достоинство во времена господства медленных каналов связи. Но, согласитесь, красиво отформатированный вариант легче читается.<br> <br> Сохраним нашу таблицу стилей в файле styles.css. И давайте перепишем наш фрагмент HTML-кода так, чтобы он использовал эту таблицу стилей.<br> <br> <Р CLASS="cit">3TO цитата.</Р><br> <br> Как видите, достаточно просто добавить в тег <р> атрибут CLASS и в качестве значения присвоить ему имя определенного нами стилевого класса, в нашем случае cit. Теперь этот фрагмент текста будет форматироваться курсивным красным шрифтом уменьшенного размера.<br> <br> Но, кроме того, нам еще нужно добавить в секцию HTML-заголовка (тег <head> <link rel="canonical" href="https://www.e-lave.ru//index.htm"/>) нашей страницы ссылку на таблицу стиля, чтобы Web-обозреватель смог ее найти. Эта ссылка будет иметь следующий вид:<br> <br> <LINK REL="stylesheet" HREF="styles.ess" TYPE="text/css"><br> <br> Вот теперь точно все!<br> <br> Вы уже, наверно, догадались, что таблицу стилей, сохраненную в отдельном файле, можно использовать во многих Web-страницах. Более того, она может находиться вообще на другом сайте. В частности, фирма Microsoft, насколько известно автору, предлагает бесплатно воспользоваться библиотекой таблиц стилей, помещенной на ее сайте. (Внимание: информация непроверенная!)<br> <br> Кроме того, Web-страница может ссылаться одновременно на несколько таблиц стилей. Например, так:<br> <br> <LINK REL="stylesheet" HREF="styles1.css"> <br> <LINK REL="stylesheet" HREF="styles2.css"><br> <br> В этом случае она будет использовать стили, определенные в обеих этих таблицах. Если же какой-то стиль определен и в одной, и в другой таблице, в действие вступает правило каскадности и приоритета, о котором будет рассказано ниже.<br> <br> Но как же в этом случае уменьшить шрифт всех цитат? Для этого достаточно добавить в определение стилевого класса еще один атрибут и присвоить ему соответствующее значение. В этом случае таблица стилей будет иметь такой вид (вновь вставленный код выделен полужирным шрифтом):<br> <br> .cit { color: #FF0000;<br> <br> font-style: italic; <b>font-size: smaller }</b><br> <br> Здесь мы поместили в определение стиля помещен новый атрибут font-size, задающий размер шрифта. И присвоили ему значение smaller, задающее шрифт на одну ступень меньший, чем у родительского элемента.<br> <br> И это все! Никаких изменений в коде Web-страниц, ссылающихся на эту таблицу стилей, нам делать не нужно. Достаточно было только изменить файл таблицы стилей.<br> <br> Удобно? Еще бы!<br> <br> А еще с помощью таблицы стилей можно изменить внешний вид любого тега HTML. Для этого нужно просто переопределить его в таблице стилей следующим образом:<br> <br> H1 | { color: #FF0000;<br> <br> font-size: smaller }<br> <br> После этого все фрагменты текста, заключенные внутрь тега (курсив), будут отображаться уменьшенным шрифтом красного цвета. Такой стиль называется стилем переопределения тега.<br> <br> А если вы создадите такой стиль:<br> <br> H1 I { color: #FF0000;<br> <br> font-size: smaller }<br> <br> то уменьшенным шрифтом красного цвета будет отображаться только текст, заключенный внутрь тега , который, в свою очередь, находится внутри тега <H1>. Вот такой:<br> <br> <Н1>Курсивный заголовок</Н1> А следующий текст:<br> <br> <1>0бычный курсив</1><br> <br> <Н2>Экспериментируем с курсивом</Н2><br> <br> будет отображаться как обычно. А такой стиль:<br> <br> I.cit { color: #FF0000;<br> <br> font-size: smaller }<br> <br> будет применяться только к тексту, помещенному внутрь тега с атрибутом CLASS, установленном в cit (своеобразный гибрид стилевого класса и переопределения тега; этот стиль так и называется — гибридный), т. е. к такому тексту:<br> <br> <i class="сit:">Маленысий зеленый курсивчик<br> <br> Как видите, тег также поддерживает атрибут CLASS. Вообще, его поддерживают практически все теги, "отвечающие" за видимые элементы страницы. Так что проблем с форматированием страниц у вас возникнуть не должно.<br> <br> Есть еще один способ применения стиля к элементу страницы: воспользоваться атрибутом ID, который также поддерживается почти всеми тегами.<br> <br> <Р ID="cit">это цитата.</Р><br> <br> Тогда определение стиля в таблице должно выглядеть следующим образом:<br> <br> #cit { font-size: smaller; font-style: italic }<br> <br> Такой стиль называется стилем-селектором.<br> <br> Конечно, в одной таблице стилей вы можете определить одновременно несколько стилей:<br> <br> .cit { font-size: smaller;<br> <br> font-style: italic } I { color: #00FF00 } HI I { color: #FF0000;<br> <br> font-size: larger }<br> <br> Используя стили, можно задать для текста даже такие параметры, о которых и не мечтал "чистый" HTML. Например, можно создать рамку вокруг фрагмента текста или сделать так, что при наведении курсора мыши на текст он (курсор) будет менять форму. Обо всем этом будет рассказано ниже.<br> <br> С помощью таблиц стилей можно форматировать не только текст. Любому элементу страницы — изображению, таблице, горизонтальной линии — может быть присвоен стилевой класс.<br> <br> Например, вы можете переопределить поведение тега <BODY> таким образом:<br> <br> BODY ( background-color: #000000 )<br> <br> Здесь мы задали черный цвет фона страницы с помощью нового атрибута<br> <br> background-color.<br> <br> К сожалению, это справедливо в полной мере только для последних версий Web-обозревателей. В частности, в старых версиях Navigator поддержка таблиц стилей очень ограничена и относится, в основном, к тексту. Но поскольку старыми версиями этой программы вряд ли пользуется много народу, вы можете использовать таблицы стилей в своих страницах без опасения, что их "не поймут".<br> <br> В составе Dreamweaver вместе со справочным руководством по HTML поставляется справочник по CSS. Чтобы вызвать его на экран, сначала вызовите панель <b>Reference, </b>выбрав пункт <b>Reference </b>в меню <b>Window </b>или нажав комбинацию клавиш <Shift>+<Fl>. После этого в раскрывающемся списке<br> <br> <p align="center"><br><br> <h1> Использование пакета Dreamweaver </h1> <h1>Что такое свободно позиционируемый элемент</h1>Что такое свободно позиционируемый элемент<br><br> Давайте возьмем какой-нибудь элемент страницы и рассмотрим его. Неважно, будет ли он фрагментом текста, изображением, фильмом или элементом управления ActiveX. С точки зрения Web-обозревателя, все они одинаковы (до известного предела, разумеется). Неважно, будет ли рассматриваемый нами элемент страницы помещен в основной "поток" текста, вынесен во фрейм или "втиснут" в ячейку таблицы. И первый, и второй, и третий способы никак не позволяют реально "освободить" элемент страницы, а только создают видимость этой свободы.<br> <br> Откройте какую-нибудь страницу, сделанную ранее, и выберите любой ее элемент. Что он такое? Часть содержимого этой страницы. Его размерами управляет Web-обозреватель, основываясь на размерах его родителя, иначе говоря, на размерах свободного пространства, которое можно под него выделить. Точно так же дело обстоит и с позиционированием элемента страницы — оно зависит от размеров и месторасположения его "соседей" и его родителя. А они, в свою очередь, зависят от размера окна Web-обозревателя. Как видите,'способа точно контролировать размеры и координаты элемента страницы не существует — все эти параметры зависят от множества факторов, исключить которые обычным способом невозможно.<br> <br> Конечно, Web-дизайнеры пытаются как-то ограничить действие этих факторов. Они форматируют страницы с использованием таблиц разметки в результате чего получают более полный контроль над параметрами отдельных элементов страниц. Однако это не более чем выдумки, на которые, как говорится, голь хитра. Каждый элемент страницы в любом случае зависит от своих "соседей".<br> <br> Выход: убрать этих "соседей" подальше! "Переселить" элемент страницы из "коммунальной" в "отдельную" квартиру!<br> <br> Представьте себе, что, помещая на Web-страницу фрагмент текста или изображение, вы задаете его координаты и размеры, руководствуясь только своими нуждами, не принимая во внимание "соседей". А если ваш элемент и "наползет" на тот или иной соседний элемент, ничего страшного не произойдет — он его просто перекроет. (Вы даже можете специально перекрывать одним элементом страницы другие.) Такой "освобожденный" элемент страницы так и называется — свободно позиционируемый или просто свободный. Он не только вынесен за пределы "потока" текста, но и не зависит от "соседей".<br> <br> Какими же параметрами свободно позиционируемого элемента можно управлять? А вот какими:<br> <br> <li> координатами его левого верхнего угла;<br> </li> <li> геометрическими размерами;<br> </li> <li> слоем (уровнем), или z-индексом;<br> </li> <li> видимостью или невидимостью;<br> </li> <li> поведением в случае, если содержимое этого элемента выйдет за его размеры;<br> </li> <li> некоторыми другими, о которых будет рассказано ниже.<br> </li> <li> z-индексе нужно рассказать подробнее. Предположим, что все созданные нами на странице свободно позиционируемые элементы "сложены" в своеобразную "стопку". И не просто "сложены", а еще и пронумерованы в -порядке "снизу" "вверх". При этом, как вы поняли, элементы с большими номерами перекрывают элементы с меньшими номерами. Так вот этот номер в воображаемой "стопке" и есть z-индекс.<br> </li> <br><br> <h1>в HTML. Фактически они появились </h1> <table border=1> <tr> <td> <p align="center">ГЛАВА 11. Свободно позиционируемые элементы<br> <br> Свободно позиционируемые элементы — совсем недавнее нововведение в HTML. Фактически они появились в 1997 году, одновременно с таблицами стилей. И это не случайно: для создания свободно позиционируемых элементов используются особые атрибуты стилей, задающие координаты и размеры таких элементов.<br> <br> Было сказано, что свободно позиционируемые элементы появились совсем недавно, но в мире компьютерных вообще и интернет-технологий в частности время летит очень быстро, и пять лет истории какого-либо нововведения — это целая эпоха. Однако до сих пор свободно позиционируемые элементы не снискали особой популярности у Web-дизайнеров. И автор не знает, в чем причина: консерватизм Web-дизайнеров или неприспособленность этих элементов к применению в Web-дизайне.<br> <br> Однако потенциал свободно позиционируемых элементов очень велик. В самом деле, они позволяют полностью освободиться от "потока" текста, расположить фрагменты содержимого страницы так, как нужно Web-дизайнеру, без оглядки на ограничения таблиц и фреймов. При этом фрагменты могут располагаться друг относительно друга как угодно и даже перекрывать друг друга, чего никак не удастся сделать, используя таблицы. И все это великолепие достигается столь компактным HTML-кодом, что свободно позиционируемые элементы оказываются вне конкуренции.<br> <br> У свободно позиционируемых элементов есть еще одно неоспоримое преимущество: они предоставляют Web-дизайнеру полнейший контроль над Web-страницей. Используя специально написанные сценарии, разработчик может заставить отдельные элементы страниц двигаться, создавая впечатляющие анимационные эффекты. (Вы, наверно, часто встречали на некоторых страницах анимированные курсоры мыши. Это как раз свободно позиционируемые элементы, "наученные" двигаться за мышью.) Идя дальше, программист (именно так, не Web-дизайнер, а Web-программист!) может создать на странице строку меню с выпадающими подменю и, в конце концов, превратить Web-страничку в подобие окна Windows-приложения. Один знакомый автора написал, таким образом, целую информационную систему — поверьте, это впечатляет!<br> <br> Но хватит пустых восторгов! Давайте трезво посмотрим на свободно позиционируемые элементы и выясним, что они собой представляют.</td></tr> </table> <br><br> <h1>Как создается свободно позиционируемый элемент</h1>Как создается свободно позиционируемый элемент<br><br> Итак, мы выяснили, что такое свободно позиционируемый элемент. Осталось разобраться, как он создается.<br> <br> Рассмотрим небольшую Web-страничку, содержащую фрагмент текста. Ее HTML-код приведен ниже.<br> <br> <HTML> <br> <head> <link rel="canonical" href="https://www.e-lave.ru//index.htm"/><br> <br> <ТITLЕ>Пример WEB-странииы</ТITLЕ> <br> </HEAD><br> <BODY><br> <br> <Р>Это текст, который будет показан в окне Web-обозревателя. Это текст, который будет показан в окне Web-обозревателя. Это,текст, который будет показан в окне Web-обозревателя. Это текст, который будет показан в окне Web-обозревателя. Это текст, который будет показан в окне Web-обозревателя. Это текст, который будет показан в окне Web-обозревателя.</Р> </BODY> </HTML><br> <br> Как видите, ничего сложного в нем нет. Эта страничка специально была максимально упрощена, чтобы никакие "навороты" не отвлекали вас от главного.<br> <br> Что же мы увидим, если откроем данную страничку в Web-обозревателе0 Ничего особенного: просто абзац с повторяющимся текстом. Вы можете проверить, если не верите автору на слово.<br> <br> Этот текст — типичный пример фиксированного элемента страницы, находящегося в "потоке" текста и зависящего от "соседей". В данном случае, правда, никаких "соседей" нет. Однако Web-обозреватель сам решает, где и как расположить этот абзац, основываясь на свободном пространстве, которое он может ему отвести. Мы не можем поместить этот абзац там, где хочется, и дать ему нужные размеры.<br> <br> Теперь преобразуем его в свободно позиционируемый элемент. Для этого просто допишем кое-какой код (в листинге он выделен полужирным шрифтом).<br> <br> <HTML> <br> <head> <link rel="canonical" href="https://www.e-lave.ru//index.htm"/><br> <br> <ТITLE>Пример WEB-страницы</ТITLE><br> <STYLE><br> <br> <b>#para (position: absolute; left: 50; top: 50; width: 200; height: 100;</b><br> <br> background-color: #00FF00;} <br> </STYLE> <br> </HEAD><br> <BODY><br> <DIV ID="рага"><br> Это текст, который будет показан в окне<br> <br> Web-обозревателя. Это текст, который будет показан в окне Web-обозревателя. Это текст, который будет показан в окне Web-обозревателя. Это текст, который будет показан в окне Web-обозревателя. Это текст, который будет показан в окне Web-обозревателя. Это текст, который будет показан в окне Web-обозревателя.<br> </DIV><br> </BODY> <br> </HTML><br> <br> Сохраните этот код в файле под именем 11.1.htm и откройте его в Web-обозревателе. Результат показан на Рисунок 11.1.<br> <br> Вот мы и сделали первый свободно позиционируемый элемент. И для этого нам потребовалось внести в исходный HTML-код совсем небольшие изменения. Давайте рассмотрим их подробнее.<br> <br> Прежде всего мы для создания абзаца использовали тег <DIV> вместо тега <р>. Тег <DIV> применяется для создания любого элемента страницы, фиксированного или свободно позиционируемого, содержащего внутри себя любое, простое или сложное, содержимое. В частности, его можно использовать для создания обычного текстового абзаца, что только что и было сделано. А элемент страницы, созданный с помощью тега <р>, т. е. обычный текстовый абзац, не может быть позиционирован свободно.<br> <br> Затем мы дали нашему элементу уникальное имя. Назвали его para и сделали это с помощью атрибута ID, поддерживаемого практически всеми "видимыми" тегами. С помощью данного имени мы в дальнейшем зададим для этого абзаца стиль.<br> <br> Такой принцип создания свободно позиционируемых элементов использовался старыми версиями Dreamweaver. Две последние версии — 4.0 и MX — применяют для этого внутренние стили, что, на взгляд автора, порождает более компактный HTML-код, но, возможно, менее наглядно.<br> <br> <p align="center"><br><br> <h1>Недостатки свободно позиционируемых</h1>Недостатки свободно позиционируемых элементов и их преодоление<br><br> Напоследок, по уже устоявшейся традиции, поговорим о недостатках свободно позиционируемых элементов. Итак, чем же они нам не угодили?<br> <br> Прежде всего, свободно позиционируемые элементы предполагают статичный дизайн Web-страниц, не меняющийся при изменении размеров окна Web-обозревателя. Поясним это на примере. Когда вы просматриваете в Web-обозревателе обычную страницу, при изменении размеров окна, в котором она отображается, содержимое страницы также меняет размеры. Загрузите в Web-обозревателе страницу default.htm нашего первого сайта Sample site 1 и измените размеры его окна. Вы увидите, что ее содержимое "расползается" или "сужается" для того, чтобы максимально полно занять окно по ширине. А теперь загрузите только что законченную страницу default2.htm, попробуйте изменить размеры окна — и что же? Свободные элементы в любом случае остаются на своих местах, не делая попытки "подстроиться" под новые размеры., Они статичны, как гвозди, вколоченные в стену.<br> <br> "Классические" Web-страницы почти всегда разрабатываются с определенным запасом "гибкости", позволяющей им подстраиваться под любой размер окна Web-обозревателя. Исключений из этого правила всего два: страницы, созданные на основе таблицы разметки фиксированной ширины, и... на основе свободно позиционируемых элементов.<br> <br> В самом деле, свободные элементы всегда находятся на тех местах страницы, куда вы их поместили. Сдвинуть их с места средствами HTML абсолютно невозможно. Язык HTML не предназначен для того, чтобы описывать поведение элементов страницы при наступлении какого-либо события, например изменения размеров окна Web-обозревателя. HTML описывает внешний вид страницы — и только. Если же вы хотите, чтобы при изменении размеров окна менялся также и дизайн страницы, пишите сценарии на языке программирования JavaScript, помещайте их в HTML-код и привязывайте к соответствующим событиям. Но для этого нужно быть не только знатоком HTML и JavaScript, но и виртуозным программистом, да и в этом случае у вас может не все получиться.<br> <br> Бесспорно, что в некоторых случаях статичность свободных элементов может быть даже полезна. Если вы разрабатываете стильный "авторский" дизайн, свободные элементы помогут вам сделать то, что надо, и сохранить все на своих местах. Также свободные элементы могут пригодиться для создания дизайна, напоминающего интерфейс Windows-приложений. И, разумеется, без свободных элементов не обойтись, если вы собираетесь оживить свои страницы анимацией. В других случаях, вероятно, лучше обойтись "классическими" Web-страницами.<br> <br> Так, со статичностью разобрались. Какие же сюрпризы еще приготовили нам свободные элементы?<br> <br> Несовместимость.<br> <br> Как вы помните, свободно позиционируемые элементы возникли одновременно с каскадными таблицами стилей CSS. И программами Web-обозревателей они стали также поддерживаться одновременно: в 1997 году, начиная с четвертых версий Internet Explorer и Navigator. С более старыми версиями они не совместимы.<br> <br> Что значит "несовместимы"? Не поддерживают. Содержимое свободно позиционируемых элементов они отобразят, конечно, правильно, только находиться оно будет в общем "потоке" текста. И уж, естественно, сложнейший дизайн, над которым столько дней и ночей корпел автор, исчезнет без следа. И ничего тут не сделаешь.<br> <br> Конечно, в настоящее время подавляющее большинство программ Web-обозревателей, эксплуатируемых интернетчиками, составляют более-менее "свежие". Процент же старых программ настолько мал, что им можно пренебречь. Но вполне возможна такая ситуация, что вам придется делать страницы, которые обязательно должны поддерживаться всеми версиями этих программ (за исключением, может быть, самых уж древних и экзотических). Что делать в таком случае?<br> <br> Самый очевидный путь — преобразовать дизайн Web-страниц, построенный на свободных элементах, в графическое изображение, простое или составное, состоящее из множества простых. Это графическое изображение может представлять собой либо набор изображений-гиперссылок (для составных изображений), либо карту-изображение (для простых). Однако этот путь подходит только для небольшого процента страниц, в основном тех, где свободные элементы содержат в себе только элементы дизайна (изображения, гиперссылки, редко меняющийся текст и т. п.). Если на вашей странице в свободных элементах помещаются тексты новостей или полезных советов, отбираемых из базы данных по случайному признаку, — согласитесь, этот путь не для вас.<br> <br> Второй путь — преобразовать свободные элементы в таблицы разметки, т. е. использовать табличный дизайн. Это решает многие проблемы. (Если, конечно, свободные элементы не являются жизненно необходимыми, например, для создания анимации.) Благо Dreamweaver предоставляет для такого решения стандартные инструменты преобразования свободных элементов в таблицы и, наоборот, таблиц в свободные элементы.<br> <br> Один из таких инструментов мы уже использовали в главе 10, когда преобразовывали стили CSS в HTML-разметку. Этот инструмент доступен после выбора пункта <b>3.0 Browser Compatible </b>подменю <b>Convert </b>меню <b>File. </b>На Рисунок 10.39 показано диалоговое окно <b>Convert to 3.0 Browser Compatible, </b>открывающееся после выбора названного пункта. В группе переключателей <b>Convert </b>мы рассмотрели только переключатель <b>CSS Styles to HTML Markup, </b>выполняющий упомянутое выше преобразование. А для преобразования свободных элементов в таблицы предназначен переключатель <b>Layers to Table. </b>Переключатель <b>Both </b>преобразует и то и другое.<br> <br> Однако существует и другой инструмент, позволяющий выполнить более точное преобразование. Он появляется после выбора пункта <b>Layers to Table </b>в подменю <b>Convert </b>меню <b>Modify. </b>Точнее, не инструмент, а появляющееся при этом диалоговое окно <b>Convert Layers to Table, </b>показанное на Рисунок 11.22.<br> <br> <p align="center"><br><br> <h1>Параметры свободно позиционируемых элементов</h1>Параметры свободно позиционируемых элементов<br><br> Набор параметров свободных элементов, которые мы можем задать в Dreamweaver, весьма обширен. Все они будут представлены в редакторе свойств, когда вы выделите границу свободного элемента (Рисунок 11.9).<br> <br> <p align="center"><br><br> <h1>Пример использования свободно позиционируемых элементов</h1>Пример использования свободно позиционируемых элементов<br><br> Напоследок рассмотрим небольшую Web-страницу, использующую свободно позиционируемые элементы для размещения содержимого. Пусть это будет новая начальная страница для нашего сайта. Разместим на ней заголовок, портрет гипотетического создателя, полосу навигации, начальный текст и сведения об авторских правах. Предположим, что мы уже разработали умопомрачительный дизайн, и перейдем сразу к следующему этапу.<br> <br> Откройте панель <b>Site </b>Dreamweaver, если вы ее уже закрыли. Переключитесь на первый наш сайт Sample site 1. Создайте в этом сайте новую страницу по имени default2.htm. Это и будет наша новая главная страница. Откройте ее.<br> <br> Автор уже не будет предлагать вам задать ее параметры, т. е. название, цвета фона, текста и гиперссылок. Это само собой разумеется. И не будет предлагать вам значения этих параметров. Примените фантазию. Единственное условие: ваше творение должно хорошо выглядеть. Хотя, вероятно, наилучший результат — следовать оформлению старой главной страницы этого сайта (помните о принципе единства оформления). Мы так и сделали.<br> <br> Теперь давайте откроем старую главную страницу. Разместите окна со старой и новой главными страницами на экране так, чтобы они не перекрывали или не сильно перекрывали друг друга. Таким образом, вы будете видеть обе страницы и сможете без проблем копировать содержимое из одной страницы в другую.<br> <br> Как любой театр начинается с вешалки, так и любая Web-страница начинается с заголовка. Для него мы создадим свободно позиционируемый элемент, расположенный в верхней части страницы, и назовем его Header. Просто создадим его, не заботясь о реальных размерах и местоположении. Все эти параметры мы скорректируем потом, когда будет готово все содержимое страницы.<br> <br> Скопируйте со старой страницы текст заголовка в созданный нами свободный элемент. Измените тег с <р> (присваиваемый по умолчанию) на <HI> (заголовок первого уровня), выбрав пункт <b>Heading 1 </b>в раскрывающемся списке <b>Format </b>редактора свойств. Задайте для заголовка выравнивание по центру. (Как видите, текст теперь будет выровнен по центру свободного элемента.) Измените размеры свободного элемента так, чтобы он занимал минимальное пространство страницы. Результат показан на Рисунок 11.15.<br> <br> Продолжаем работу над страницей. Давайте создадим тень для нашего свободно позиционируемого заголовка. Для этого поместим под него еще один свободно позиционируемый элемент точно таких же размеров, но не имеющий содержимого и "залитый" черным цветом. Это обычная практика в такого рода случаях.<br> <br> <p align="center"><br><br> <h1>Работа с группой свободно позиционируемых элементов</h1>Работа с группой свободно позиционируемых элементов<br><br> Dreamweaver, кроме всего прочего, позволяет выделить одновременно несколько свободно позиционируемых элементов и произвести над ними некоторые манипуляции. В этом случае все выделенные элементы ведут себя как одна группа.<br> <br> Чтобы выделить сразу несколько свободных элементов, поступите следующим образом. Сначала выделите один из них, щелкнув на нем мышью (выделен сам элемент или его граница — значения не имеет). После этого щелкните на границах всех остальных элементов, удерживая нажатой клавишу <Shift>. Все элементы, по границам которых вы щелкнули, будут выделены. Заметьте, что маркеры изменения размеров всех этих элементов, кроме того, на котором вы щелкнули в последнюю очередь, будут иметь вид белых, а не черных квадратов (Рисунок 11.10).<br> <br> Прежде всего, вы можете перемещать выделенные таким образом свободные элементы. При этом будет перемещаться сразу вся группа элементов.<br> <br> Также вы можете изменить размеры выделенных элементов. Точнее, уравнять их ширину или высоту. Для этого выберите в подменю <b>Align </b>меню <b>Modify, </b>соответственно, пункт <b>Make Same Width </b>(или нажмите комбинацию клавиш <Ctrl>+<Shift>+<7>) или <b>Make Same Height </b>(комбинация клавиш <Ctrl>+<Shift>+<9>).<br> <br> Для группы свободно позиционируемых элементов также доступна возможность выравнивания. Свободные элементы выравниваются по одной из сторон одного из элементов группы, расположенного с соответствующего края. Например, если задано выравнивание по верху, все элементы выравниваются по верхней стороне самого верхнего элемента.<br> <br> <p align="center"><br><br> <h1>Работа со свободно позиционируемыми элементами</h1>Работа со свободно позиционируемыми элементами<br><br> Если на вашей странице создано несколько свободно позиционируемых элементов, управлять ими удобнее всего в специальной панели. Панель <b>Layers </b>появляется на экране после включения пункта-выключателя <b>Layers </b>подменю <b>Others </b>меню <b>Window </b>или нажатия клавиши <F2>. Вы можете также щелкнуть по любому свободному элементу правой кнопкой мыши и выбрать в контекстном меню пункт <b>Layers Panel. </b>Сама эта панель показана на Рисунок 11.11.<br> <br> <p align="center"><br><br> <h1>Работа со свободно позиционируемыми элементами</h1>Работа со свободно позиционируемыми элементами<br><br> Теперь рассмотрим, как в Dreamweaver создаются свободно позиционируемые элементы.<br><br> <h1>Свободно позиционируемый</h1>Рисунок 11.1. Свободно позиционируемый абзац текста на странице 11.1.htm<br><br><div style="text-align:center;"><img src="image/risunok-11-1-svobodno-pozicioniruemyj-abzac-teksta_1.gif" alt="Свободно позиционируемый"></div><br> Теперь рассмотрим таблицу стилей. В ней мы использовали множество новых атрибутов, которые сейчас и рассмотрим.<br> <br> Этот атрибут делает элемент страницы свободно позиционируемым:<br> <br> position: absolute;<br> <br> Запомните его — он обязательно должен присутствовать в определении стиля любого свободного элемента. Если у вас что-то не работает, прежде всего, проверьте, задали ли вы для данного атрибута соответствующее значение.<br> <br> У обычного фиксированного элемента названный атрибут установлен в значение static. Это же его значение по умолчанию.<br> <br> Эти атрибуты задают, соответственно, горизонтальную и вертикальную координаты левого верхнего угла свободного элемента:<br> <br> left: 50; top: 50;<br> <br> В данный момент они заданы в пикселах, хотя вы можете использовать любую из поддерживаемых CSS единиц измерений. Имейте в виду, что данные атрибуты имеют силу только для свободно позиционируемых элементов, т. е. тех, у которых атрибут position установлен в значение absolute.<br> <br> Примечание 1 <br>Примечание 1<br><br> <br> Запомните, что координаты свободно позиционируемого элемента отсчитываются относительно родителя, а не относительно окна Web-обозревателя. Поскольку в нашем случае родителем является сама-страница, это несущественно, но вообще об этом забывать не следует.<br> <br> А эти атрибуты задают, соответственно, ширину и высоту свободно позиционируемого элемента:<br> <br> width: 200; height: 100;<br> <br> Они также даны в пикселах, хотя могут быть заданы в любой другой из поддерживаемых CSS единиц измерения. И также имеют силу только у свободно позиционируемых элементов.<br> <br> А теперь взгляните еще раз на Рисунок 11.1. Вы видите, что высота нашего свободного элемента заметно больше ста пикселов (сравните ее с шириной). Дело в том, что по умолчанию свободный элемент растягивается по вертикали, если его содержимое в нем не помещается. А у нас как раз такой случай. (Как уже говорилось, вы можете задать другое поведение, но об этом позже.)<br> <br> background-color: #00FF00;<br> <br> Здесь специально задан зеленый фон для свободно позиционируемого элемента, чтобы он был заметнее.<br> <br> А теперь держитесь крепче! Добавлением всего одной строки в таблицу стилей мы превратим свободно позиционируемый элемент в небольшую "страничку в странице" (добавленный текст выделен полужирным шрифтом).<br> <br> #para {position: absolute; left: 50; top: 50; width: 200; height: 100;<br> <br> background-color: #OOFFOO; <b>overflow : scroll }</b><br> <br> Сохраните новый файл под именем 11.2.htm и откройте его в Web-обозревателе. И как оно вам (Рисунок 11.2)?<br> <br> Давайте еще раз взглянем на добавленную нами строку:<br> <br> overflow: scroll<br> <br> overflow — атрибут, как раз и задающий поведение свободно позиционируемого элемента, когда его содержимое в нем не помещается. Значение по умолчанию — auto — заставляет элемент растягиваться по вертикали, что мы и наблюдали в предыдущем случае. А значение scroll заставляет элемент отобразить полосы прокрутки.<br> <br> <p align="center"><br><br> <h1>Группа выделенных</h1>Рисунок 11.10. Группа выделенных свободно позиционируемых элементов<br><br><div style="text-align:center;"><img src="image/risunok-11-10-gruppa-vydelennyh-svobodno_1.gif" alt="Группа выделенных"></div><br> Для задания выравнивания используется четыре других пункта подменю <b>Align </b>меню <b>Modify:</b><br> <br> <li> <b> Left </b>(комбинация клавиш <Ctrl>+<Shift>+<!>) — выравнивание по левому краю;<br> </li> <li> <b> Right </b>(комбинация клавиш <Ctrl>+<Shift>+<3>) — по правой стороне; </li> <li><b> Тор </b>(комбинация клавиш <Ctrl>+<Shift>+<4>) — по верхней стороне; </li> <li><b>Bottom </b>(комбинация клавиш <Ctrl>+<Shift>+<6>) — по нижней стороне.<br> </li> Имейте в виду, что у свободных элементов нет никаких параметров, задающих выравнивание. Реально выравнивание производится заданием соответствующих значений параметров местоположения.<br> <br> И наконец, вы можете задавать некоторые параметры сразу для нескольких свободных элементов. К таким параметрам относятся: местоположение и размеры (поля ввода L, Т, W и Н редактора свойств), видимость (раскрывающийся список Vis), тег (раскрывающийся список Tag), фоновое изображение (поле ввода <b>Bg Image) </b>и цвет фона (поле ввода <b>Bg Color).</b><br><br> <h1>Панель Layers</h1>Рисунок 11.11. Панель <b>Layers</b><br><br><div style="text-align:center;"><img src="image/risunok-11-11-panel-layers_1.gif" alt="Панель Layers"></div><br> Как видите, большую часть этой панели занимает список свободно позиционируемых элементов, имеющихся на странице. Данный список представляет собой таблицу, состоящую из трех колонок: изображение глаза (видимость), <b>Name </b>(имя свободного элемента) и Z (z-индекс). Вы можете менять размеры двух последних колонок, перетаскивая мышью границу между ними. И, разумеется, любой из элементов, перечисленных в списке, можно выбрать и произвести над ним предусмотренные в Dreamweaver манипуляции.<br> <br> В верхней части панели находится флажок <b>Prevent Overlaps. </b>Если он включен, Dreamweaver следит, чтобы свободные элементы не перекрывали друг друга. Этот флажок аналогичен пункту <b>Prevent Layer Overlaps, </b>находящемуся в подменю <b>Arrange </b>меню <b>Modify. </b>Так что вы можете пользоваться либо пунктом меню, либо флажком.<br> <br> Пункты списка свободных элементов выбираются так же, как пункты любого другого списка. Но, кроме того, вы можете выбрать сразу несколько элементов. Для этого выберите первый элемент обычным щелчком мыши, после чего щелкните на остальных элементах, удерживая нажатой клавишу <Shift>.<br> <br> Как только вы выбираете какие-либо из элементов, они тотчас же отображаются в окне документа как выделенные. Это очень удобно — вы сразу же видите, какие именно свободные элементы вы выбрали. И, наоборот, когда вы выделяете один или несколько элементов в окне документа, они отображаются выбранными в панели <b>Layers.</b><br> <br> Вы можете изменить имя дюбого из свободных элементов, перечисленных в списке. Для этого используется уже знакомая вам методика: вы выбираете соответствующий пункт списка и щелкаете по нему снова в колонке <b>Name </b>(имя). (Возможно, щелкнуть придется дважды.) После этого вместо имени свободного элемента появится поле ввода, в котором вы сможете ввести новое имя. Не забудьте нажать клавишу <Enter> для сохранения нового имени или клавишу <Esc> — для отказа от него и возврата к старому имени.<br> <br> Теперь обратите внимание на колонку Z списка элементов. Дело в том, что свободные элементы отображаются в списке в том порядке, в котором они перекрывают друг друга. Иначе говоря, они отсортированы по z-индексу. И Dreamweaver предоставляет вам несколько возможностей по изменению данного порядка.<br> <br> Самый простой способ изменить порядок перекрытия — это перетащить нужный элемент на новое место в списке. При этом Dreamweaver сам изменит значения z-индексов всех свободных элементов, расположенных на странице. Увы, иногда он делает это не очень корректно; в таком случае не обойтись без ручной коррекции, о которой мы сейчас и узнаем.<br> <br> Если вы хотите точно управлять перекрытием одними свободно позиционируемыми элементами других, задайте значения z-индекса вручную. Для этого также выберите нужный элемент в списке и снова щелкните по нему в колонке Z. Вместо значения z-индекса появится поле ввода, в котором вы сможете ввести новое значение, после чего нажмите клавишу <Enter> для его сохранения или клавишу <Esc> — для его отмены. Останется только проверить и, если нужно, изменить значения z-индекса у соседних свободных элементов в списке, чтобы они не совпадали с уже введенным.<br> <br> Также панель <b>Layers </b>предлагает вам самый простой способ изменить видимость свободного элемента. Для этого используется колонка с изображением глаза, самая левая в списке. Выберите нужный элемент в списке и последовательно щелкайте по нему в колонке со значком глаза. При этом содержимое колонки будет последовательно меняться:<br> <br> <li> изображение закрытого глаза — элемент невидим;<br> </li> <li> изображение открытого глаза — элемент видим;<br> </li> <li> пустая колонка — элемент "наследует" видимость у родителя.<br> </li> В качестве примера см. Рисунок 11.12 — на нем изображены все три значения параметра видимости, доступных для свободно позиционируемого элемента.<br> <br> <p align="center"><br><br> <h1>Три свободно позиционируемых</h1>Рисунок 11.12. Три свободно позиционируемых элемента (сверху вниз): невидимый, видимый, "наследующий" видимость у родителя<br><br><div style="text-align:center;"><img src="image/risunok-11-12-tri-svobodno-pozicioniruemyh_1.gif" alt="Три свободно позиционируемых"></div><br> Самая интересная возможность, предлагаемая панелью <b>Layers, </b>— возможность "переноса" одних элементов в другие. Иначе говоря, создание вложенных элементов. Для этого также используется перетаскивание свободных элементов с помощью мыши.<br> <br> Выберите в списке свободный элемент, который вы хотите "вложить" в другой. После этого найдите в списке элемент, в который вы хотите "вложить" выбранный, но не выбирайте его. А перетащите на него выбранный элемент, удерживая нажатой клавишу <Ctrl>; при этом элемент, на который вы "тащите" выбранный, будет выделен тонкой синей рамкой. Осталось только "отпустить" перетаскиваемый элемент; на Рисунок 11.13 изображен результат этого действия. Также, возможно, придется подкорректировать z-индекс.<br> <br> <p align="center"><br><br> <h1>Вложенные свободно</h1>Рисунок 11.13. Вложенные свободно позиционируемые элементы в списке панели <b>Layers</b><br><br><div style="text-align:center;"><img src="image/risunok-11-13-vlozhennye-svobodno-pozicioniruemye_1.gif" alt="Вложенные свободно"></div><br> Как видите, в случае наличия вложенных свободных элементов в списке создается "дерево", "растущее" из родителя. Вы можете упорядочивать вложенные элементы, изменяя их z-индекс, независимо от невложенных элементов. Также вы можете создавать целые структуры свободных элементов, многократно вложенных друг в друга. Пример такой структуры показан на Рисунок 11.14. Это вполне возможно сделать, правда, трудно вообразить себе такую ситуацию, когда бы такие структуры понадобились.<br> <br> <p align="center"><br><br> <h1>Структуры свободно</h1>Рисунок 11.14. Структуры свободно позиционируемых элементов многократной вложенности<br><br><div style="text-align:center;"><img src="image/risunok-11-14-struktury-svobodno-pozicioniruemyh_1.gif" alt="Структуры свободно"></div><br> Если вы хотите "вынести" вложенные элементы из родителя, просто перетащите их в нужную позицию в списке. После этого в большинстве случаев придется изменить z-индекс.<br><br> <h1>Заголовок страницы Layers htm</h1>Рисунок 11.15. Заголовок страницы Layers.htm<br><br><div style="text-align:center;"><img src="image/risunok-11-15-zagolovok-stranicy-layers-htm_1.gif" alt="Заголовок страницы Layers htm"></div><br> Создадим данный элемент. Назовем его Headershadow и зададим ему черный цвет фона. После этого переключимся на элемент Header и зададим для него такой же цвет, как у фона самой Web-страницы, иначе расположенный ниже элемент-тень будет "просвечивать" сквозь него. Заодно установим параметр <b>Overflow в hidden, </b>чтобы размеры свободного элемента-заголовка случайно не изменились (Internet Explorer имеет такой грешок). Перепишем (или запомним) значения размеров, местоположения и z-индекса элемента-заголовка. Они потом нам очень пригодятся.<br> <br> Теперь вернемся к нашему элементу-тени. Зададим для него такую же ширину (поле ввода W) и высоту (Н), как и для элемента-заголовка, — это важно. А для горизонтальной и вертикальной координат (поля ввода, соответственно, L и Т) зададим небольшое смещение (пиксела на четыре в большую сторону), ведь тень всегда немного сдвинута относительно "хозяина". Z-индекс (поле ввода Z) зададим меньшим, чем у элемента-заголовка. И посмотрим на результат — Рисунок 11.16.<br> <br> <p align="center"><br><br> <h1>Готовый заголовок с тенью</h1>Рисунок 11.16. Готовый заголовок с тенью<br><br><div style="text-align:center;"><img src="image/risunok-11-16-gotovyj-zagolovok-s-tenju_1.gif" alt="Готовый заголовок с тенью"></div><br> Красиво, не так ли? Единственный недостаток: если вы хотите изменить размеры и (или) местоположение такого заголовка, вам также придется, соответственно, изменить размеры и (или) местоположение его тени.<br> <br> Теперь давайте поместим на страницу начальный текст, содержащий приветствие. Это совсем простая задача. Создадим новый свободный элемент, назовем его content и поместим под заголовком. После этого остается только скопировать в него со старой страницы сам текст приветствия. Результат см. на Рисунок 11.17.<br> <br> Точно так же создадим еще один свободный элемент и поместим в него портрет нашего героя. Вновь созданный элемент назовем Photo и поместим его правее текста приветствия. Для портрета зададим достаточно маленькие размеры, чтобы он поместился на небольшом пространстве нашей странички. То, что у вас должно получиться в результате, показано на Рисунок 11.18.<br> <br> Следующий элемент — полоса навигации. Но мы с вами не хотим создавать унылую, выровненную по линеечке, словно взвод солдат, замерших по стойке "смирно", полосу навигации. Давайте применим свою фантазию, прибавим к ней изумительные свойства свободно позиционируемых элементов и создадим что-нибудь пооригинальнее. А именно набор гиперссылок, "рассыпанных" по всей странице.<br> <br> <p align="center"><br><br> <h1>Заголовок и текст приветствия</h1>Рисунок 11.17. Заголовок и текст приветствия<br><br><br><div style="text-align:center;"><img src="image/risunok-11-17-zagolovok-i-tekst-privetstvija_1.gif" alt="Заголовок и текст приветствия"></div><br> <p align="center"><br><br> <br><br> <h1>Заголовок текст приветствия и портрет</h1>Рисунок 11.18. Заголовок, текст приветствия и портрет<br><br><div style="text-align:center;"><img src="image/risunok-11-18-zagolovok-tekst-privetstvija-i_1.gif" alt="Заголовок текст приветствия и портрет"></div><br> Первая такая гиперссылка будет вести на страницу списка увлечений нашего незабвенного Ивана Ивановича. А именно на страницу Passions.htm. Создадим небольшой новый элемент, назовем его Passionsiink и зададим для него белый фон. После этого введем в него слово Увлечения, выровняем его по центру и превратим в гиперссылку. Результат показан на Рисунок 11.19.<br> <br> <p align="center"><br><br> <h1>Заголовок текст</h1>Рисунок 11.19. Заголовок, текст приветствия, портрет и гиперссылка<br><br><div style="text-align:center;"><img src="image/risunok-11-19-zagolovok-tekst-privetstvija-portret_1.gif" alt="Заголовок текст"></div><br> Остальные гиперссылки делаются по образу и подобию первой. Это проще всего сделать так. Выделите границу первого свободного элемента гиперссылки, созданного нами, и скопируйте его в буфер обмена. После чего щелкните мышью где угодно на странице (не на свободно позиционируемых элементах), чтобы поставить на нее текстовый курсор, и выполните вставку из буфера обмена. Новый свободный элемент будет помещен прямо поверх старого, который мы и копировали; вам останется только изменить его местоположение, имя и, разумеется, содержимое.<br> <br> Создайте таким образом все гиперссылки набора и разместите их на странице, назвав, соответственно, Projectsiink (список завершенных проектов), Linkslink (набор ссылок на "дружественные" ресурсы) и Aboutlink (сведения об авторе сайта). В результате у вас может получиться что-то похожее на Рисунок 11.20.<br> <br> Теперь настала очередь сведений об авторских правах. Поместим их внизу, прямо под текстом приветствия, а свободный элемент назовем copyrights.<br> <br> <p align="center"><br><br> <h1>Свободно позиционируемый</h1>Рисунок 11.2. Свободно позиционируемый абзац текста с возможностью прокрутки содержимого<br><br><div style="text-align:center;"><img src="image/risunok-11-2-svobodno-pozicioniruemyj-abzac-teksta_1.gif" alt="Свободно позиционируемый"></div><br> Теперь посмотрим, как это выглядит в Dreamweaver MX, т. е. самой последней (да и в предыдущей версии — 4.0 — этот код будет выглядеть так же).<br> <br> <HTML> <head> <link rel="canonical" href="https://www.e-lave.ru//index.htm"/><br> <br> <ТITLE>Пример WEB-страницы</ТITLE> <br> <SCRIPT><br> <br> <!— Сценарий, необходимый для нормальной работы этой Web-страницы в старых версиях Navigator —> </SCRIPT> </HEAD> <BODY><br> <br> <DIV ID="para" STYLE="position: absolute; left: 50; top: 50; width: 200; height: 100; background-color: #00FF00; overflow: scroll"><br> Это текст, который будет показан в окне Web-обозревателя. Это текст, который будет показан в окне Web-обозревателя. Это текст, который будет показан в окне Web-обозревателя. Это текст, который будет показан в окне Web-обозревателя. Это текст, который будет показан в окне Web-обозревателя. Это текст, который будет показан в окне Web-обозревателя.<br> </DIV><br> <br> </BODY> </HTML><br> <br> Этот код дает тот же самый результат, что и предыдущий. Просто выглядит более компактным, особенно если выбросить код сценария, "отвечающего" за совместимость с Navigator.<br> <br> Вот и все. Как видите, превратить фиксированный элемент страницы в свободный не составляет особого труда. Нужно всего лишь задать соответствующие стили и заменить теги <р> на <DIV>. А в большинстве случаев вам даже не нужно будет более-менее серьезно переделывать дизайн ваших страниц, если, конечно, они не основаны на фреймах или таблицах.<br> <br> Вопрос в другом. Так ли уж нужны нам эти свободно позиционируемые элементы?<br><br> <h1>Заголовок текст</h1>Рисунок 11.20. Заголовок, текст приветствия, портрет и готовый набор гиперссылок<br><br><br><div style="text-align:center;"><img src="image/risunok-11-20-zagolovok-tekst-privetstvija-portret_1.gif" alt="Заголовок текст"></div><br> <p align="center"><br><br> <br><br> <h1>Заголовок текст</h1>Рисунок 11.21. Заголовок, текст приветствия, портрет, набор гиперссылок и сведения об авторских правах<br><br><div style="text-align:center;"><img src="image/risunok-11-21-zagolovok-tekst-privetstvija-portret_1.gif" alt="Заголовок текст"></div><br> Не забываем выровнять текст по правой стороне. Получится у нас вот что (Рисунок 11.21).<br> <br> Вот и вся главная страница. Откройте ее в Web-обозревателе и посмотрите на окончательный результат.<br> <br> При желании вы можете переделать весь сайт на основе свободно позиционируемых элементов. Назовите его Sample site 4 или еще как-нибудь. Таким образом, у вас будет уже четвертый сайт, созданный вашими собственными руками.<br> <br> В этом случае вам сильно могут помочь шаблоны, описанные в главе 9. Создайте шаблон, содержащий заголовок, набор гиперссылок и сведения об авторских правах, поместите на нем пустой свободный элемент, где будет находиться содержимое страниц, и преобразуйте его в изменяемую область. После этого вам только останется создать на основе этого шаблона новую страницу и вписать в эту изменяемую область нужное содержимое.<br> <br> Конечно, никто не заставляет вас использовать шаблоны. Вы можете сделать каждую страницу сайта непохожей на другие. Благо свободно позиционируемые элементы дают вам такую возможность.<br><br> <h1>Диалоговое окно Convert Layers to Table</h1>Рисунок 11.22. Диалоговое окно <b>Convert Layers to Table</b><br><br><div style="text-align:center;"><img src="image/risunok-11-22-dialogovoe-okno-convert-layers-to_1.gif" alt="Диалоговое окно Convert Layers to Table"></div><br> Элементы управления группы <b>Table Layout </b>задают параметры таблицы разметки, которая будет сгенерирована Dreamweaver на основе исходного набора свободных элементов.<br> <br> Переключатель <b>Most Accurate </b>включает режим максимально точного преобразования. При этом будут соблюдены все размеры и расстояния. В свою очередь, переключатель <b>Smallest: Collapse Empty Cells </b>предписывает Dreamweaver убрать из получившейся таблицы ячейки и строки, размеры которых меньше заданной в поле ввода <b>Less than Pixels Wide </b>величины. (Данная величина задается в пикселах.) При этом получившаяся таблица разметки может немного отличаться от того, что планировалось, но будет компактнее.<br> <br> Включенный флажок <b>Use Transparent GIFs </b>предписывает Dreamweaver использовать в получившейся таблице разметки "распорки" из прозрачных однопиксельных GIF-изображений. В этом случае таблица разметки будет правильно отображаться любым браузером. Рекомендуется всегда оставлять этот флажок включенным.<br> <br> Включенный флажок <b>Center on Page </b>заставляет Dreamweaver помещать получившуюся таблицу разметки в центре страницы.<br> <br> Флажки группы <b>Layout Tools </b>задают вспомогательные параметры:<br> <br> <li> <b>Prevent Layer Overlaps </b>— запрещает или разрешает свободным элементам перекрывать друг друга;<br> </li> <li> <b> Show Layers Panel </b>— выводит на экран панель <b>Layers </b>или убирает ее; </li> <li><b>Show Grid </b>— выводит на экран координатную сетку или скрывает ее;<br> </li> <li> <b>Snap to Grid </b>— включает или отключает режим "прилипания" к линиям координатной сетки.<br> </li> Преобразование выполняется после нажатия кнопки <b>ОК. </b>Кнопка <b>Cancel </b>позволяет вам отказаться от преобразования.<br> <br> Чтобы выполнить обратное преобразование — таблицу разметки в набор свободно позиционируемых элементов — используйте пункт <b>Tables to Layers </b>в подменю <b>Convert </b>меню <b>Modify. </b>После его выбора на экране появляется диалоговое окно <b>Convert Tables to Layers, </b>показанное на Рисунок 11.23.<br> <br> <p align="center"><br><br> <h1>Диалоговое окно Convert Tables to Layers</h1>Рисунок 11.23. Диалоговое окно <b>Convert Tables to Layers</b><br><br><div style="text-align:center;"><img src="image/risunok-11-23-dialogovoe-okno-convert-tables-to_1.gif" alt="Диалоговое окно Convert Tables to Layers"></div><br> В этом окне находится только группа флажков <b>Layout Tools, </b>уже нам знакомая. Поэтому не будем описывать ее снова, а скажем только, что кнопка <b>ОК </b>запускает преобразование, а кнопка <b>Cancel </b>позволяет от него отказаться.<br><br> <h1>Кнопка Draw Layer панели объектов</h1>Рисунок 11.3. Кнопка <b>Draw Layer </b>панели объектов<br><br><div style="text-align:center;"><img src="image/risunok-11-3-knopka-draw-layer-paneli-obektov_1.gif" alt="Кнопка Draw Layer панели объектов"></div><br> Однако после нажатия этой кнопки новый свободный элемент на странице не появится. Его нужно будет нарисовать примерно так же, как мы рисовали ячейки и таблицы разметки в главе 8. Поместите курсор мыши в окно документа — вы видите, что он принял вид крестика. Это значит, что теперь вы можете нарисовать свободный элемент. Щелкните мышью туда, где должен быть его верхний левый угол, и проведите мышью, не отпуская ее девой кнопки. Вы увидите, что между курсором мыши и точкой, где вы щелкнули, тянется прямоугольник, обозначающий границы вновь создаваемого элемента. После того как он примет желаемые размеры, отпустите левую кнопку мыши. Все, свободно позиционируемый элемент готов (Рисунок 11.4).<br> <br> <p align="center"><br><br> <h1>Свободно позиционируемый</h1>Рисунок 11.4. Свободно позиционируемый элемент в окне документа Dreamweaver<br><br><div style="text-align:center;"><img src="image/risunok-11-4-svobodno-pozicioniruemyj-jelement-v_1.gif" alt="Свободно позиционируемый"></div><br> Второй способ создания свободного элемента — выбор пункта <b>Layer </b>меню <b>Insert. </b>В этом случае вам не придется рисовать в окне элемент — он появится сразу же. Вам останется только изменить его размеры и местоположение.<br> <br> Посмотрите на Рисунок 11.4. Изображенный на нем свободный элемент в настоящий момент выбран. Текстовый курсор находится внутри него, поэтому вы сразу же можете создать какое-либо содержимое. Чтобы выйти из свободного элемента, щелкните мышью где-либо вне его. А чтобы вернуться в свободный элемент, щелкните мышью по нему (но не по его границе).<br> <br> Заметьте, что граница невыбранного свободного элемента отображается тускло-серым цветом, чтобы не отвлекать вас. Если же она вам все-таки мешает, вы можете отключить показ границ невыбранных свободных элементов. Для этого отключите пункт-выключатель <b>Layer Borders </b>подменю <b>Visual Aids </b>меню <b>Views. </b>После этого границы невыбранных свободных элементов пропадут, однако граница выбранного элемента все еще будет видна.<br> <br> Теперь щелкните где-нибудь на границе свободного элемента. Вы также можете щелкнуть внутри свободного элемента, удерживая нажатой клавишу <Shift>. Результат показан на Рисунок 11.5.<br> <br> <p align="center"><br><br> <h1>Свободно позиционируемый</h1>Рисунок 11.5. Свободно позиционируемый элемент с выделенной границей<br><br><div style="text-align:center;"><img src="image/risunok-11-5-svobodno-pozicioniruemyj-jelement-s_1.gif" alt="Свободно позиционируемый"></div><br> Как видите, в данном случае свободно позиционируемый элемент предлагает вам набор маркеров изменения размера. Кроме того, в верхнем левом углу вы видите небольшой прямоугольник, называемый "захватом" (Рисунок 11.6) "Ухватившись" за него мышью, вы можете двигать свободный элемент. Точно такого же результата можно достичь, "ухватившись" мышью за саму границу элемента, но специальный "захват", согласитесь, удобнее. Щелкнув по нему, вы также сможете выделить границу свободного элемента.<br> <br> <p align="center"><br><br> <h1>Захват"</h1>Рисунок 11.6. "Захват" свободно позиционируемого элемента<br><br><div style="text-align:center;"><img src="image/risunok-11-6-zahvat-svobodno-pozicioniruemogo_1.gif" alt="Захват""></div><br> Кроме всего прочего, в окне документа заметен некий значок, представленный на Рисунок 11.7. Это значок свободного элемента, показывающий, где он должен был бы находиться, если бы не был свободно позиционирован. Вы можете щелкнуть по этому значку для того, чтобы выделить свободный элемент.<br> <br> <p align="center"><br><br> <h1>Значок свободно позиционируемого элемента</h1>Рисунок 11.7. Значок свободно позиционируемого элемента<br><br><div style="text-align:center;"><img src="image/risunok-11-7-znachok-svobodno-pozicioniruemogo_1.gif" alt="Значок свободно позиционируемого элемента"></div><br> Чтобы удалить свободный элемент, выделите его границу и нажмите клавишу <Del>.<br> <br> Вы также можете создавать свободно позиционируемые элементы, вложенные в другие свободно позиционируемые элементы. Для этого достаточно просто нарисовать или вставить новый элемент внутрь уже существующего. Пример вложенных друг в друга свободных элементов показан на Рисунок 11.8.<br> <br> <p align="center"><br><br> <h1>Свободно позиционируемые</h1>Рисунок 11.8. Свободно позиционируемые элементы, вложенные друг в друга (сетка временно отключена)<br><br><div style="text-align:center;"><img src="image/risunok-11-8-svobodno-pozicioniruemye-jelementy_1.gif" alt="Свободно позиционируемые"></div><br> Вы уже знаете, что свободно позиционируемые элементы могут перекрывать друг друга. Обычно элементы, созданные позже, перекрывают элементы, созданные раньше, но вы можете изменить порядок перекрытия. Для этого выберите нужный свободный элемент и в подменю <b>Arrange </b>меню <b>Modify </b>выберите пункт <b>Bring To Front, </b>чтобы увеличить z-индекс элемента, или пункт <b>Send To Back, </b>чтобы его уменьшить. Однако эти пункты работают очень странно, и для задания z-индекса вам лучше воспользоваться другими средствами, описанными ниже.<br> <br> В том же самом подменю <b>Arrange </b>меню <b>Modify </b>находится пункт-выключатель <b>Prevent Layer Overlaps. </b>Если он включен, Dreamweaver не позволит вам "наложить" один свободно позиционируемый элемент на другой, т. е. вы не сможете ни переместить его, ни изменить его размеры так, чтобы он перекрыл другие свободные элементы. Однако те элементы, которые уже "лежат" на других, останутся на своих местах.<br> <br> Сохраните готовую Web-страницу под именем 11.3.htm.<br><br> <h1>Вид панели редактора</h1>Рисунок 11.9. Вид панели редактора свойств при выделенном свободном элементе (тег <DIV> или <SPAN>)<br><br><div style="text-align:center;"><img src="image/risunok-11-9-vid-paneli-redaktora-svojstv-pri_1.gif" alt="Вид панели редактора"></div><br> В поле ввода <b>Layer ID </b>вводится уникальное имя свободного элемента. Dreamweaver по умолчанию подставляет туда автоматически сгенерированное имя вида Layer<парядковый номер>. Если хотите, можете ввести более вразумительное имя. Вы можете также выбрать пункт <b>ID </b>контекстного меню свободного элемента и ввести новое имя в диалоговом окне <b>Change Attribute.</b><br> <br> В полях ввода L и Т вводятся, соответственно, горизонтальная и вертикальная координаты верхнего левого угла свободно позиционируемого элемента. Заметьте, что эти величины могут быть заданы в любой из единиц измерений, поддерживаемых CSS.<br> <br> В полях ввода W и Н вводятся, соответственно, ширина и высота свободно позиционируемого элемента. Эти величины также могут быть заданы в любой из единиц измерений, поддерживаемых CSS.<br> <br> В поле ввода <b>Z-Index </b>задаётся уже известный вам z-индекс, иначе говоря, порядковый номер данного свободного элемента в "стопке" других. Эта величина может быть как положительной, так и отрицательной. Свободный элемент перекрывает все элементы с меньшим значением z-индекса и перекрывается элементами с большим его значением. Кроме того, свободный элемент перекрывает обычное содержимое страницы, лежащее в "потоке" текста.<br> <br> С помощью раскрывающегося списка <b>Vis </b>вы можете задать, будет ли свободный элемент видим на странице. Здесь доступны четыре пункта:<br> <br> <li> <b> inherit </b>- заставляет элемент "наследовать" видимость от, родителя, т. е. если родитель видим, видим и сам элемент, и наоборот;<br> </li> <li> <b> visible </b>— делает элемент видимым;<br> </li> <li> <b> hidden </b>— делает элемент невидимым (скрытым); ,<br> </li> <li> <b> default </b>— как правило, аналогично <b>inherit.</b><br> </li> Похожую функцию выполняет подменю <b>Visibility </b>контекстного меню свободного элемента. Оно содержит те же четыре пункта, что и раскрывающийся список <b>Vis.</b><br> <br> В поле ввода Bg Image вводится имя файла графического изображения, которое будет использовано в качестве фона. Вы также можете щелкнуть значок папки, расположенный справа от поля ввода, и выбрать нужный файл в появившемся на экране диалоговом окне <b>Select File.</b><br> <br> С помощью селектора цветов <b>Bg Color </b>задается цвет фона свободного элемента.<br> <br> В раскрывающемся списке <b>Tag </b>выбирается тег, с помощью которого создается свободно позиционируемый элемент. Этот список содержит только два пункта: SPAN и DIV. Их назначение должно быть вам понятно. По умолчанию свободный элемент создается с использованием тега <DIV>.<br> <br> Аналогичную функцию выполняет подменю <b>Tag </b>контекстного меню свободного элемента. Оно содержит те же четыре пункта, что и раскрывающийся список <b>Tag.</b><br> <br> С помощью раскрывающегося списка <b>Overflow </b>задается поведение свободного элемента в случае, если его содержимое в нем не помещается. Здесь доступны четыре пункта:<br> <br> <li> <b> visible </b>— заставляет свободный элемент растянуться по вертикали, чтобы вместить в себя все содержимое;<br> </li> <li> <b>hidden </b>— просто скрывает ("обрезает") ту часть содержимого свободного элемента, которая превышает его размеры;<br> </li> <li><b> scroll </b>— заставляет свободный элемент отобразить полосы прокрутки независимо от того, помещается ли в нем все содержимое или нет;<br> </li> <li> <b> auto -</b>заставляет свободный элемент отобразить полосы прокрутки только тогда, когда его содержимое в нем не помещается;<br> </li> <li> пункт <b><пустая строка> </b>— аналогичен <b>visible </b>(значение по умолчанию).<br> </li> Пункт <b>scroll </b>предусмотрен для таких случаев, когда содержимое свободно позиционируемого элемента точно выверено, и появление и исчезновение полос прокрутки может его изменить. В других случаях используйте пункт <b>auto </b>или другие пункты.<br> <br> Группа полей ввода <b>Clip </b>позволяет задать координаты видимой области свободного элемента. Каждый свободный элемент может иметь такую видимую область, иначе говоря, фрагмент содержимого, который виден в окне Web-обозревателя. Содержимое, не входящее в эту область, скрывается. Задание видимой области может понадобиться для создания каких-либо спецэффектов на Web-странице.<br> <br> В группу полей ввода <b>Clip </b>входят четыре поля: <br> <li> L горизонтальная координата верхнего левого угла; </li> <li> Т — вертикальная координата верхнего левого угла; </li> <li> R — горизонтальная координата нижнего правого угла; </li> <li> В — вертикальная координата нижнего правого угла.</li> <br><br> <h1>Создание свободно позиционируемых элементов</h1>Создание свободно позиционируемых элементов<br><br> Создайте в Dreamweaver новую Web-страницу. С ней мы и будем экспериментировать.<br> <br> Однако прежде, чем начинать свои эксперименты, давайте выполним некоторые предварительны? операции. Сначала включим измерительные линей ки, для чего включим пункт-выключатель <b>Show </b>в подменю <b>Rulers </b>меню <b>Modify </b>или нажмем комбинацию клавиш <Ctrl>+<Alt>+<R>. После этого включим координатную сетку, включив пункт-выключатель <b>Show Grid пол</b>меню <b>Grid </b>меню <b>View </b>или нажав комбинацию клавиш <Ctrl>+<Alt>+<G> И напоследок включим "прилипание", включив пункт-выключатель <b>Snap То Grid </b>подменю <b>Grid </b>меню <b>View </b>или нажав комбинацию клавиш <Ctrl>+ +<Alt>+<Shift>+<G>. Подробнее обо всех этих манипуляциях см. главу 8.<br> <br> Примечание 1 <br>Примечание 1<br><br> <br> Имейте, однако, в виду, что это всего лишь рекомендации. Измерительные линейки, сетка и "прилипание", по идее, должны помочь вам, но если вы привыкли работать без таких визуальных "подсказок", не включайте их.<br> <br> Чтобы создать свободно позиционируемый элемент, проще всего нажать кнопку <b>Draw Layer </b>(Рисунок 11.3), расположенную на вкладке <b>Common </b>панели объектов.<br> <br> <p align="center"><br><br> <h1>в любом случае перекрывает обычное </h1>Внимание<br><br> Свободно позиционируемый элемент в любом случае перекрывает обычное содержимое страницы, лежащее в "потоке" текста.<br> <br> Как видите, вы можете задать для свободного элемента довольно много параметров. Вы даже можете сделать его видимым или невидимым, что часто используется в анимации и при создании различного рода спецэффектов. Кроме того, это пригодится, если вы будете программировать для своей страницы интерфейс, аналогичный интерфейсу Windows-приложения.<br> <br> Отдельно хотелось бы остановиться на одной особенности свободных элементов. Как вы поняли, они могут содержать внутри себя некое содержимое, т. е. могут являться родителями для других элементов. Так вот: можно задать поведение такого свободного элемента в случае, если его содержимое перестанет в нем помещаться. Вы можете задать, появится ли в элементе-родителе полоса прокрутки или не помещающееся в нем содержимое будет "отрезано". Таким образом, вы можете создавать своеобразные "документы в документе" без использования фреймов.<br> <br> И еще. Свободно позиционируемый элемент может содержать внутри себя другие свободно позиционируемые элементы. Во многих случаях это может быть полезным.<br><br> <h1>Прежде всего нам необходимо выяснить, </h1>Введение<br><br> в свободно позиционируемые элементы<br> Прежде всего нам необходимо выяснить, как создаются свободно позиционируемые элементы страниц. И рассмотрим мы это на небольшом примере, который сделаем вручную, не прибегая к помощи Dreamweaver. Это позволит нам лучше понять, что такое свободно позиционированные элементы, "подержать" их в руках.<br> <br> Но сначала — немного теории. Куда же без нее...<br><br> <h1>Зачем нужны свободно позиционируемые элементы</h1>Зачем нужны свободно позиционируемые элементы<br><br> Действительно, зачем?<br> <br> Подавляющее большинство Web-дизайнеров и Web-сайтов до сих пор прекрасно обходятся традиционными способами дизайна. Применять на своих страницах свободные элементы никто особо не хочет. Даже анимированные элементы, казалось бы, замечательное средство привлечь внимание посетителя, — большая редкость на просторах Сети.<br> <br> Вполне возможно, это обычный консерватизм, уже погубивший множество перспективных технологий. Конечно, не стоит сбрасывать со счетов и то, что свободно позиционируемые элементы поддерживаются только новыми версиями программ Web-обозревателей (фактически теми из них, которые поддерживают таблицы стилей). Но это не довод: те же таблицы стилей применяются несравнимо чаще. Видимо, все-таки консерватизм...<br> <br> Но если подавляющее большинство Web-дизайнеров как-то обходятся без свободно позиционируемых элементов, так ли уж они нужны? Стоит ли их применять? Может, лучше остаться при своих таблицах и фреймах?<br> <br> Это решать вам.<br> <br> Нужны ли вам свободно позиционируемые элементы? Нужны ли они вашему сайту? Сможете ли вы без них обойтись? Вот вопросы, ответы на которые вам стоит поискать.<br> <br> Конечно, свободные элементы имеют множество преимуществ. Они позволяют располагать фрагменты содержимого Web-страниц так, как вам нужно, и при этом обходиться минимальным количеством кода (сравните с громоздкими таблицами разметки). Однако, если вы надумаете переделывать ваш старый сайт в новый, использующий свободные элементы, переделка будет весьма значительной. Особенно если ваш сайт достаточно велик и основан на таблицах. Так что, если .сайт работает нормально и без свободно позиционируемых элементов, лучше его не трогать.<br> <br> Правда, иногда бывает, что без свободно позиционируемых элементов не обойтись. Давайте рассмотрим каждую из подобных ситуаций.<br> <br> <li> Как гласил рекламный лозунг фильма "Годзилла", размер имеет значение. В самом деле, если ваши Web-страницы сделаны на основе таблиц разметки и достаточно сложны, HTML-код догоняет в габаритах вышеупомянутое земноводное. А чем больше страница, тем дольше она будет загружаться... Свободно позиционируемые элементы позволят радикально сократить размер HTML-кода страниц и при этом добавят им такие возможности, которых у таблиц просто нет и не будет.<br> </li> <li> Вы задумали такой дизайн для своих Web-страниц, который никак не создать без использования свободно позиционируемых элементов. Подобный дизайн может включать "окошки в окошке" для показа фрагментов текста, перекрывающиеся элементы и т. п.<br> </li> <li> Вы собираетесь анимировать некоторые элементы страницы. Но прежде чем их анимировать, нужно сделать их свободно позиционируемыми.<br> </li> Вот, вроде бы, и все случаи, когда вам не обойтись без свободных элементов. В остальных случаях они не обязательны.<br><br> <h1> Использование пакета Dreamweaver </h1> <h1>Анимация графических изображений</h1>Анимация графических изображений<br><br> Выше мы с вами рассмотрели анимацию свободно позиционируемых элементов. По идее только их и можно анимировать, ведь только они могут позиционироваться где угодно и иметь какие угодно размеры. А значит, только их можно двигать по странице, изменять их размеры и делать невидимыми. С обычными, фиксированными элементами такого не сделать.<br> <br> Правда, у этого правила есть одно исключение. Можно анимировать графические изображения, и Dreamweaver предоставляет такую возможность. Но изменяться в процессе анимации может только имя отображаемого файла (атрибут SRC тега <IMG>).<br> <br> Однако даже этого часто бывает достаточно. В самом деле, изменяя имя графического файла, можно создавать анимации с быстро сменяющимися кадрами. (Фактически, таким образом можно проигрывать на Web-странице настоящий фильм, не прибегая к созданию видеофайла, даже в формате "анимированный GIF".) Нужно будет только запастись необходимым количеством графических файлов, содержащих разные фазы анимации, но это уже проблема Web-художника.<br> <br> Как же анимировать графическое изображение? Очень просто. Давайте создадим новую страничку и назовем ее 12.1.htm. Она не будет иметь отношения к сайту Sample site 1, но позаимствует из него графические файлы.<br> <br> Поместите на эту страницу графическое изображение. В качестве отображаемого файла задайте Email.gif, находящийся в папке Pics, вложенной в папку Samplel (в ней расположены файлы сайта Sample site 1). Это совсем просто, поэтому нет смысла пускаться в длительные объяснения.<br> <br> Теперь создадим новую дорожку анимации для вновь созданного изображения. Выделим его и выберем пункт <b>Add Object </b>в контекстном меню панели <b>Timelines </b>(в контекстном меню графического изображения такого пункта нет). После этого Dreamweaver выведет очередное сообщение, предупреждающее, что он может управлять только параметром имени отображаемого файла (Рисунок 12.14). Закройте его, нажав кнопку <b>ОК.</b><br> <br> <p align="center"><br><br> <h1>Анимация — подход Dreamweaver</h1>Анимация — подход Dreamweaver<br><br> Описанный выше способ создания анимации с помощью сценариев, реализующих функцию траектории, обладает множеством достоинств. Такие сценарии имеют очень малый размер и очень быстро выполняются, т. к. программист имеет возможность написать функцию траектории наиболее оптимальным способом. Однако у них есть один огромный недостаток -негибкость. Фактически для изменения траектории движения анимирован-ного элемента нужно писать новый сценарий, реализующий новую функцию траектории.<br> <br> Но негибкость — не единственный недостаток этого способа создания анимации. Если анимированный элемент должен совершать достаточно сложное движение, реализующий эту траекторию сценарий получается очень большим и медленным. И чем сложнее траектория, тем больше и медленнее получается сценарий.<br> <br> Третий недостаток — сложность реализации сложных траекторий. Извините за тавтологию, но это так. Малоопытные программисты, особенно не имеющие серьезной математической подготовки, обычно ограничиваются простенькими траекториями, как правило, прямолинейными. Максимум, на что они отваживаются, — это простой эллипс. А ведь для некоторых задач, которые будут рассмотрены ниже, нужны как раз довольно сложные траектории движения. И обойтись простыми траекториями весьма проблематично.<br> <br> Однако и из этого положения есть выход. На помощь неопытным программистам, не владеющим высшей математикой, придет новый вид функции траектории, принимающей всего два параметра: массив ключевых точек траектории и, естественно, текущее время:<br> <br> <p align="center"> {х, у, z} = f([p1, t1, p2, t2..., t])<br> <br> Насчет времени все понятно, но что такое массив ключевых точек? Ничего сложного: это набор точек, с помощью которого задается траектория движения нашего анимированного элемента. Поясним это более подробно.<br> <br> Предположим, что нам нужно создать очень сложную анимацию, когда элемент страницы движется по весьма причудливой траектории. При этом высшей математикой мы не владеем, поэтому вывести формулу этой траектории не сможем. Однако мы придумали вот что.<br> <br> Можно сделать немного по-другому. Прежде всего, пометим и пронумеруем ключевые точки прямо на нарисованной траектории. Далее отдельно по линейке прямую и проставим на ней координатную шкалу времени, проградуировав ее, скажем, в секундах. Отметим вдоль этой шкалы напротив соответствующих делений точки начала и конца анимации, проведем между ними линию потолще и назовем ее дорожкой анимации. После этого останется только пронумеровать ключевые точки и проставить их на дорожке напротив соответствующих отметок времени. В результате мы получим набор точек, координаты и время прохождения которых можно легко вычислить (соответственно, на нарисованной схеме и временной шкале). Согласитесь, так много нагляднее.<br> <br> Мы начертили траекторию движения нашего элемента на миллиметровой бумаге, после чего выделили на данной траектории нужное количество ключевых точек, которые ее, собственно, и создают (точки перегиба, начало и конец траектории и т. п.), и выписали их координаты на отдельную бумажку. Далее, зная время, за которое анимированный элемент пройдет всю траекторию, мы можем выяснить, в какой момент времени он появится в той или иной ключевой точке. Осталось только выписать эти значения времени на ту же бумажку, проставив их напротив координат соответствующих точек. Вот мы и получили массив ключевых точек, который можно передать новой функции траектории.<br> <br> Этот подход и используется Dreamweaver.<br> <br> Для примера мы привели анимацию, включающую один-единственный анимированный элемент. Но Dreamweaver позволяет помещать на временную шкалу сразу нужное количество элементов, создавая несколько анимационных дорожек, что может быть использовано для создания очень сложных анимаций, в которых все элементы движутся согласованно. Более того, Dreamweaver позволяет создавать на одной странице несколько работающих независимо друг от друга анимаций, каждая из которых может включать в себя любое количество анимированных элементов. Так что даже самый привередливый аниматор будет доволен.<br> <br> Функция траектории, принимающая в качестве параметра массив ключевых точек, очень сложна, но нам и не нужно ее реализовывать. Многие мощные Web-редакторы предоставляют пользователям возможность создания анимации и используют для этого как раз такой подход. Набор Web-сценариев, реализующих функцию траектории, в этом случае вставляется в HTML-код страницы автоматически, пользователь даже не догадывается об этом.<br> <br> Конечно, Dreamweaver не исключение. Он тоже предоставляет пользователям такую возможность. И также делает всю черновую работу сам.<br> <br> Недостатком такого способа создания анимации являются большой размер и не очень высокое быстродействие получившегося кода. Поэтому для простейших анимаций, наверное, будет оправдан все-таки первый подход: специально написанные сценарии, непосредственно реализующие функцию траектории.<br> <br> Ну вот, с техническими вопросами мы разобрались. Осталось выяснить, в каких случаях можно применять анимацию, а в каких — лучше воздержаться.<br><br> <h1>Анимация реального времени</h1>Анимация реального времени<br><br> Мы только что рассмотрели способ создания на Web-странице простейшей анимации. Но дело в том, что в реальной жизни такая анимация применяется крайне редко. Более того, автор категорически не рекомендует вам даже пытаться ее сделать.<br> <br> Почему? Дело в том, что вышеописанный способ создания анимации имеет только одно более чем сомнительное достоинство и два огромнейших недостатка.<br> <br> Достоинство — простота, более того, очевидность реализации. Любой программист, даже малоквалифицированный, может сесть и в пять минут накропать сценарий, реализующий движение элемента по прямолинейной траектории. Да, он это сделает, даже если до этого ни разу не занимался Web-программированием.<br> <br> Но пусть он только попробует выложить свое творение в Сеть!<br> <br> Давайте представим двоих интернетчиков, решивших посетить его страничку с анимацией. У одного компьютер десятилетней давности, старенький, заслуженный, едва-едва обрабатывающий современные сложные Web-странички, даже без мультимедийных "наворотов". У другого — мощнейшая наисовременнейшая машина, только что сошедшая со сборочных столов какого-нибудь известного "брэнда". Вот они заходят-таки на страничку, загружают ее и принимаются наблюдать за анимацией.<br> <br> Компьютер первого посетителя с натугой загрузит ее и, треща жестким диском, начнет ни шатко ни валко выполнять сценарии, реализующие анимацию. Анимированный элемент худо-бедно движется по странице, посетитель доволен — работает. Теперь оставим его и взглянем на посетителя номер два. Его компьютер мгновенно загрузит страничку и мгновенно же выполнит все сценарии. Анимированный элемент пролетит по своей траектории так быстро, что человеческий глаз его движения даже не заметит.<br> <br> Спрашивается, кому нужна такая анимация?<br> <br> Но это полбеды. Беда настанет, если наш незадачливый программист решит сделать анимацию зацикленной, бесконечной. Теперь смотрите, что получится. Страница загружается в Web-обозревателе, интерпретатор начинает выполнять сценарии... и выполняет... выполняет... выполняет... А пока он их выполняет, пользователь ничего не сможет сделать со страничкой: ни щелкнуть по гиперссылке, ни даже прокрутить ее в окне. Единственный способ прервать затянувшееся "кино" — закрыть сам Web-обозреватель.<br> <br> Но что делать? Ведь Web-программисты как-то реализуют анимацию на своих страницах, и она работает нормально, в смысле, не мешает пользователю прокручивать страницу и щелкать по ссылкам. Может, они знают какой-нибудь секрет?<br> <br> Да, знают. И заключается этот секрет в том, что они используют немного другую функцию траектории:<br> <br> <p align="center"> {х, y, z} = f(Q, q, dq, t)<br> <br> От уже знакомой нам функции она отличается тем, что принимает еще один параметр — t. Этот параметр — время. Иначе говоря, при расчете координат функция траектории учитывает текущее время. И анимация оказывается жестко привязанной к времени, которое везде течет одинаково, в отличие от тактовой частоты процессоров, которые различаются у разных компьютеров.<br> <br> Как это реализуется? Дело в том, что новая функция выполняется не все время, пока работает анимация, а вызывается время от времени, тогда, когда нужно произвести очередной "скачок" анимации, и после этого прекращает свою работу, дожидаясь очередного вызова. Эта функция реализуется в виде сценария-обработчика внутреннего события — "тика" системного таймера.<br> <br> Таким образом, анимация оказывается четко привязанной к времени. И на стареньком компьютере посетителя номер один, и на суперсовременной машине номера два анимированный элемент будет двигаться с одной и той же скоростью. (Конечно, на более мощном компьютере анимация, возможно, будет выполняться плавнее, но с той же скоростью, что и на более мощном.)<br> <br> Далее. Так как функция траектории вызывается только время от времени, а не работает постоянно, пользователь может нормально взаимодействовать с Web-страницей. Web-обозревателю между "тиками" таймера остается предостаточно времени, чтобы обработать пользовательские запросы.<br> <br> Давайте приведем список задач новой функции траектории в порядке выполнения.<br> <br> <li> Принять начальные параметры и выполнить предварительные установки (установить анимированный элемент в начальную точку траектории движения, запустить системный таймер и привязать к его событиям сценарий-обработчик) .<br> </li> <li> Вычислить значения координат анимированного элемента на основании значения q и переместить этот элемент в точку с вычисленными координатами.<br> </li> <li> Проверить, дошел ли элемент до конца траектории. Для этого q сравнивается с Q, и, если они равны либо q больше Q, выполняется переход к шагу 5.<br> </li> <li> Увеличить значение q на величину dq.<br> </li> <li> Остановить системный таймер и "отвязать" от его событий обработчик.<br> </li> Для реализации этой функции используются два сценария. Один из них выполняется при загрузке страницы и реализует задачу шага 1. Второй -собственно обработчик событий системного таймера — реализует задачи шагов 2—5.<br> <br> Такая анимация, привязанная к системному таймеру, а не к процессору, называется анимацией реального времени. Именно она и применяется для создания движущихся элементов на Web-страницах. Простейшая анимация, описанная нами ранее, практически нигде не используется. Вы уже поняли, почему.<br><br> <h1>Более сложная анимация</h1>Более сложная анимация<br><br> Все-таки нехорошо, что заголовок и его тень (свободный элемент Headershadow) существуют отдельно. Давайте сделаем так, чтобы тень, пока заголовок движется к ней, была невидима на экране и появлялась лишь в самый последний момент. Для этого нам необходимо будет добавить свободный элемент, создающий эту тень, в анимацию, создав еще одну анимационную дорожку.<br> <br> Выберите свободный элемент Headershadow и добавьте его в анимацию. Как это сделать, вы уже знаете. Получившийся результат можно увидеть на Рисунок 12.7.<br> <br> Проследите, чтобы обе дорожки находились точно друг под другом. Если вторая дорожка получилась смещенной относительно первой, измените ее местоположение и (или) размер.<br> <br> <p align="center"><br><br> <h1>Недостатки анимации основанной</h1>Недостатки анимации, основанной на Web-сценариях, и их преодоление<br><br> Напоследок поговорим о недостатках опробованного нами способа создания анимаций на Web-страницах. И выясним, когда стоит его применять, когда можно ограничиться обычными видеофайлами, а когда можно обойтись вообще без всякой анимации.<br> <br> Самый главный недостаток анимаций, основанных на Web-сценариях, -это... нет, отнюдь не несовместимость со старыми программами Web-обозревателей. (Хотя, несовместимость тоже следует принимать в расчет.) Это "тяжесть" необходимого для их обработки программного обеспечения, его ресурсоемкость и не очень высокое быстродействие. Это может быть критично, если среди посетителей вашего сайта будет много обладателей старых, маломощных компьютеров, на которых оно будет работать очень медленно, из-за чего анимация станет воспроизводиться рывками. Если вообще будет...<br> <br> Как вы помните, Web-сценарии выполняются не самим Web-обозревателем, а специальной программой-интерпретатором, являющимся по отношению к Web-обозревателю внешней программой. Интерпретатор, расшифровывающий код сценария и исполняющий его, довольно требователен к ресурсам. Мало того, что нужно где-то хранить код сценария, исходный и расшифрованный, и свои данные, так еще нужно обрабатывать и сохранять данные самого сценария. И чем больше и сложнее сценарии, тем больше интерпретатор требует системных ресурсов.<br> <br> В качестве решения этой проблемы можно только посоветовать не создавать без нужды сложных анимаций. Однако если уж без них не обойтись, стоит подумать о том, чтобы создать специальную версию сайта вообще без использования анимации и вообще сценариев. Тогда обладатели старых программ и (или) маломощных компьютеров смогут посещать ее, а счастливые владельцы современной техники получат удовольствие от "полновесной" версии сайта. Такой подход используется очень часто; почти все крупные и популярные интернет-проекты имеют "бессценарную" версию как раз на такой случай.<br> <br> Есть и другой путь. Если ваша анимация представляет собой набор последовательно сменяющихся картинок или элемент, движущийся по небольшой площади страницы, попробуйте реализовать ее в виде видеофильма. Практически все программы Web-обозревателей, за исключением совсем уже старых, поддерживают формат "анимированный GIF-файл". Этот формат используется в Web-графике так долго, что даже подмял под себя некоторые стандарты, например стандарт на рекламные баннеры. Существует огромное количество программ для создания анимации в формате GIF. А для помещения такой анимации на Web-страницу вам нужен только хорошо знакомый тег <IMG> — и никаких сценариев!<br> <br> Точно так же можно обойти проблему несовместимости со старыми программами.<br> <br> Но есть еще одна проблема, решение которой весьма затруднительно. Это проблема авторских прав на программный код. Точнее, проблема охраны этих самых авторских прав.<br> <br> Давайте рассмотрим обычные программы, которыми вы пользуетесь. Это могут быть популярнейший текстовый редактор Microsoft Word, проигрыватель мультимедийных файлов Nullsoft WinAmp, игра Quake 3 или сама операционная система Windows. Все эти программы были созданы с использованием компилируемых языков программирования, т. е. программа, написанная на каком-либо языке программирования (C++, Pascal или Assembler), была откомпилирована в набор инструкций центрального процессора и сохранена в файле с расширением ехе. Впоследствии, если пользователь запустит этот файл, он будет исполняться непосредственно центральным процессором, без участия каких-либо программ-интерпретаторов.<br> <br> Предположим, вы написали программу на компилируемом языке и хотите ее продавать. Причем продавать за большие деньги, т. к. в программе используется несколько принадлежащих вам ноу-хау. Если теперь хакер-злоумышленник захочет посмотреть, каков же принцип работы вашей программы, он потерпит неудачу. Дело в том, что читать машинный код процессора — занятие не для слабонервных. Далеко не всегда возможно просто понять, что он делает. А уж восстановить по нему исходный код программы абсолютно невозможно. (Хотя, если очень хочется, можете попытаться. Однако положительный результат этих попыток опять же не гарантирован.)<br> <br> Программы Web-сценариев пишутся на интерпретируемых языках программирования. Это значит, что в Web-странице такие программы находятся прямо в виде исходного кода. Любой JavaScript-программист может без труда получить доступ к этому коду и выяснить, как работает программа. А это значит, что никаких секретов в JavaScript-коде не утаишь.<br> <br> Выход из этой ситуации один: не реализовывать в качестве сценария сложные авторские алгоритмы. Интернет — среда, открытая по определению, и распространять по ней закрытую, секретную информацию весьма проблематично. С другой стороны, на то они и секреты, чтобы хранить их от любопытных глаз, которых во Всемирной паутине более чем достаточно.<br> <br> Есть, вообще-то, еще один недостаток, но он свойствен не самой анимации, основанной на Web-сценариях, а подходу, предлагаемому Dreamweaver. Дело в том, что необходимый для создания анимации набор Web-сценариев помещается в секцию HTML-заголовка страницы (тег <head> <link rel="canonical" href="https://www.e-lave.ru//index.htm"/>). Из этого следует, что если вы используете для создания страниц шаблоны, вы можете создать анимированные (и вообще любые свободно позиционируемые) элементы только в самом шаблоне, но никак не в созданных на его основе страницах. Dreamweaver просто не даст вам этого сделать. В самом деле, секция заголовка — это неизменяемая область, а поместить какой-либо код в неизменяемую область Dreamweaver вам не позволит. Имейте это в виду. Хотя, конечно, вы можете отказаться от анимации или "открепить" страницу от шаблона, а потом уже делать с ней все, что вам заблагорассудится.<br><br> <h1>Ограничения HTML</h1>Ограничения HTML<br><br> Так в чем же ограничивает нас HTML? Зачем понадобилось придумывать еще один язык? Нельзя ли обойтись без него?<br> <br> В общем, можно. Обходились же мы на протяжении целых одиннадцати глав обычным HTML, и ничего! Но дело в том, что странички-то мы делали неинтерактивные, т. е. не взаимодействующие с пользователем, не меняющие свое содержимое в ответ на его действия. Для таких страниц хватит и "чистого" HTML. А как только вы захотите "научить" страницу взаимодействовать с пользователем, т. е. сделать интерактивной, вы сразу упретесь в непреодолимую стену.<br> <br> А все потому, что HTML не позволяет задать поведение страницы в ответ, скажем, на щелчок мыши по одному из ее элементов. С его помощью задается только ее внешний вид. И этим он в корне отличается от "классических" языков программирования, описывающих как раз поведение.<br> <br> Собственно, HTML — и не язык программирования, а язык описания Web-страниц — и не более. Он описывает, как должна выглядеть информация в окне Web-обозревателя, только и всего. Причем, этот внешний вид жестко стандартизирован; Web-дизайнер, как вы уже поняли, значительно сильнее ограничен в своих возможностях, чем дизайнер-полиграфист. Особых вольностей на Web-страницах он не сделает. (Фреймы, таблицы разметки и каскадные таблицы стилей CSS снимают многие ограничения, но не все.)<br> <br> Конечно, такие ограничения обусловлены благой целью — обеспечением совместимости и единообразия внешнего вида страниц на любой компьютерной платформе. Но кому нужна совместимость такой ценой!<br> <br> Вы можете сказать, что любая Web-страница и так йвляется интерактивной, т. к. реагирует на щелчки по гиперссылкам. Но это не интерактивность, а стандартное поведение, заданное HTML. Интерактивность - это когда в ответ на перемещение курсора мыши за ним "бежит" картинка, когда при щелчке на фотографии внизу появляется ее описание, когда прямо на страничке "тикают" цифровые часы. Вот это настоящая интерактивность: в первом и втором случаях страница реагирует на действия пользователя, а в третьем — на события внешней среды. (Здесь под внешней средой подразумевается операционная система; работающий в ней системный таймер заставляет идти нарисованные часы.) И обычный HTML не может ее обеспечить.<br> <br> Чтобы преодолеть этот недостаток "чистого" HTML, были придуманы два пути.<br> <br> Первый путь — это специальные, как правило, нестандартные, "фирменные", теги, расширяющие возможности языка. В подавляющем большинстве случаев они добавляют Web-страницам интерактивные возможности. Например, нестандартный парный тег <MARQUEE>. . .</MARQUEE>, поддерживаемый Internet Explorer, позволяет создать на странице "прокручивающийся" текст. Но, согласитесь, эти расширения ограничивают Web-дизайнера теми возможностями, что вложили в них разработчики Web-обозревателя. И вы не сможете заставить текст в элементе <MARQUEE> не прокручиваться, а последовательно менять цвета — разработчики Internet Explorer этого не предусмотрели.<br> <br> Мы хотим сами задавать поведение элементов страниц в ответ на действия пользователя. Мы хотим сами контролировать их поведение, держать все нити управления в своих руках. HTML их нам предоставить не может; ограничения, обусловленные самой его природой, — стена, преодолеть которую невозможно. Однако, если стену нельзя перепрыгнуть, ее можно обойти. Так мы и сделаем.<br><br> <h1>Основные принципы анимации</h1>Основные принципы анимации<br><br> Наконец-то дошла очередь и до анимации. Рассмотрим некоторые базовые понятия, без которых в дальнейшем нам не обойтись.<br> <br> Не раз уже говорилось, что анимировать можно только свободно позиционируемые элементы. Не забывайте это. Только свободные элементы могут быть помещены в любое место страницы, и лишь они могут управляться из сценариев. Запомните это.<br><br> <h1>Простейшая анимация</h1>Простейшая анимация<br><br> Итак, за счет чего же достигается эффект анимации? Почему элемент страницы кажется движущимся по ней?<br> <br> Дело в том, что координаты элемента периодически меняются. И меняются весьма быстро, не реже 12 раз в секунду, за счет чего мы и наблюдаем непрерывное движение. Такая частота выбрана оттого, что именно на ней человеческий глаз теряет способность различать отдельные приращения, "скачки" прерывистого движения. Короче говоря, за этим пределом прерывистое движение становится для человека визуально непрерывным. (На этом же принципе, кстати, работают кинематограф и телевидение.) Компьютеры у нас сейчас достаточно мощные, так что обеспечить такую частоту смены координат вполне реально.<br> <br> Но мало всего лишь изменить координаты элемента. Нужно изменить их по особому закону, описывающему траекторию движения элемента. Если элемент движется по прямолинейной траектории, этот закон очень прост. В случае криволинейного движения он сильно усложняется. Поэтому не стоит создавать на своих страницах слишком сложные анимации: маломощный компьютер просто не "потянет" чересчур замысловатые траектории.<br> <br> Закон, по которому изменяются координаты анимированного элемента, иначе говоря, его траектория, описывается особой функцией (назовем ее функцией траектории). Такая функция принимает некоторые параметры и возвращает координаты элемента. Она имеет вид:<br> <br> <p align="center"> {х, у, z} = f(Q, q, dq)<br> <br> С возвращаемыми этой функцией результатами все просто, х, у и z — координаты анимированного элемента, соответственно, горизонтальная, вертикальная и порядок перекрытия (уже знакомый вам z-индекс). Конечно, функция, возвращающая сразу три координаты, - это общий случай. Обычно изменяется одна или две координаты элемента — х и у.<br> <br> А вот с параметрами, принимаемыми функцией, все несколько сложнее. Всего, как вы видите, их три, и назначение их неочевидно. Давайте же рассмотрим все эти параметры по порядку.<br> <br> Самый первый параметр — Q. Это длина траектории движения анимированного элемента. Она может измеряться в пикселах, миллиметрах, градусах или каких-либо относительных единицах, например процентах. Вообще, единица измерения зависит от самой траектории: для прямолинейной больше подойдут пикселы или миллиметры, а для круговой — градусы или радианы. Важно одно: параметр Q должен каким-то образом обозначать полную длину траектории, по которой будет двигаться наш элемент.<br> <br> Второй параметр (q) обозначает позицию на траектории, занимаемую в данный момент времени нашим элементом. Иными словами, это расстояние в единицах измерения траектории Q, которое он уже "пробежал". Получив его, наша функция должна сказать: "элемент здесь" и, что называется, "ткнуть пальцем" в точку на его траектории.<br> <br> Последний, третий параметр — dq. Он задает приращение, на которое будет меняться дистанция q при каждом "скачке" анимированного элемента. Beличина этого параметра задает скорость движения анимированного элемента.<br> <br> Итак, что же должна делать функция траектории. Ниже перечислены все ее задачи в порядке выполнения.<br> <br> <li> Принять начальные параметры и выполнить предварительные установки (прежде всего, установить анимированный элемент в начальную точку траектории движения).<br> </li> <li> Вычислить значения координат анимированного элемента на основании значения q и переместить этот элемент в точку с вычисленными координатами.<br> </li> <li> Проверить, дошел ли элемент до конечной точки траектории. Для этого q сравнивается с Q, и, если они равны либо q больше Q, анимация останавливается.<br> </li> <li> Увеличить значение q на величину dq.<br> </li> <li> Перейти к шагу 2.<br> </li> Это общий алгоритм, которому должны следовать все функции траектории, даже самые сложные. Фактически основная сложность заключается в реализации шага 2, т. е. вычислении координат на основе значения q. Остальные шаги реализуются очень просто и не составят трудности даже для начинающего программиста.<br> <br> В разговоре о простейшей анимации подразумевалось, что существует одна-единственная функция, реализующая ее. Реально для создания анимации может использоваться несколько программ-сценариев. Автор объединил их в одну функцию, чтобы вам было понятнее.<br> <br> Предполагалось, что когда анимированный элемент достигает конца траектории (q становится равной или больше Q), анимация останавливается. На самом деле, функция траектории может продолжить работу. Она может, например, просто снова выполнить начальные установки, поместив анимированный элемент в начало траектории, и запустить анимацию снова. Но лучше всего инвертировать значение dq (изменить положительное значение на отрицательное и наоборот) и пустить анимацию "задом наперед". Такая анимация, проигрывающаяся несколько или бесконечное количество раз, называется зацикленной.<br> <br> Конечно, зацикленная анимация выглядит эффектнее. Но злоупотреблять ей не стоит, особенно бесконечной. Почему — вы сейчас узнаете.<br><br> <h1>Панель Timelines</h1>Рисунок 12.1. Панель <b>Timelines</b><br><br><div style="text-align:center;"><img src="image/risunok-12-1-panel-timelines_1.gif" alt="Панель Timelines"></div><br> "Но ведь Dreamweaver позволяет работать одновременно с несколькими временными шкалами, — скажете вы. — Где же остальные шкалы?" Чтобы увидеть их, нужно выбрать соответствующий пункт комбинированного списка анимаций, показанного на Рисунок 12.2.<br> <br> <p align="center"><br><br> <h1>Сложная траектория</h1>Рисунок 12.10. Сложная траектория<br><br><div style="text-align:center;"><img src="image/risunok-12-10-slozhnaja-traektorija_1.gif" alt="Сложная траектория"></div><br> анимации тени, чтобы она была равна дорожке своего "хозяина", иначе тень будет появляться раньше или позже, чем заголовок закончит свой извилистый путь.<br> <br> Полученный результат вы можете увидеть на Рисунок 12.10. Сохраните страницу default2.htm, откройте ее в Web-обозревателе и посмотрите на результат ваших трудов.<br> <br> Ну, вот и все. Мы познакомились с основными возможностями, предлагаемыми Dreamweaver для создания анимации. Более сложные анимации, включающие в себя множество элементов, согласованно движущихся по разным траекториям, создаются аналогичным образом. Только тогда вам предстоит несколько больше работы по заданию траекторий, выставлению параметров в ключевых точках анимации и согласованию движения аними-рованных элементов.<br> <br> А сейчас мы познакомимся еще с некоторыми возможностями, предоставляемыми Dreamweaver Web-аниматорам. Они помогут вам сделать свою работу быстрее и проще.<br><br> <h1>Диалоговое окно Rename Timeline</h1>Рисунок 12.11. Диалоговое окно <b>Rename Timeline</b><br><br><div style="text-align:center;"><img src="image/risunok-12-11-dialogovoe-okno-rename-timeline_1.gif" alt="Диалоговое окно Rename Timeline"></div><br> Чтобы удалить ненужную анимацию, переключитесь на нее, использовав список анимаций, и выберите пункт <b>Remove Timeline, </b>находящийся в контекстном меню панели <b>Timelines </b>и в подменю <b>Timeline </b>меню <b>Modify. </b>Имейте, однако, в виду, что самую первую анимацию, создаваемую Dreamweaver при первом открытии панели <b>Timelines, </b>удалить нельзя — вместо удаления Dreamweaver ее просто очистит.<br> <br> В верхней части панели <b>Timelines </b>находятся несколько еще не знакомых нам элементов управления. Рассмотрим некоторые из них.<br> <br> Поле ввода <b>Fps </b>служит для задания частоты кадров анимации, определяющей скорость ее проигрывания. Эта величина измеряется в кадрах в секунду (по-английски — frames per second, или fps). Значение по умолчанию — 15.<br> <br> Флажок Autoplay вам уже знаком. Он сигнализирует Dreamweaver, что в код страницы нужно добавить сценарий, запускающий анимацию сразу же после того, как страница будет загружена в окне Web-обозревателя. По умолчанию этот флажок отключен, и включить его начинающие пользователи Dreamweaver часто забывают. Поэтому, если ваша анимация почему-то не работает, прежде всего, проверьте, включили ли вы этот флажок.<br> <br> Флажок <b>Loop </b>зацикливает анимацию. Если он включен, анимация будет проигрываться бесконечное число раз. Если его включить, Dreamweaver выведет еще одно из несметного множества своих сообщений; пока что просто закройте его. По умолчанию этот флажок выключен.<br> <br> И, наконец, группа из трех кнопок и поля ввода, расположенная правее комбинированного списка анимаций, служит для перемещения между отдельными кадрами. Давайте рассмотрим его подробнее (Рисунок 12.12).<br> <br> <p align="center"><br><br> <h1>Набор элементов</h1>Рисунок 12.12. Набор элементов управления, служащий для перемещения между кадрами анимации<br><br><div style="text-align:center;"><img src="image/risunok-12-12-nabor-jelementov-upravlenija_1.gif" alt="Набор элементов"></div><br> Кнопки, на которых изображены направленные в разные стороны стрелки, позволят вам перемещаться по отдельным кадрам анимации. Предположим, вы выделили первую ключевую точку анимации (начало траектории), находящуюся на первом кадре. Если вы щелкнете кнопку со стрелкой вправо, то переместитесь на второй кадр. При этом на втором кадре анимации в панели <b>Timelines </b>будет установлен маркер выделенного кадра, а анимированный заголовок в окне документов переместится на один "скачок". Щелкая дальше на кнопке со стрелкой вправо, вы будете перемещаться все дальше к концу траектории. Если же вы щелкнете на кнопке со стрелкой влево, то переместитесь на предыдущий кадр.<br> <br> Кнопку со стрелкой вправо вы можете использовать для предварительного просмотра созданной анимации прямо в окне, документа, не открывая страницу в Web-обозревателе. Для этого поставьте на нее курсор мыши, нажмите левую кнопку и не отпускайте. При этом вы будете перемещаться с кадра на кадр вперед по траектории; в панели <b>Timelines </b>по дорожке будет перемещаться маркер, а в окне документа — анимированный элемент. Отпустите кнопку, когда "прокрутите" анимацию до конца. К сожалению, более удобного способа предварительного просмотра анимации Dreamweaver не предлагает.<br> <br> Кнопка, на которой нарисована стрелка влево, упирающаяся в препятствие, служит для быстрого перемещения на самый первый кадр.<br> <br> Если вам нужно переместиться прямо на какой-то кадр анимации, известный по номеру, вы можете просто ввести этот номер в поле ввода, расположенное между кнопками-стрелками, и нажать клавишу <Enter>. Нужный кадр будет тотчас найден и выделен.<br> <br> С анимациями мы разобрались. Теперь давайте посмотрим, какие Dreamweaver предоставляет возможности для управления отдельными дорожками и кадрами.<br> <br> Вы можете вырезать и копировать дорожки в буфер обмена Windows, а также вставлять их в другие каналы текущей анимации или вообще в другую анимацию на любой Web-странице. Чтобы вырезать выделенную дорожку, выберите пункт <b>Cut </b>контекстного меню или меню <b>Edit </b>либо нажмите комбинацию клавиш <Ctrl>+<X>. Чтобы скопировать выделенную дорожку, выберите пункт <b>Сору </b>в этих же меню либо нажмите комбинацию клавиш <Ctrl>+<C>. Ну, а чтобы вставить находящуюся в буфере обмена дорожку в один из уже занятых каналов, добавив к уже существующей дорожке, выберите пункт <b>Paste </b>или нажмите комбинацию клавиш <Ctrl>+<V>. К сожалению, вставить дорожку в свободный канал вы не сможете.<br> <br> <br><br> <h1>Диалоговое окно Change Object</h1>Рисунок 12.13. Диалоговое окно <b>Change Object</b><br><br><div style="text-align:center;"><img src="image/risunok-12-13-dialogovoe-okno-change-object_1.gif" alt="Диалоговое окно Change Object"></div><br> Иногда бывает необходимо растянуть какой-либо участок дорожки на несколько кадров или, наоборот, сузить. Для этого служат пункты <b>Add Frame и Remove Frame, </b>находящиеся в контекстном меню и подменю <b>Timeline </b>меню <b>Modify. </b>Первый пункт вставляет кадр в то место на дорожке, где находится маркер выделенного кадра, а второй — удаляет оттуда кадр.<br> <br> Вот и все об анимации свободно позиционируемых элементов.<br><br> <h1>Предупреждение выводимое</h1>Рисунок 12.14. Предупреждение, выводимое Dreamweaver после добавления графического изображения в анимацию<br><br><div style="text-align:center;"><img src="image/risunok-12-14-preduprezhdenie-vyvodimoe_1.gif" alt="Предупреждение выводимое"></div><br> Внешне созданная для графического изображения дорожка анимации не отличается от таковой для свободно позиционируемого элемента. Поэтому автор советует задавать для каждого анимируемого элемента страницы уникальное имя. Имя графического изображения можно задать в поле ввода <b>Image </b>редактора свойств.<br> <br> Установим продолжительность анимации в пять секунд или 75 кадров (5 секунд умножить на 15 кадров в секунду). Для этого перетащим влево правую границу (вторую ключевую точку) дорожки до отметки "75" на шкале времени. И зададим новый графический файл, который отобразится во время достижения второй ключевой точки. Для этого проверим, выделена ли вторая точка, и изменим содержимое поля ввода <b>Src </b>редактора свойств так, чтобы оно указывало на файл Email2.gif, также находящийся в папке Pics, вложенной в папку Samplel. Данный файл будет отображен при достижении конца... нет, не траектории, а дорожки (ведь изображение не движется).<br> <br> Осталось включить флажок <b>Autoplay </b>и загрузить страницу 12.1.htm в Web-обозревателе. Через пять секунд после окончания загрузки страницы изображение, отображаемое в ней, изменится, — наша анимация работает.<br> <br> Если вам нужно последовательно сменить несколько изображений (фаз анимации), создайте соответствующее количество ключевых точек на дорожке. В каждой из этих ключевых точек установите нужное значение поля ввода <b>Src.</b><br><br> <h1>Комбинированный список анимаций</h1>Рисунок 12.2. Комбинированный список анимаций<br><br><div style="text-align:center;"><img src="image/risunok-12-2-kombinirovannyj-spisok-animacij_1.gif" alt="Комбинированный список анимаций"></div><br> Работой с несколькими разными анимациями мы займемся потом. А сейчас давайте создадим одну из них, самую простую.<br> <br> Чтобы анимировать какой-либо из доступных свободно позиционируемых элементов, нужно поместить его на шкалу времени, создав дорожку анимации. Для этого выделим требуемый свободный элемент, щелкнем по нему правой кнопкой мыши и выберем в контекстном меню пункт <b>Add to Timeline. </b>Вы также можете выбрать пункт <b>Add Object </b>контекстного меню временной линии или пункт <b>Add Object to Timeline </b>подменю <b>Timeline </b>меню <b>Modify. </b>И, наконец, вы можете просто нажать комбинацию клавиш <Ctrl>+<Alt>+<Shift>+<T>.<br> <br> После добавления в анимацию свободного элемента Dreamweaver выводит предупреждение, показанное на Рисунок 12.3. Этим он хочет сказать, что может управлять в процессе анимации следующими параметрами свободного элемента:<br> <br> <li> горизонтальной и вертикальной координатами левого верхнего угла (атрибуты LEFT и ТОР);<br> </li> <li> шириной и высотой (атрибуты WIDTH и HEIGHT), причем работать это будет только в Internet Explorer;<br> </li> <li> порядком перекрытия, иначе говоря, z-индексом (атрибут Z-INDEX); </li> <li> видимостью (атрибут VISIBILITY).<br> </li> <p align="center"><br><br> <h1>Предупреждение выводимое</h1>Рисунок 12.3. Предупреждение, выводимое Dreamweaver после добавления свободного элемента в анимацию<br><br><div style="text-align:center;"><img src="image/risunok-12-3-preduprezhdenie-vyvodimoe-dreamweaver_1.gif" alt="Предупреждение выводимое"></div><br> Это значит, что вы можете управлять местоположением, размерами и видимостью свободного элемента. Как видите, возможностей, предлагаемых Dreamweaver для анимации, даже больше, чем мы думали.<br> <br> Теперь закройте данное предупреждение нажатием кнопки <b>ОК. </b>Если вы не желаете больше его видеть, перед закрытием включите флажок <b>Don't show me this message again.</b><br> <br> Наконец, после всех треволнений, мы увидим в списке панели <b>Timelines </b>новую дорожку (Рисунок 12.4). Она отображается в виде светло-синей полосы, на которой написано имя свободного элемента, которому она принадлежит. По обеим сторонам данной полосы можно заметить светлые кружки. Это ключевые точки; их пока всего две: начало и конец траектории. Первая ключевая точка — начало — находится на первом кадре; это значит, что анимация для данного элемента начнется с первого кадра. Вторая ключевая точка — конец траектории — находится на пятнадцатом кадре; там наш анимированный элемент перестанет двигаться.<br> <br> <p align="center"><br><br> <h1>Новая дорожка анимации</h1>Рисунок 12.4. Новая дорожка анимации<br><br><div style="text-align:center;"><img src="image/risunok-12-4-novaja-dorozhka-animacii_1.gif" alt="Новая дорожка анимации"></div><br> Вы можете выбирать как ключевые точки (в данном случае они выделяются темно-синим цветом), так и саму дорожку (в этом случае она вся становится темно-синей), просто щелкая по ним мышью. Более того, вы можете щелкнуть по любому месту на дорожке анимации, выделив таким образом какой-либо ее кадр. В этом случае на временной шкале появится маркер выделенного кадра, показанный на Рисунок 12.5.<br> <br> <p align="center"><br><br> <h1>Маркер выделенного кадра</h1>Рисунок 12.5. Маркер выделенного кадра<br><br><div style="text-align:center;"><img src="image/risunok-12-5-marker-vydelennogo-kadra_1.gif" alt="Маркер выделенного кадра"></div><br> Если вас не устраивает местоположение дорожки анимации, вы можете легко его изменить. Для этого "ухватите" мышью дорожку (не ключевые точки!) и перетащите ее вдоль шкалы, пока она не займет нужную позицию. Например, вы можете заставить анимацию начинаться с десятого кадра, а заканчиваться — двадцать пятым. Также вы можете изменять длину дорожки, а значит, продолжительность анимации, перетаскивая на необходимую позицию теперь уже ключевые точки. И, разумеется, вы можете удалить ненужную дорожку, выделив ее и нажав клавишу <Del> или выбрав пункт <b>Remove Object </b>контекстного меню или подменю <b>Timeline </b>меню <b>Modify.</b><br> <br> Ну что ж, давайте проверим свежесозданную анимацию. Нажимаем клавишу <F12>, чтобы загрузить страницу defaiilt2.htm в Web-обозревателе, и... наблюдаем совершенно неподвижное изображение. В чем же дело?<br> <br> А дело в том, что начало и конец траектории движения нашего анимиро-ванного заголовка совпадают, т. е. никакой траектории нет, заголовок все время стоит в одной точке! Мы забыли задать траекторию!!!<br> <br> Ну, ничего. Это не страшно. Сейчас мы все исправим.<br> <br> Траектория в Dreamweaver задается следующим образом. Каждая ключевая точка представляет собой как бы "снимок" того состояния, в котором будет пребывать анимированный элемент. Выбрав ключевую точку, вы задаете нужные параметры свободно позиционируемого элемента (координаты, размеры и видимость), a Dreamweaver их запоминает, создавая тем самым данный "снимок". Исходя из этих снимков, он сам вычисляет все промежуточные состояния анимированного элемента, в которых он будет находиться между ключевыми точками. Поэтому, чтобы создать анимацию любой сложности, вам достаточно будет задать необходимые параметры нужных элементов страницы только в ключевых точках анимации. Dreamweaver сам сделает все остальное.<br> <br> Предположим, наш заголовок будет "выплывать" из нижнего правого угла страницы и перемещаться прямо на свое законное место. Поскольку траектория его движения очень проста (прямая линия), для ее задания мы нуждаемся всего в двух ключевых точках. В первой ключевой точке заголовок находится в нижнем правом углу страницы, а во второй — в ее верхней части, там, где он и должен быть. В этих точках мы и должны задать параметры нашего заголовка, точнее, всего два параметра — горизонтальную и вертикальную координаты. (Наш заголовок во время движения не меняет ни размеры, ни видимость.)<br> <br> Выделим первую ключевую точку, находящуюся в начале дорожки, щелкнув по ней мышью. Далее "захватим" заголовок (свободный элемент Header) мышью и переместим его в правый нижний угол страницы, в начало его траектории. Теперь выделим вторую ключевую точку. Здесь нам менять ничего не нужно, т. к. заголовок уже стоит на своем месте. Вот, собственно, и все.<br> <br> На Рисунок 12.6 показано то, что у нас получится после всех этих манипуляций. Хорошо видна тонкая серая линия траектории, отображаемая в окне документа, если в окне документа выделен анимированный элемент Header. Причем анимированный элемент будет находиться в том месте траектории, которое мы выделим на дорожке анимации. Так, если выделить вторую ключевую точку, он перескочит на свое законное место в верхней части страницы. А если выделить какую-либо промежуточную точку между первой и второй ключевыми точками, он займет соответствующее этой точке место.<br> <br> <p align="center"><br><br> <h1>Готовая траектория</h1>Рисунок 12.6. Готовая траектория анимированного элемента (выделена первая ключевая точка)<br><br><div style="text-align:center;"><img src="image/risunok-12-6-gotovaja-traektorija-animirovannogo_1.gif" alt="Готовая траектория"></div><br> Вот теперь можно и проверить наше творение. Загрузите получившуюся страницу в Web-обозревателе и посмотрите, что получится. А получится... все то же самое — опять-таки неподвижный заголовок. Что же мы на этот раз забыли?<br> <br> Чтобы анимация запустилась сразу после загрузки страницы Web-обозревателем, Dreamweaver должен создать небольшой сценарий, который, собственно, ее и запускает. Но, по умолчанию, он этого не делает. Он предполагает, что вы хотите, чтобы анимация проигрывалась в ответ на действие пользователя, например щелчок по изображению. Но нам-то нужно, чтобы заголовок начинал свой путь сразу же, как только страница будет загружена. Для этого нам придется сделать соответствующие установки.<br> <br> Сделать их очень просто. Вернемся в панель <b>Timelines </b>и включим флажок <b>Autoplay, </b>расположенный в верхней части этой панели. Dreamweaver, по своему обыкновению, выдаст очередное предупреждение, что сейчас в код страницы будет добавлен соответствующий сценарий. Избавьтесь от этого предупреждения, нажав кнопку <b>ОК; </b>если не хотите больше его видеть, можете включить перед этим флажок <b>Don't show me this message again. </b>Вот теперь все на самом деле готово. Загрузите страницу в Web-обозреватель и убедитесь в этом.<br> <br> Ура! Заработало!<br> <br> Анимированный заголовок бодро пробежит заданную нами траекторию и замрет прямо над своей тенью. Конечно, плохо, что тень существует независимо от него, но мы это вскоре исправим. Не совсем хорошо также и то, что заголовок перемещается под остальными свободно позиционируемыми элементами, но вы можете исправить это прямо сейчас, просто изменив его z-индекс. Сохраним полученную страницу. И продолжим...<br><br> <h1>Две дорожки анимации</h1>Рисунок 12.7. Две дорожки анимации<br><br><div style="text-align:center;"><img src="image/risunok-12-7-dve-dorozhki-animacii_1.gif" alt="Две дорожки анимации"></div><br> Для тени мы не будем создавать траекторию движения, т. к. она не движется, а стоит на месте. Она должна просто появляться, когда заголовок "дойдет до точки". Поэтому никуда ее не перемещайте. А просто измените параметр видимости.<br> <br> Итак, в начале траектории движения заголовка (первая ключевая точка) тень должна быть невидимой. Поэтому выделите первую ключевую точку второй дорожки и задайте в редакторе свойств значение <b>hidden </b>для параметра <b>Vis. </b>Теперь тень останется невидимой до тех пор, пока мы не изменим значение параметра видимости во второй ключевой точке (конец траектории движения заголовка). Так как по умолчанию параметр <b>Vis </b>имеет значение <b>inherit </b>("наследование" видимости у родителя), а родитель (сама Web-страница) у нас видимый, специально задавать это значение во второй ключевой точке нам не нужно. На всякий случай проверьте, что на конце временной линии тень видима (параметр <b>Vis </b>должен иметь значение <b>inherit </b>или <b>visible).</b><br> <br> Сохраните результат вашей работы и откройте его в Web-обозревателе. Теперь тень будет скромно "прятаться", пока не "подъедет" ее "хозяин".<br> <br> Все! Надоели нам прямолинейные, как трамвайные рельсы, траектории движения наших элементов. Хотим чего-нибудь извилистого и зигзагообразного, как пресловутый путь к истине. Пусть наш заголовок в своем пути "наверх" обходит всю Web-страницу. Это будет выглядеть эффектнее, да и мы заодно проверим, так ли хорош этот Dreamweaver, как его расхваливают.<br> <br> Что ж, Dreamweaver достойно выдержит испытание извилистостью. И давайте в этом убедимся. Но сначала слегка удлиним траекторию, скажем, до 50 кадров. "Захватим" мышью вторую ключевую точку дорожки заголовка и переместим ее до соответствующего деления временной шкалы. И не забудем сделать то же самое с дорожкой элемента-тени!<br> <br> Вот теперь можно и попетлять.<br> <br> Как вы помните, ключевые точки, собственно, и задают траекторию движения анимированного элемента. Добавим также, что траектория его движения должна задаваться минимальным количеством ключевых точек. Для прямой, как мы уже убедились, вполне хватает двух точек, для изломанной линии — трех, а для окружности их понадобится, как минимум, десятка два, чтобы движение анимированного элемента выглядело более-менее плавным. В общем, Dreamweaver, приняв от вас набор ключевых точек, должен построить такую траекторию движения анимированного элемента, которая вам необходима. И количество таких точек, как указывалось, должно быть минимальным.<br> <br> Исходя из этого правила, построим новую траекторию движения нашего анимированного заголовка. Если вы хотите, чтобы он двигался по криволинейной траектории, проставьте на дорожке анимации достаточно большое количество ключевых точек. Проще всего сначала нарисовать нужную траекторию на бумаге, расставить ключевые точки, а уже потом реализовывать это в Dreamweaver.<br> <br> Но, предположим, что все это мы уже сделали. Теперь нам необходимо реализовать траекторию, что называется, в коде, поместив несколько ключевых точек на дорожку анимации. Как это сделать?<br> <br> Прежде всего установите маркер выделенного кадра (см. Рисунок 12.5) на то деление временной шкалы, где будет находиться первая из вновь создаваемых ключевых точек. Для этого щелкните мышью по дорожке напротив нужного деления. Далее щелкните на этом месте правой кнопкой мыши и выберите в появившемся контекстном меню пункт <b>Add Keyframe. </b>Вы также можете выбрать одноименный пункт в подменю <b>Timeline </b>меню <b>Modify </b>или просто нажать клавишу <F6>. На дорожке в этом месте появится новая ключевая точка (Рисунок 12.8).<br> <br> <p align="center"><br><br> <h1>Ключевая точка помещенная</h1>Рисунок 12.8. Ключевая точка, помещенная на дорожке анимации (в данный момент выделена)<br><br><div style="text-align:center;"><img src="image/risunok-12-8-kljuchevaja-tochka-pomeshhennaja-na_1.gif" alt="Ключевая точка помещенная"></div><br> Теперь проверим, выделена ли наша новая ключевая точка, и, если нет, выделим ее. После этого активизируем окно документа и переместим заголовок в то место на траектории, где он должен находиться в настоящий момент. Тонкая серая линия, обозначающая траекторию движения заголовка, тотчас изогнется, следуя за заголовком (Рисунок 12.9).<br> <br> Остальные ключевые точки траектории помещаются на дорожку анимации точно таким же образом. Поместите их и задайте для них новое положение анимированного заголовка. Изобретите траекторию посложнее, чтобы заставить Dreamweaver работать по-настоящему. Если вы поставили ключевую точку не в том месте, в котором хотели, выделите ее и выберите пункт <b>Remove Keyframe </b>контекстного меню. (Также вы можете выбрать одноименный пункт в подменю <b>Timeline </b>меню <b>Modify.) </b>После этого протестируйте страницу с новой анимацией в Web-обозревателе. Вы увидите, что заголовок следует точь-в-точь по траектории, которую вы для него задали.<br> <br> <p align="center"><br><br> <h1>Положение анимированного</h1>Рисунок 12.9. Положение анимированного заголовка в новой ключевой точке<br><br><div style="text-align:center;"><img src="image/risunok-12-9-polozhenie-animirovannogo-zagolovka-v_1.gif" alt="Положение анимированного"></div><br> Здесь есть один интересный момент. Вы можете удивиться, что мы зачем-то создавали на дорожке анимации новые ключевые точки вместо того, чтобы поставить маркер на нужный кадр и просто переместить на необходимое место анимированный заголовок. Однако в этом случае мы переместили бы на другое место всю траекторию движения нашего заголовка, вместе с начальной, конечной и всеми промежуточными ключевыми точками. Попробуйте так сделать — и вы сами все поймете.<br> <br> Создание траектории вручную, путем расстановки на дорожке анимации ключевых точек и задания новых параметров анимированного элемента в этих ключевых точках годится только для относительно простых случаев. В самом деле, создайте-ка таким образом что-либо более сложное, чем простая дуга! К тому же, даже опытный Web-дизайнер далеко не с первого раза сделает именно ту траекторию, какая ему нужна. Как раз для таких случаев Dreamweaver предоставляет замечательную возможность просто нарисовать нужную траекторию в окне документа. При этом он сам сформирует дорожку анимации и расставит на ней требуемое количество ключевых точек.<br> <br> Давайте испытаем эту возможность. Только сначала выполним несколько подготовительных действий. Прежде всего, выделим последнюю ключевую точку (конец) траектории и запомним или запишем конечные координаты заголовка. Это нужно для того, чтобы впоследствии, когда мы создадим новую анимацию, точно его позиционировать. После этого удалим дорожку анимации заголовка, но оставим дорожку анимации его тени. Для этого выделим необходимую дорожку и выберем пункт <b>Remove Object </b>в контекстном меню. Теперь осталось только поставить заголовок в начало его предполагаемой траектории — и можно приниматься за дело.<br> <br> Выделим заголовок и щелкнем по нему правой кнопкой мыши. В появившемся контекстном меню выберем пункт <b>Record Path. </b>Вы также можете выбрать пункт <b>Record Path of Layer </b>контекстного меню панели <b>Timelines; </b>этот пункт становится доступным, если в окне документа выделен какой-нибудь свободный элемент. Кроме того, в подменю <b>Timeline </b>меню <b>Modify </b>также доступен пункт <b>Record Path of Layer. </b>Как видите, Dreamweaver предоставляет вам несколько возможностей сделать свой выбор.<br> <br> Что произойдет после этого? Ничего. Кроме того, что при перемещении заголовка за ним будет тянуться тонкая серая линия — Dreamweaver начнет отслеживать и записывать его траекторию. А как только вы отпустите кнопку мыши, устанавливая заголовок в конец его траектории, он создаст новую дорожку анимации. После этого вам останется только выставить координаты заголовка в его конечной точке, воспользовавшись значениями, записанными (запомненными) ранее, и "растянуть" либо "сузить" дорожку<br> <br> <p align="center"><br><br> <h1>в системе происходит при наступлении </h1>События<br><br> Событие в системе происходит при наступлении некого условия, внешнего или внутреннего. В зависимости от того, внутри или вне системы наступило это условие, различают внешние и внутренние события. К внешним событиям относятся щелчок мышью на странице или ее элементе, перемещение курсора мыши, нажатие клавиши на клавиатуре, изменение размеров окна Web-обозревателя и т. п. Внутренние события — это завершение загрузки Web-страницы, очередной "тик" системного таймера и т. п. Эта классификация событий сделана только для удобства обучения начинающих Программистов, ведь с точки зрения языка сценариев оба вида событий между собой не различаются и обрабатываются одинаково.<br> <br> Если брать во внимание только события, происходящие в Web-странице, то нужно иметь в виду, что события могут происходить как в самой странице, так и в отдельных ее элементах. В самом деле, если пользователь щелкает мышью на части страницы, не занятой какими-либо элементами, говорят, что событие происходит в самой странице. Если же пользователь щелкнет на графическом изображении или текстовом абзаце, событие происходит в этом графическом изображении или текстовом абзаце, т. е. сообщение о наступлении события "щелчок левой кнопкой мыши" в первом случае получит сама страница, а во втором — один из ее элементов.<br> <br> Что же нам делать с этими событиями, спросите вы? Обрабатывать.<br> <br> Обработка события заключается в реакции на них. А для реакции на них используются особым образом написанные сценарии, называемые обработчиками событий. Обработчики привязываются к тем или иным событиям, происходящим в каком-либо элементе страницы или самой странице. И делается это с помощью особого расширения HTML, специально предназначенного для поддержки Web-сценариев.<br> <br> В частности, если требуется, чтобы при наведении курсора мыши на изображение внизу появлялось его краткое описание, нужно сделать следующее. Под изображением помещается свободно позиционируемый элемент, содержащий текст описания, и этот элемент делается невидимым. Далее пишутся два сценария, привязанные к событиям, возникающим при наведении курсора мыши на графическое изображение и при "уводе" его прочь. Первый из этих сценариев делает элемент с описанием видимым, второй — невидимым. После этого написанные сценарии привязываются к соответствующим событиям, происходящим в элементе графического изображения. Вот и все.<br> <br> Не будем рассматривать конкретные детали реализации этого эффекта. Во-первых, "ни слишком зависят от выбора языка программирования, а первый (и, кстати, последний в этой книге) сценарий JavaScript мы напишем и изучим в главе 13. Во-вторых, в данный момент требуется анимировать элемент страницы, т. е. заставить его двигаться.<br> <br> В большинстве интерактивных Web-страниц большая часть сценариев представляет собой как раз обработчики событий. Именно они реализуют большую часть логики поведения страницы при взаимодействии с пользователем. (Хотя существует определенный процент сценариев, выполняемых сразу же после расшифровки; в основном, это код, производящий всяческие предустановки.) Такой подход, когда почти вся программа представляет собой обработчики событий, называется событийно-управляемым программированием.<br> <br> Но мы отвлеклись. Давайте все же вернемся к нашей анимации. А разговор о программировании продолжим в главе 13, посвященной как раз Web-сценариям и работе с ними в среде Dreamweaver.<br><br> <h1>Создание анимации в Dreamweaver</h1>Создание анимации в Dreamweaver<br><br> Вот и пришла пора нашей любимой программы — Dreamweaver. Сейчас будет рассказано, как она поможет в создании анимированного элемента. А в качестве элемента, который мы будем "оживлять", возьмем заголовок страницы default2.htm, созданной в главе 11.<br> <br> Но, прежде всего, условимся о терминологии, используемой в Dreamweaver. Знание ее поможет нам в дальнейшей работе. Итак:<br> <br> <li> набор анимированных элементов, чье движение синхронизировано относительно одной и той же временной шкалы, назовем анимацией. Это нужно нам, потому что одна Web-страница может содержать несколько независимых анимаций, т. е. наборов анимированных элементов, синхронизированных относительно независимых временных шкал;<br> </li> <li> полоска, проходящая из точки начала анимации одного из элементов в точку ее конца, пусть называется дорожкой анимации. Этот термин мы уже ввели и теперь его закрепим. Дорожка показывает, когда анимиро-ванный элемент начнет двигаться и когда он остановится;<br> </li> <li> свободное пространство на временной шкале анимации, которое может быть занято дорожкой, будет называться каналом. Количество доступных каналов определяет максимальное количество дорожек в одной анимации, а значит, максимальное количество входящих в нее анимированных элементов.<br> </li> Вот и все термины. Теперь откроем страницу default2.htm в окне документа и начнем...<br><br> <h1>Создание простейшей анимации</h1>Создание простейшей анимации<br><br> Для работы нам сразу же понадобится панель Timelines, в которой отображаются все анимации, созданные на Web-странице. Чтобы вывести эту панель на экран, включите пункт-выключатель <b>Timelines </b>в подменю <b>Others </b>меню <b>Window </b>или нажмите комбинацию клавиш <Alt>+<F9>. Сама панель <b>Timelines </b>показана на Рисунок 12.1.<br> <br> Как видите, панель <b>Timelines </b>находится в еще одном доке, занимающем нижнюю часть главного окна Dreamweaver. Это значит, что мы можем скрыть панель <b>Timelines </b>(и любые другие панели, которые вы поместите в док), если она нам не нужна, щелкнув по кнопке скрытия дока, а потом вернуть ее на экран.<br> <br> Большую часть этой панели занимает временная шкала, но проградуиро-ванная не в секундах, а в кадрах анимации — так удобнее. Значения времени (в кадрах) написаны на серой временной шкале, расположенной выше. Под этой шкалой отображаются все доступные каналы анимации, и занятые, и незанятые. В верхней же части панели находятся несколько элементов управления, предназначенных для задания некоторых параметров дорожек и самой анимации.<br> <br> <p align="center"><br><br> <h1>Управление анимациями</h1>Управление анимациями<br><br> Вы уже знаете, что Dreamweaver позволяет создавать несколько одновременно работающих и независимых друг от друга анимаций. Они могут работать как синхронно, так и асинхронно, создавая на Web-странице настоящие хороводы анимированных элементов. Конечно, если анимированных элементов на странице немного, вполне можно обойтись и одной анимацией. Но если их количество превышает десяток, значительно удобнее работать с несколькими независимыми анимациями, каждая из которых охватывает небольшую группу элементов, чем пытаться "запихать" их в одну анимацию. Впрочем, это дело вкуса...<br> <br> Сейчас давайте рассмотрим средства управления этими независимыми анимациями.<br> <br> Вы уже знаете, что в панели <b>Timelines </b>в данный момент отображается только одна анимация. Чтобы переключиться на другую, выберите соответствующий пункт уже знакомого вам комбинированного списка анимаций, показанного на Рисунок 12.2.<br> <br> Чтобы создать новую анимацию, выберите пункт <b>Add Timeline </b>контекстного меню панели <b>Timelines. </b>Также вы можете выбрать одноименный пункт подменю <b>Timeline </b>меню <b>Modify. </b>Если вы теперь откроете комбинированный список анимаций, вы увидите, что в нем появился новый пункт.<br> <br> По умолчанию Dreamweaver присваивает вновь создаваемым анимациям имена вида Тimelinе<номер>. Если же вы хотите дать какой-либо анимации более вразумительное имя, введите его прямо в комбинированный список анимаций. Другой способ — выберите пункт <b>Rename Timeline, </b>находящийся в контекстном меню панели <b>Timelines </b>и в подменю <b>Timeline </b>меню <b>Modify. </b>После этого на экране появится диалоговое окно <b>Rename Timeline</b> (Рисунок 12.11). Введите новое имя анимации в единственное поле ввода этого диалогового окна и нажмите кнопку <b>ОК.</b><br> <br> <p align="center"><br><br> <h1>в буфер обмена не только </h1>Внимание<br><br> Dreamweaver помещает в буфер обмена не только дорожку анимации, но и свободно позиционируемый элемент, для которого она была создана, со всеми его параметрами и содержимым. И если вы вставляете эту дорожку в другую страницу, которая уже содержит свободно позиционируемый элемент с таким же именем, Dreamweaver присваивает эту дорожку ему. Если же такого элемента на странице нет, он будет создан по образу и подобию скопированного.<br> <br> После того как вы вставили новую дорожку из буфера обмена, вы можете захотеть присвоить ее другому свободному элементу. Dreamweaver предоставляет вам и такую возможность. Выберите пункт Change Object в контекстном меню или подменю Timeline меню Modify. После этого на экране появится диалоговое окно Change Object, показанное на Рисунок 12.13. Выберите нужный элемент в раскрывающемся списке Object to Animate и нажмите кнопку ОК.<br> <br> <p align="center"><br><br> <h1>Введение в Webсценарии</h1>Введение в Web-сценарии<br><br> Зачем нужны сценарии? Чтобы преодолеть ограничения HTML. He все, конечно, — только одно.<br><br><br> <h1>Webсценарии</h1>Web-сценарии<br><br> Второй путь — внедрение в HTML-код особых программ, написанных на "классических" языках программирования, т. е. описывающих поведение элементов. Такие программы называются сценариями (или скриптами от англ, script — сценарий). (Почему они так называются? Можете считать, что эти программы описывают сценарии поведения какого-нибудь элемента при наступлении того или иного события.) Эти программы помещаются в HTML-код с помошыо особого, специально для такого случая стандартизированного комитетом WWWC парного тега <SCRIPT>. . .</SCRIPT>. Web-обозреватель, "расшифровывая" такой HTML-код, читает сценарии и либо выполняет их сразу же, либо "откладывает в долгий ящик", чтобы выполнить после наступления какого-либо события.<br> <br> Именно после "открытия" второго пути в интерактивность Всемирная паутина стала "живой", а многие Web-дизайнеры стали по совместительству еще и Web-программистами.<br> <br> Для того чтобы писать сценарии, были специально созданы несколько языков программирования, называемых языками написания сценариев (или скриптовыми языками). Наибольшую популярность из них получили всего два: JavaScript и VBScript.<br> <br> Язык JavaScript был разработан в фирме Netscape на основе известного "классического" языка программирования Java. Поэтому впервые поддержка языка JavaScript появилась именно в Web-обозревателе Netscape Navigator 2.0. Microsoft Internet Explorer начал поддерживать JavaScript с версии 3.0. Кроме того, в фирме Microsoft был разработан свой диалект JavaScript под названием JScript, отличающийся от "прародителя" только наличием нескольких новых команд. Поэтому эти два языка очень часто не различают, называя их одинаково — JavaScript.<br> <br> Язык VBScript был разработан в Microsoft в качестве "адекватного ответа" на JavaScript. Этот язык поддерживается только Internet Explorer, начиная с версии 4.0. Из-за своей "несовместимости" VBScript не получил большого распространения в Web, но завоевал прочные позиции в серверном программировании, а именно, написании активных серверных страниц Microsoft ASP (см. главу 15). В настоящее время для написания Web-сценариев он практически не применяется.<br> <br> Кроме JavaScript и VBScript, были попытки использования для написания Web-сценариев языков Perl, Python и некоторых других. Однако сколько-нибудь широкого распространения эти языки не получили.<br> <br> В настоящее время практически везде для написания сценариев применяется язык JavaScript. Он достаточно прост для изучения и предоставляет разработчику весьма обширные возможности. Кроме того, написанные на нем программы невелики по объему, что актуально в эпоху безраздельного господства медленных каналов связи.<br> <br> Для поддержки языка сценариев используется так называемый интерпретатор (или виртуальная машина) языка. Web-обозреватель выделяет сценарии из HTML-кода страницы и передает его на выполнение интерпретатору. Последний анализирует код сценариев, расшифровывает их и выполняет, передавая результат выполнения обратно Web-обозревателю.<br> <br> Для каждого языка написания сценариев, поддерживаемого Web-обозревателем, нужен свой отдельный интерпретатор. Благодаря такому подходу Web-обозреватель можно "научить" поддерживать сценарии, написанные практически на любом языке программирования, если для этого языка существует интерпретатор, написанный определенным образом.<br> <br> Языки сценариев называются интерпретируемыми, т. к. написанные на них программы расшифровываются при каждом выполнении. Этим они коренным образом отличаются от компилируемых языков (C++, Pascal, Java и многих других). Написанные на компилируемых языках программы расшифровываются однократно и преобразуются в машинный код, который выполняется самим процессором компьютера, без помощи интерпретатора. Для такого преобразования используются специальные программы, называемые компиляторами. Конечно, откомпилированный код выполняется значительно быстрее, но специфика Web-программирования такова, что в нем могут применяться только интерпретируемые языки.<br> <br> Ну, вот и все о языках программирования, на которых пишутся Web-сценарии. Теперь поговорим о том, как эти Web-сценарии выполняются.<br><br> <h1>Зачем нужна анимация</h1>Зачем нужна анимация<br><br> Как правило, анимация на Web-страницах преследует три цели:<br> <br> <li> оживить страницы;<br> </li> <li> привлечь к чему-либо внимание;<br> </li> <li> показать что-либо в учебных целях.<br> </li> <li> оэтому можно выделить три цели применения анимации:<br> </li> <li> развлечение;<br> </li> <li> реклама;<br> </li> <li> образование.<br> </li> Все остальные цели, на взгляд автора, можно свести к трем вышеприведенным. А о трех вышеперечисленных мы поговорим подробнее.<br> <br> Развлечения в Интернете — достаточно молодая отрасль Web-строительства. Изначально Интернет был создан как сеть для ученых, которым нужно было обмениваться текстовыми документами (сначала даже без графики) и связывать их в некое подобие структуры. Потом в Сеть пришел обыватель, и Web-дизайнеры ринулись угождать его вкусам. (Не будем спорить, насколько они возвышенны или низменны. Личное мнение автора: обыватель слишком разнолик, чтобы свести его к одному-единственному ярлыку.) В Интернете появились аудио и видео, на Web-страницы пришли сложная графика и анимация. Сейчас все эти "навороты" используются так часто, что ими уже мало кого можно удивить.<br> <br> Умелое и умеренное использование анимации значительно оживит ваши страницы. Важно только понять, какого эффекта вы хотите достичь, и сделать все для того, чтобы он был достигнут. Не переусердствуйте — применяйте анимацию только там, где она действительно нужна. И уж, не дай бог, ваша страница будет рябить, как экран телевизора с отключенной антенной, — в этом нет ничего хорошего. Никогда не забывайте принцип "содержимое превыше всего, все остальное — украшения", не позволяйте украшениям заслонить содержимое.<br> <br> Теперь реклама. Она появилась в Сети вместе с развлечениями, а значит, вместе с обывателем. Она уже здорово надоела, эта интернет-реклама, едва ли не больше, чем реклама телевизионная. Но отдадим должное рекламе (и интернетовской, и телевизионной) -- благодаря ей получили возможность существовать очень многие популярные некоммерческие проекты. Если реклама вдруг исчезнет, эти проекты пропадут сразу же вслед за ней.<br> <br> Традиционно для рекламных целей в Сети используются так называемые баннеры — небольшие графические изображения жестко стандартизированных форматов. Почти все баннеры создаются в формате "анимированный GIF", т. е. уже используют возможности анимации по привлечению внимания потенциального клиента. Рекламную анимацию, основанную на Web-сценариях, похоже, никто еще не применял, а если и использовал, то очень мало. Так что перед вами обширное непаханое поле деятельности, которое вполне может принести неплохие плоды.<br> <br> Анимация, основанная на свободно позиционируемых элементах и Web-сценариях, значительно компактнее любых видеофайлов, будь то анимированный GIF, видеофайлы форматов AVI или Apple QuickTime. Однако ани-мированные GIF-файлы поддерживаются абсолютно всеми Web-обозревателями, даже самыми старыми, поэтому и применяются так широко. Web-сценарии же будут работать только на достаточно новых Web-обозревателях (которыми, надо сказать, сейчас пользуется подавляющее большинство интернетчиков).<br> <br> Так или иначе, но попробовать Web-сценарии в рекламе стоит. И, кажется, кое-кто уже пробует.<br> <br> От рекламы плавно перейдем к образованию. Программы — учебные пособия, часто используемые в образовании, как правило, пишутся на компилируемых языках программирования и представляют собой обычные MS-DOS- или Windows-приложения. Учебные пособия, сделанные на основе "живых" Web-страниц, встречаются пока еще довольно редко, хотя это направление весьма перспективно. Такие учебные пособия можно очень быстро создавать и модифицировать; а по сравнению с обычными программами они исключительно компактны (ну сколько места могут занимать несложная Web-страница и пара изображений?). Вдобавок такие пособия прямо-таки просятся в Интернет, на Web-сайты, а значит, можно без особых проблем организовать модное ныне дистанционное обучение.<br> <br> Правда, данные учебные пособия имеют один огромный недостаток. Любой достаточно опытный интернетчик без труда сможет просмотреть исходный код самой страницы и ее Web-сценариев и, при желании, позаимствовать оттуда парочку ваших находок. Поэтому, если вы собираетесь применять в учебных пособиях какие-либо ноу-хау, лучше реализуйте их в обычной, откомпилированной программе, Взломать которую гораздо труднее.<br> <br> Вот три случая, когда анимация будет очень полезна. А в ряде случаев и необходима. Если же ваш случай к ним не относится, лучше обойтись обычными Web-страничками, больше внимания уделив их содержимому.<br><br> <h1> Использование пакета Dreamweaver </h1> <h1>Альтернативные технологии</h1>Альтернативные технологии<br><br> О недостатках Web-сценариев и их преодолении было написано в главе 12. Здесь же можно только кое-что добавить. А именно, опишем две альтернативные технологии, которые можно применять вместо сценариев для расширения функциональности Web-страниц.<br> <br> Прежде всего, давайте вспомним недостатки Web-сценариев, написанных на интерпретируемых языках. Таких недостатков два, и оба они могут быть критичными во многих случаях, когда Web-дизайнеру понадобится расширить функциональность своих страниц.<br> <br> <li> Невысокое быстродействие интерпретируемого программного кода.<br> </li> <li> "Открытость", т. е. легкочитаемость, интерпретируемого кода.<br> </li> Оба эти недостатка являются следствием самой природы языка JavaScript и никак не решаются. Единственное: их можно обойти, не создавая слишком сложных сценариев и не реализуя в них ноу-хау. И, если вам все же придется создавать сложные сценарии, содержащие какие-либо уникальные и, не дай бог, патентованные разработки, обратите внимание на альтернативные Web-сценариям технологии.<br> <br> А таких технологий всего две. И обе они являются близкими родственниками, что бы ни говорили пламенные приверженцы каждой из них. И обе они найдут свои области применения.<br> <br> Первая технология вам уже знакома — это элементы ActiveX, рассмотренные нами в главе 4, посвященной графическим изображениям и вообще внедренным элементам. Напомним, что это такое.<br> <br> Элементы ActiveX были разработаны как общий стандарт компонентов для использования в различных приложениях, Web-страницах и в качестве расширений самой операционной системы Windows. Эта технология представляет собой дальнейшее развитие технологии COM (Component Object Model — объектная модель компонентов), позволяющей встраивать одни программы (так называемые СОМ-серверы) в другие (СОМ-клиенты или СОМ-контейнеры). Элемент ActiveX представляет собой библиотеку DLL, содержащую сервер СОМ; как всякий СОМ-сервер, он регистрируется в особом разделе Реестра Windows, чтобы его смогли найти клиенты.<br> <br> Элемент ActiveX помещается на Web-страницу с помощью парного тега <OBJECT>. . .</OBJECT>. Внутри этого тега пишутся определения свойств элемента, выполненные с помощью набора одинарных тегов <PARAM>. Подробнее о работе с элементами ActiveX в среде Dreamweaver см. главу 4.<br> <br> Элементы ActiveX создаются на компилируемых языках программирования, поэтому реализованный у них код работает очень быстро и почти не поддается "взлому". Распространяются они по Сети в виде дистрибутивных файлов, представляющих собой файл-архив, содержащий все необходимые для работы элемента ActiveX файлы. Как правило, Web-обозреватель, если нужный ему элемент ActiveX на компьютере не установлен, сам загружает его дистрибутивный файл, руководствуясь значениями атрибутов тега <OBJECT>.<br> <br> Недостатками элементов ActiveX являются привязанность к операционной системе Windows и невысокая безопасность. Как утверждают знатоки, злоумышленнику ничего не стоит написать вредоносный элемент ActiveX и внедрить его на внешне безобидную Web-страницу. После того как этот элемент будет загружен на компьютер жертвы, он сможет натворить там много бед. Однако о конкретных примерах таких атак на клиентские компьютеры автору пока что ничего не известно. И все же, элементы ActiveX нашли достаточно ограниченное применение, в основном, в корпоративных интрасетях, построенных на платформе Windows.<br> <br> Вторая технология, о которой обязательно нужно рассказать и которая в наши дни, кажется, завоевала популярность, — это апплеты Java. Апплеты (калька с англ, applet— буквально, "приложеньице") — это аналоги элементов ActiveX, но написанные на языке программирования Java и не привязанные к какой-либо компьютерной платформе. По большому счету, они похожи на элементы ActiveX за несколькими исключениями, которые сейчас будут перечислены.<br> <br> Прежде всего, программный код апплетов Java выполняется не самим процессором компьютера, а интерпретатором (так называемой виртуальной машиной) Java. Этот особый программный код, называемый байт-кодом, не является командами центрального процессора. Он порождается компилятором Java, который как бы компилирует программу "не до конца". Такие "не-докомпилированные" программы выполняются значительно быстрее, чем исходный код JavaScript, но все же несколько медленнее, чем программы, откомпилированные "до конца", в "родные" команды процессора. С другой стороны, программы в байт-коде не привязаны к конкретному процессору, а значит, к конкретной компьютерной платформе, поэтому могут быть выполнены где угодно. Эта платформонезависимость и обусловила большую популярность Java-апплетов по сравнению с элементами ActiveX.<br> <br> Далее, интерпретатор Java-кода организует для апплетов своего рода "компьютер в компьютере", "внутри" которого они и исполняются. (Поэтому интерпретатор Java и называют виртуальной, "кажущейся" машиной.) "В реальный компьютер" апплеты "выбраться" оттуда не могут; благодаря этому даже вредоносный Java-апплет, созданный с явно преступными целями, не может серьезно набедокурить — интерпретатор его просто остановит, предупредив об этом пользователя.<br> <br> Апплеты Java помещаются на страницу с помощью парного тега <APPLET>. .. </APPLET>. Как и у тега <OBJECT>, внутри него находятся определения свойств апплета, выполненные с помощью набора одинарных тегов <PARAM>.<br> <br> Чтобы поместить на страницу апплет Java, работая в Dreamweaver, вы можете нажать кнопку <b>Applet</b>, находящуюся на вкладке <b>Media </b>панели объектов. Также вы можете выбрать пункт <b>Applet </b>подменю <b>Media </b>меню <b>Insert. </b>После этого на экране появится диалоговое окно <b>Select File, </b>где вы должны будете задать имя файла, содержащего код апплета (так называемый файл класса апплета Java). Помещенный на страницу апплет выглядит так.<br> <br> Вид редактора свойств при выбранном апплете Java . Мы рассмотрим подробно только те параметры, которые характерны именно для апплета. А таких параметров всего два.<br> <br> В поле ввода <b>Code </b>задается имя файла класса, реализующего данный апплет. Вы можете также щелкнуть по значку папки справа от поля ввода и выбрать нужный файл в диалоговом окне <b>Select File. </b>Также вы можете выбрать пункт <b>Code </b>контекстного меню апплета.<br> <br> Файл класса Java может содержаться как на вашем компьютере, так и на удаленном Web-сервере. Во втором случае Web-обозреватель скопирует файл класса и все файлы, необходимые для его работы, на компьютер клиента и поместит их в специальную папку. В дальнейшем, если этот же ап-плет понадобится снова, он будет загружать его оттуда вместо того, чтобы снова "тянуть" по Сети.<br> <br> В поле ввода <b>Base </b>вводится папка Web-сервера, где находится файл класса, реализующего апплет, и все необходимые для его работы файлы. Если вы пользовались диалоговым окном <b>Select File </b>для выбора файла класса, Dreamweaver сам подставит в поле ввода <b>Base </b>нужное значение.<br> <br> Остальные параметры (и соответствующие им элементы управления редактора свойств) сходны с параметрами элемента ActiveX, описанного в главе 4.<br> <br> Где же можно найти нужные элементы ActiveX и апплеты Java? Во-первых, вы можете сами их написать. Но для этого придется изучить либо Java, либо один из компилируемых языков программирования (C++, Pascal и т. п.). Во-вторых, вы можете поискать бесплатные или условно-бесплатные элементы ActiveX или апплеты, выложенные на специальных сайтах-архивах для общего использования. (Кстати, существуют аналогичные архивы и для JavaScript-сценариев.) В-третьих, вы можете их купить или заказать другому программисту.<br> <br> В любом случае, ответ на вечный вопрос "где достать?" выходит за рамки этой книги.<br> <p align="center"><br><br><br> <h1>Более сложный Webсценарий</h1>Более сложный Web-сценарий<br><br> В прошлой главе говорилось об анимации. Давайте же рассмотрим Web-сценарий, анимирующий какой-либо элемент страницы, а именно, заставляющий его двигаться по горизонтали взад-вперед. Вы увидите, что все это делается очень просто и довольно очевидно.<br> <br> <HTML><br> <head> <link rel="canonical" href="https://www.e-lave.ru//index.htm"/><br> <br> <ТIТLЕ>Анимация</ТIТLЕ> <br> <STYLE><br> <br> DIV { font-size: 72; font-weight: bold }<br> </STYLE> <br> <SCRIPT><br> <br> var dx,<b> </b>timer; dx = 2;<br> <br> function movelmage ( ) {<br> <br> livediv. style. pixelLeft += dx;<br> <br> if (livediv. style. pixelLeft + livediv. style. pixelWidth )<br> <br> document.body.clientWidth) dx = -dx;<br> if (livediv. style. pixelLeft <= 0) dx = -dx;<br> <br> }<br> <br> function setupAnimation() (<br> <br> timer = window. setlnterval ("movelmage ()", 100) }<br> <br> </SCRIPT> </HEAD> <BODY onLoad="setupAnimation() ; "><br> <br> <DIV lD="div1" STYLE="top: 50; left: 50; position: absolute;<br> <br> z-index: 1">J</DIV> <DIV ID="div2" STYLE="top: 50; left: 100; position: absolute;<br> <br> z-index: -1">a</DIV> <DIV ID="div3" STYLE="top: 50; left: 150; position: absolute;<br> <br> z-index: 1">v</DIV> <DIV ID="div4" STYLE="top: 50; left: 200; position: absolute;<br> <br> z-index: -1">a</DIV> <DIV ID="livediv" STYLE="top: 80; left: 0; width: 30;<br> <br> position: absolute"><IMG SRC="tips.gif "></DIV> </BODY> </HTML><br> <br> Сохраните этот код в файле под именем 13.2.htm. Графическое изображение tips.gif, использованное в этом примере, вы можете найти в папке Web, вложенной в папку Windows или WinNT. Поместите файл tips.gif в ту же папку, где находится файл 13.2.htm, после чего откройте последний в Web-обозревателе. К сожалению, Рисунок 13.2 не может передать движение.<br> <br> Рассмотрение кода нашего примера начнем с секции HTML-заголовка страницы (тег <head> <link rel="canonical" href="https://www.e-lave.ru//index.htm"/>). Здесь у нас находится небольшая таблица стилей с единственным стилем, переопределяющим шрифт тега <DIV>. Но, кроме того, здесь располагается код сценария. Он-то нас и интересует.<br> <br> Этот код включает определение двух функций: setupAnimation И movelmage. Первая функция выполняет некие предустановки, необходимые для правильной работы анимации, а вторая — осуществляет само движение аними-рованного элемента. (В дальнейшем вы тоже старайтесь давать вашим функциям "говорящие" имена.) Но, кроме этих функций, здесь есть и другой код, выполняющийся при загрузке страницы:<br> <br> var dx, timer; dx = 2;<br> <br> В этом коде мы объявляем две переменные: dx и timer. Первая из них задает значение приращения, "скачка" анимации, и с ней все понятно. Мы присваиваем ей значение 2; если движение анимированного элемента покажется вам слишком медленным, вы можете это значение увеличить. А вот второй переменной займемся поближе.<br> <br> <p align="center"><br><br> <h1>Изменение графического изображения (Swap Image)</h1>Изменение графического изображения (Swap Image)<br><br> Dreamweaver предоставляет вам возможность изменить рисунок, отображающийся в любом имеющемся на странице элементе графического изображения. Для этого используется поведение swap image; специальный Web-сценарий меняет значение атрибута SRC тега <IMG>. Это будет полезно во многих случаях.<br> <br> Выберите пункт <b>Swap Image </b>меню поведений. На экране появится диалоговое окно <b>Swap Image, </b>показанное на Рисунок 13.32.<br> <br> <p align="center"><br><br> <h1>Изменение изображенияэлемента</h1>Изменение изображения-элемента полосы навигации (Set Nav Bar Image)<br><br> О полосе навигации речь шла в главе 7, посвященной фреймам и фреймовому дизайну. Как вы помните, при создании полосы навигации Dreamweaver создает также множество сценариев, обеспечивающих смену изображений каждого элемента в ответ на различные события. Эти сценарии и представляют собой поведение set Nav Bar image.<br> <br> Как правило, вам самим не нужно создавать это поведение — это сделает за вас Dreamweaver. Если же это вам понадобится, выберите пункт <b>Set Nav</b> <b>Bar Image </b>в меню поведений. На экране появится диалоговое окно <b>Set Nav</b> <b>Bar Image </b>(Рисунок 13.20).<br> <br> Как видите, содержимое вкладки <b>Basic </b>этого окна почти совпадает с содержимым диалогового окна <b>Insert Navigation Ваг, </b>показанного на Рисунок 7.23. Элементы управления этой вкладки позволяют настроить выделенный вами элемент полосы навигации: задать для него изображения, "альтернативный" текст, интернет-адрес гиперссылки и др. Все это вам уже знакомо по главе 7.<br> <br> А вот содержимое вкладки <b>Advanced </b>данного окна позволяет вам задать кое-какие дополнительные настройки, затрагивающие другие элементы полосы навигации. Эта вкладка показана на Рисунок 13.21. В частности, с ее помощью вы можете задать изменение изображения другого элемента полосы, если посетитель щелкнет выделенный вами элемент.<br> <br> В раскрывающемся списке <b>When element <название выделенного элемента> is displaying </b>выбирается состояние, в котором находится выделенный вами элемент полосы навигации. Если выбран пункт <b>Over Image or Over While Down Image, </b>то элемент должен находиться в состоянии, когда посетитель поместил над ним курсор мыши. Если выбран пункт <b>Down Image, </b>то посетитель должен щелкнуть по этому элементу ("нажатое" состояние).<br> <br> <p align="center"><br><br> <h1>Изменение значения свойства (Change Property)</h1>Изменение значения свойства (Change Property)<br><br> Чтобы изменить в ответ на происшедшее событие значение какого-либо свойства того или иного объекта, воспользуйтесь поведением change Property. Выберите одноименный пункт меню поведений. На экране появится диалоговое окно <b>Change Property </b>(Рисунок 13.8).<br> <br> Прежде всего необходимо выбрать тег элемента страницы, свойство которого будет изменено. Это делается с помощью раскрывающегося списка <b>Туре of Object. </b>После этого выберите сам объект в раскрывающемся списке <b>Named Object. </b>Имейте в виду, что в этом списке отображаются имена элементов, чей тег выбран в списке <b>Type of Object; </b>для элементов, не имеющих уникального имени, отображается строка <b>unnamed. </b>Поэтому автор рекомендует для всех элементов страницы, которые вы собираетесь использовать в сценариях, задавать уникальное имя.<br> <br> <p align="center"><br><br> <h1>Язык JavaScript</h1>Язык JavaScript<br><br> Выше автор предупреждал, что не будет давать вам полный курс JavaScript. Эта книга не о JavaScript, а о Macromedia Dreamweaver MX, а все остальное вторично. Если вы хотите побольше узнать о JavaScript, принципах написания программ на этом языке и, вообще, о "классическом" программировании, найдите хорошие книги по этой теме. А мы вернемся к Dreamweaver.<br> <br> Но, для того чтобы вы поняли, что есть на самом деле Web-сценарии, необходимо провести хотя бы краткий ликбез. И сейчас он будет проведен.<br> <br> Давайте вернемся к уже знакомому нам HTML. Что он собой представляет? Набор тегов, описывающих внешний вид и (отчасти) структуру представления данных, которые будут отображаться в Web-обозревателе. HTML, как вы помните, язык описания данных.<br> <br> JavaScript же — язык описания алгоритмов обработки этих самых данных. Поэтому он содержит набор инструкций, предписывающих выполнение тех или иных действий над данными. Чтобы облегчить работу программиста, способ написания этих инструкций максимально приближен к обычной математической нотации, слегка "разбавленной" словами обычного английского языка. (Вот еще один повод взяться за английский.)<br> <br> Такие инструкции, описывающие действия над данными, называются выражениями. Выражения состоят из операторов и операндов; операторы описывают сами действия, а операнды — данные, над которыми будут производиться эти действия. Причем, операндами могут быть как константы (числа, строки, даты, одним словом, неизменяемые значения), так и переменные (специально отведенные ячейки для хранения промежуточных результатов вычислений).<br> <br> Давайте рассмотрим одно из таких выражений:<br> <br> <p align="center"> b = z / t;<br> <br> Это выражение делит значение переменной z на значение переменной t и результат помещает в переменную ь. Как вы уже поняли, знак "/" обозначает оператор деления, а знак "=" — оператор присваивания значения какой-либо переменной. Знак ";", помещенный в конце выражения, обозначает, собственно, его конец; встретив этот знак, интерпретатор JavaScript считает выражение законченным.<br> <br> Вот еще два выражения:<br> <br> <p align="center"> sum = a1 + а2 + а3 - 20; square = х * у;<br> <br> Первое выражение складывает друг с другом значения переменных a1, a2 и аЗ, после чего вычитает из результата 20 и помещает его в переменную sum.<br> <br> Второе выражение перемножает значения переменных к и у и помещает результат в переменную square.<br> <br> Чтобы управлять порядком вычисления выражения, вы можете использовать скобки:<br> <br> <p align="center"> s = (а + b) / (с - d);<br> <br> В этом выражении сначала будет вычислена сумма а и ь, потом — разность с и а, после чего сумма будет поделена на разность. Если бы мы не использовали скобки, то выражение имело бы вид:<br> <br> <p align="center"> s = a+b/c — d;<br> <br> При этом сначала было бы вычислено частное от деления ь на с, после чего к нему была бы прибавлена а, а затем из этой суммы вычлось бы d. Попробуйте подставить вместо а, ь, с и d реальные числовые значения и вычислить результаты этих выражений. Вы увидите, что они получатся разными.<br> <br> В JavaScript можно написать и так:<br> <br> <p align="center"> а = а + 1;<br> <br> и это выражение будет правильным. Оно предписывает интерпретатору извлечь значение из переменной а, увеличить его на единицу и поместить в ту же переменную. Это выражение можно записать и короче:<br> <br> <p align="center"> а += 1;<br> <br> или совсем сжато:<br> <br> Кстати, любая переменная перед тем, как будет использована, должна быть объявлена. Объявление переменных выполняется с помощью специального оператора объявления var:<br> <br> <p align="center"> var a1, a2, а3, х, у<br> <br> Объявляемые переменные просто перечисляются после этого оператора, после чего их можно использовать в сценарии. Такие переменные называются глобальными, т. к. могут быть использованы где угодно в программе.<br> <br> Говорилось, что переменные могут содержать какие угодно данные. В самом деле, посмотрите сюда:<br> <br> <p align="center"> а = 10;<br> <br> <p align="center"> s = "Строка символов";<br> <br> Здесь первой переменной присваивается числовое значение, а второй — строка (строковое значение). (Вообще, Web-сценарии, как правило, чаще обрабатывают текст, а не числа, так что в этом нет ничего необычного.)<br> <br> В общем, одна переменная всегда содержит одно значение. Если переменной присвоить новое значение, то старое значение пропадет. Но существует другой вид переменных, которые могут содержать несколько значений. Такие переменные называются массивами. Отдельные значения, содержащиеся в массиве, называются его элементами; доступ к элементам массива осуществляется с помощью так называемого индекса.<br> <br> var arr;<br> <br> arr[0] = 1;<br> <br> arr[1] = 2;<br> <br> arr[5] = arr[0] + arr[1];<br> <br> Как видите, индекс элемента массива указывается после его имени в квадратных скобках; этим массив и отличается от обычной переменной (скаляра). Сам массив объявляется точно так же, как обычная переменная, и со значениями его элементов можно делать то же самое, что и со значениями обычных переменных. Заметьте, что специально объявлять его как массив не нужно — как только вы при обращении к переменной укажете индекс элемента, интерпретатор JavaScript тут же преобразует переменную в массив.<br> <br> Для примера был создан одномерный массив. Но бывают и массивы двумерные:<br> <br> var arr2;<br> <br> агг2[0] [0] = 0;<br> <br> агг2[0][1] = 1;<br> <br> агг2[1] [0] = 2;<br> <br> агг2[1][1] = 3;<br> <br> Ключевыми словами называются специально зарезервированные слова, обозначающие некоторые операторы языка программирования. Так, условный оператор if-else состоит из двух ключевых слов. Он позволяет выполнить какое-либо выражение только в том случае, если становится верным какое-либо условие. Если условие верно, выполняется выражение, стоящее после ключевого слова if, а если неверно, — стоящее после ключевого слова else. Говорят, что оператор if-else организует ветвление.<br> <br> Ниже приведен пример использования этого оператора.<br> <br> if (x== 1)<br> <br> f = 2 else<br> <br> f = 12;<br> <br> Здесь, если значение переменной х равно единице, переменной f присваивается 2, в противном случае — 12.<br> <br> Если в какой-либо из частей оператора if-else нужно выполнить несколько выражений, используется так называемое составное выражение.<br> <br> if (х == 1) {<br> <br> f = 2;<br> <br> h = 3; } else { <br> <br> f = 12;<br> <br> h = 14; }<br> <br> Как видите, составное выражение состоит из нескольких простых выражений, помещенных внутрь фигурных скобок. Интерпретатор JavaScript считает их одним выражением.<br> <br> Существует также "урезанная" форма оператора if-eise, без части else. В этом случае, если условие неверно, никакого кода не выполняется.<br> <br> if (х == 1) ( f = 2; h = 3; )<br> <br> Существует также оператор-переключатель switch-case. Этот оператор заменяет множество операторов if-eise.<br> <br> switch (а) { case 1 :<br> <br> out = "Единица";<br> <br> break; case 2 :<br> <br> out = "Двойка";<br> <br> break; case 3 :<br> <br> out = "Тройка";<br> <br> break; default :<br> <br> out = "Другое число"; }<br> <br> Если значение переменной а равно 1, переменной out будет присвоено значение Единица (часть case l). Если значение переменной а равно 2, то переменная out получит значение двойка (часть сазе 2), и т. д. Если же переменная а содержит значение, не перечисленное в списке case, выполняется часть default, и out принимает значение другое число.<br> <br> Как видите, оператор-переключатель просто выполняет разные фрагменты кода в зависимости от значения переменной, находящейся в скобках после ключевого слова switch. Поэтому он и называется переключателем.<br> <br> Оператор цикла for позволит вам выполнить какое-либо выражение (простое или составное) нужное количество раз, т. е. организовать цикл со счетчиком. При этом на каждом проходе цикла содержимое переменной-счетчика будет сравниваться с конечным значением, и если оно его превышает, цикл немедленно завершается. В противном случае содержимое счетчика увеличивается или уменьшается на единицу, и выполняется новый проход цикла.<br> <br> Рассмотрим применение оператора for на примере.<br> <br> for (i = 1; i < 101; i++) { a = a * i; b = b + i;<br> <br> }<br> <br> Первая строка сообщает интерпретатору JavaScript следующее:<br> <br> <li> переменная i будет использоваться в качестве счетчика цикла, т. е. в ней будет находиться значение количества уже выполненных проходов цикла;<br> </li> <li>начальное значение счетчика — 1 (i =1);<br> </li> <li> конечное значение счетчика — 100, т. е. повторять цикл нужно, пока содержимое счетчика i остается меньше 101 (i < 101);<br> </li> <li> при каждом проходе цикла нужно будет увеличивать значение счетчика на единицу (i++; оператор ++ указывает увеличить значение какой-либо переменной на единицу, другими словами, инкрементировать, и поместить его в ту же переменную). (Оператор ++ называется оператором инкремента.)<br> </li> В результате выполнения приведенного выше выражения в переменной а будет находиться факториал от 100, а в переменной b — сумма от 1 до 100.<br> <br> Кроме цикла со счетчиком, в JavaScript можно организовать и циклы без счетчика, так называемые циклы с условием. Они выполняются до тех пор, пока остается истинным какое-либо условие. Это циклы do-while и while.<br> <br> Сначала рассмотрим цикл do-while.<br> <br> do {<br> <br> а = а * i + 2;<br> <br> i = ++i; } while (a < 100);<br> <br> Этот цикл будет выполняться, пока значение переменной а остается меньше 100. Заметьте, что условие проверяется после прохода цикла, поэтому этот цикл выполнится хотя бы один раз, даже если условие будет изначально ложно.<br> <br> В цикле while условие проверяется перед проходом цикла, поэтому, если условие изначально ложно, цикл не выполнится ни разу.<br> <br> while (a < 100) { a = a * i + 2; i = ++i; }<br> <br> Оператор завершения break немедленно завершает цикл, а оператор продолжения continue — продолжает цикл, т. е. прекращает выполнение текущего прохода и начинает выполнение следующего (конечно, если условие завершения цикла это допускает).<br> <br> while (a < 100) { i = ++i;<br> <br> if (i > 50) break; if (i < 5) continue; a = a * i + 2; }<br> <br> Попробуйте сами разобраться, как работает вышеприведенный пример.<br> <br> Если вам нужно выполнять в нескольких местах программы один и тот же фрагмент кода с разными числовыми значениями, вы можете создать на его основе функцию. Функция — это фрагмент кода, оформленный особым образом, который может быть вызван из различных мест программы и из других функций. Функция может принимать любое количество параметров и возвращать один результат, который может быть использован в дальнейших вычислениях.<br> <br> Давайте рассмотрим небольшой пример функции, увеличивающей переданное ей значение на два и возвращающей результат.<br> <br> function valuePlus2 (v) {<br> <br> var с;<br> <br> с = v + 2;<br> <br> return с; }<br> <br> Автор назвал нашу функцию valuePlus2 и передал ей единственный параметр v (см. в скобках после имени функции). Код, находящийся внутри функции, сначала объявляет локальную переменную с, "видимую" только внутри этой функции (вызвавшая функцию программа не сможет к ней обратиться). Далее этой переменной присваивается сумма значения переданного параметра v и 2. Последний оператор возвращает результат вызвавшей функцию программе (return — оператор возврата значения).<br> <br> Как можно использовать полученную функцию? Например, так:<br> <br> h = d + valuePlus2 (r) ;<br> <br> Здесь мы передаем функции vaiuePlus2 значение г и используем возвращенный результат в выражении. В частности, мы складываем его сам присваиваем результат п.<br> <br> Кстати, нашу функцию можно было написать значительно короче и оптимальнее. (Да, и здесь оптимизация!)<br> <br> function valuePlus2(v) { return v + 2; }<br> <br> Опытные программисты так и пишут. Во-первых, код становится проще и "прозрачнее". Во-вторых, что еще важнее, код становится меньше и быстрее.<br> <br> Функция может и не принимать параметров:<br> <br> function someFunc1() { return 2+2; }<br> <br> Функции могут вызывать друг друга:<br> <br> function valuePlus3(v) { return valuePlus2(v) + 1; }<br> <br> На этом краткий курс основ языка JavaScript подошел к концу. Нам осталось рассмотреть только объекты.<br><br><br> <h1>Как пишутся Webсценарии</h1>Как пишутся Web-сценарии<br><br> Вот и закончился ликбез по JavaScript и объектной модели документов. Пришло время поговорить о том, как же пишутся Web-сценарии.<br> <br> Прежде всего, выясним, как JavaScript-код помещается в HTML-код. Для этого служит парный тег <SCRIPT>. . .</SCRIPT>, внутри которого помещается код сценария. Вне этого тега помещать сценарий можно, но выполняться он не будет.<br> <br> Вообще, все Web-сценарии можно разделить на два вида: выполняющиеся при загрузке страницы (загрузочные) и вызывающиеся в ответ на событие (обработчики событий). В зависимости от того, является сценарий загрузочным или обработчиком, различается способ его реализации.<br> <br> Сценарии, выполняющиеся при загрузке страницы, представляют собой обычный код на JavaScript, помещенный в тег <SCRIPT>. Он имеет такой вид:<br> <br> <FORM ACTION="<a href="http://www.somesite.ru/cgi/prograra.p1">http://www.somesite.ru/cgi/prograra.p1</a>"> <br> <INPUT TYPE="text" NAME="txtDate"> <SCRIPT> var d;<br> <br> d = new Date ();<br> <br> document.forms[0].txtDate.value = d.toString(); </SCRIPT> </FORM><br> <br> Этот сценарий помещает в поле ввода txtDate значение текущей даты. (О формах и элементах управления см. главу 16.) Для этого он вызывает свойство value, отображающее значение, введенное в поле ввода. Заметьте, что для именования поля ввода мы использовали атрибут NAME, поэтому вышеприведенный код будет работать также и в Navigator 4.x.<br> <br> Этот сценарий будет выполняться непосредственно при загрузке страницы. Сначала Web-обозреватель загрузит и распознает тег <FORM>, потом — тег <INPUT>, а сразу за ним выполнит наш сценарий. Такие сценарии очень часто используются для занесения начальных значений в элементы управления и вообще для выполнения различных предустановок.<br> <br> Мы поместили код сценария сразу же за тегом, задающим поле ввода, к которому мы обращаемся. Если бы мы поместили сценарий перед тегом, Web-обозреватель не смог бы найти объект txtDate, т. к. он еще не был бы создан, и выдал бы сообщение об ошибке. Имейте это в виду, когда будете писать загрузочные сценарии.<br> <br> Если нужно, чтобы какие-либо предустановки выполнились перед тем, как будет загружен какой-либо "видимый" на странице HTML-код, выполняющий их сценарий помещается в секцию HTML-заголовка страницы (тег <head> <link rel="canonical" href="https://www.e-lave.ru//index.htm"/>). В основном, это касается кода, выполняющего предустановки для других сценариев, чаще всего, обработчиков событий.<br> <br> Теперь поговорим о сценарии обработчика событий. И рассмотрим пример такого обработчика:<br> <br> <head> <link rel="canonical" href="https://www.e-lave.ru//index.htm"/><br> <br> <SCRIPT><br> <br> function para_onClick() {<br> <br> para.style.color = "#FF0000"; }<br> <br> </SCRIPT> </HEAD> <BODY><br> <br> <P ID="para" STYLE="color: #0000FF" onClick="para_ondick();">Некий текст.</Р><br> <br> </BODY><br> <br> Это как раз пример сценария, помещаемого в секцию HTML-заголовка страницы. Он представляет собой функцию para_ondick, чей код меняет цвет текста абзаца para. Поместив сценарий в секцию HTML-заголовка, мы можем быть уверены, что Web-обозреватель обработает этот код перед тем, как будет загружена страница, и "отложит" определения функций в "долгий ящик", чтобы вызвать их впоследствии, при наступлении соответствующего события.<br> <br> А теперь обратимся к нашему текстовому абзацу. Что видим? Нечто странное... Откуда-то взялся новый, не знакомый нам атрибут onclick. Что он делает?<br> <br> Это не совсем атрибут. Вернее, совсем не атрибут, хотя и выглядит похоже. Таким способом в HTML к какому-либо событию, происходящему в элементе страницы, привязывается обработчик. Общий синтаксис такой "привязки" следующий:<br> <br> <Имя события>="<Код сценария обработчика>"<br> <br> В данном случае мы привязали вызов функции para_onclick в качестве обработчика к событию onclick, происходящему, когда пользователь щелкает мышью по этому абзацу.<br> <br> Вообще, код этого обработчика столь мал, что его можно без всяких последствий поместить прямо в тег <р>:<br> <br> <Р ID="para" STYLE="color: #0000FF" onClick="para.style.color = #'FF0000';">Heкий текст.</Р><br> <br> Таким образом, мы значительно уменьшим размер HTML-кода страницы, что нам совсем не помешает.<br><br> <h1>Какие ошибки бывают в программах</h1>Какие ошибки бывают в программах<br><br> Очень часто только что написанная программа содержит ошибки. Более того, если она имеет объем более десяти строк, будьте уверены — хоть одна ошибка там обязательно присутствует. (Уж не говоря о более сложных программах...) Проистекает все это из пресловутой "ненадежности" людей. В самом деле, компьютеры при всех их недостатках никогда не ошибаются сами по себе. Все компьютерные ошибки всегда обусловлены либо неблагоприятными внешними воздействиями (космическое излучение, скачки напряжения в сети, отсутствие дискеты в дисководе и т. п.), либо внутренними (ненадежная электроника, опять же, ошибки в программах). Только люди ошибаются без всяких причин.<br> <br> Ошибки в программах бывают двух видов:<br> <br> <li> Синтаксические ошибки — это неточности в написании самого программного кода. В результате синтаксической ошибки интерпретатор или компилятор не может правильно расшифровать выражение. В этом случае он выдает сообщение о синтаксической ошибке. Например, Internet Explorer огорошит нас таким сообщением — см. Рисунок 13.35.<br> </li> <p align="center"><br><br> <h1>Написание своих Webсценариев</h1>Написание своих Web-сценариев<br><br> Как видите, Dreamweaver предлагает достаточно ограниченный набор поведений и, стало быть, Web-сценариев, которые могут быть созданы на страницах. Конечно, они покрывают 95% нужд начинающего и даже опытного Web-дизайнера, и у вас, возможно, очень и очень нескоро появится потребность писать JavaScript-код самим. И все же...<br> <br> Но вспомните, что Dreamweaver — гибридный Web-редактор! Он предоставляет не только удобный интерфейс для визуального создания и редактирования Web-страниц, но и такой же удобный доступ к их исходному HTML-коду. Поэтому вы можете без труда "вписать" туда свои сценарии, реализующие все, что вашей душе угодно. Правда, Dreamweaver в этом случае никак облегчить вашу работу не сможет...<br><br> <h1>Объектная модель документа (DOM)</h1>Объектная модель документа (DOM)<br><br> А теперь настало время поговорить о классах и объектах Web-обозревателя подробнее.<br> <br> Давайте посмотрим на какую-нибудь Web-страницу. Что она собой представляет? Фактически, иерархию элементов. Мельчайшие элементы страницы, например текстовые абзацы, являются потомками более крупных и сложных элементов, например, свободно позиционируемых элементов. Свободные элементы, в свою очередь, могут находиться в других свободных элементах или непосредственно в самой странице. Получается весьма сложная многоуровневая структура, в которой одни элементы зависят от других.<br> <br> Описать такую структуру можно с помощью объектов. Точнее, сложной иерархии объектов, вложенных друг в друга и зависящих друг от друга. Такая структура называется объектной моделью документа (Document Object Model, DOM). Все современные программы Web-обозревателей представляют Web-страницу как иерархический набор объектов.<br> <br> Какое преимущество дает пользователям такой подход? Никакого. Все это рассчитано только на программистов, разрабатывающих Web-сценарии.<br> <br> Каждый из объектов, из которых состоит Web-страница, имеет набор свойств, предоставляющих доступ к значениям различных атрибутов соответствующего тега, методов, с помощью которых этим объектом можно манипулировать, и событий, которые могут в этом объекте происходить и которые можно обрабатывать. Это позволяет управлять практически любым элементом страницы, самой страницей и даже самим Web-обозревателем, используя специально написанные Web-сценарии.<br> <br> Например, именно таким образом на Web-странице создаются анимирован-ные элементы (см. главу 12). Также с помощью сценариев можно изменять цвета, параметры шрифта и даже само содержимое элементов страницы. Более того, так можно управлять и самим Web-обозревателем: открывать и закрывать вспомогательные окна, перемещаться взад-вперед по списку "истории" и даже принудительно загружать нужные Web-страницы без участия пользователя.<br> <br> Неужели вы думали, что Web-программисты пройдут мимо такой возможности! Если вы думаете, что пройдут, — вы плохо их знаете. Вспомните, например, что говорилось в предыдущей главе об анимации. Едва появилась возможность немного подвигать по странице тем или иным рисунком, как Web-программисты эту возможность реализовали. А сейчас анимацию поддерживают даже Web-редакторы, и Dreamweaver тому пример.<br> <br> Но хватит говорить на отвлеченные темы! Давайте все-таки займемся объектной моделью документа.<br> <br> Сначала выясним, каким образом можно получить доступ к нужному элементу. Для этого ему необходимо дать уникальное имя. Делается это с помощью атрибута ID или NAME. Атрибут ID поддерживается практически всеми тегами HTML, атрибут NAME — только некоторыми. К тегам, поддерживающим этот атрибут, относятся формы, элементы управления, фреймы, гиперссылки и некоторые другие.<br> <br> Но почему же нельзя пользоваться только атрибутом ID? Все дело в проклятой несовместимости Navigator 4.x и интернет-стандартов. Старые версии Navigator используют атрибут ID только для присвоения элементам стилей, а для задания имен признают только атрибут NAME. Видите, какая морока!..<br> <br> Дав с помощью атрибутов ID или NAME элементу страницы уникальное имя. вы можете обращаться к нему из сценария, вызывая его методы и свойства. Интерпретатор сам найдет нужный элемент по его имени. Для доступа к элементу страницы в Internet Explorer используется синтаксис:<br> <br> <Имя элемента, заданное в атрибутах ID или NAME>.<Свойство или метод><br> <br> Если же вы пишете сценарий для Navigator 4.x, делайте так:<br> <br> document["<Имя элемента, заданное в атрибуте NAME>"].<Свойство или метод><br> <br> Давайте приведем небольшой пример, поясняющий вышесказанное.<br> <br> <Р ID="para" STYLE="color: #0000FF">Некий текст.</Р><br> <br> Сначала мы создали текстовый абзац, назвали его para (обратите внимание на значение атрибута ID) и присвоили ему встроенный стиль, задающий цвет текста. Сейчас мы этот цвет текста изменим, воспользовавшись Web-сценарием.<br> <br> para.style.color = "#FF0000";<br> <br> Здесь нужны дополнительные пояснения. Дело в том, что каждый элемент страницы в объектной модели документа имеет внутренний объект style, дающий доступ к его встроенному стилю. Обратиться к этому объекту можно через одноименное свойство, что мы и сделали. А уж объект style предоставляет доступ ко всем атрибутам встроенного стиля через одноименные свойства. В данном примере для получения доступа к значению атрибута стиля color использовалось свойство color.<br> <br> Вы можете изменить выравнивание текста этого абзаца, обратившись к свойству align:<br> <br> para. align = "center";<br> <br> Свойство align предоставляет доступ к значению атрибута ALIGN тега <р>.<br> <br> К несчастью, вышеприведенный пример будет работать только в самых последних программах Web-обозревателей. Пресловутый Navigator 4.x не позволяет изменять внешний вид и содержимое элементов страницы после ее загрузки. Исключение составляют только графические изображения, фреймы и слои.<br> <br> А вот этот код будет работать везде:<br> <br> <IMG NAME=" some Image" SRC="image1.gif "><br> <br> document ["someImage"] .src = "image2.gif";<br> <br> Он меняет файл, содержимое которого отображается в элементе графического изображения, на другой. Для этого он присваивает иное значение свойству src объекта somelmage, предоставляющее доступ к атрибуту SRC тега<br> <br> <IMG>.<br> <br> Чтобы получить доступ к самой Web-странице, воспользуйтесь системным объектом document. В частности, вы можете задать цвет гиперссылок, воспользовавшись свойством linkColor, предоставляющим доступ к значению атрибута LINK тега <BODY>:<br> <br> document.linkColor = "#FF0000";<br> <br> Оба рассмотренных нами объекта представляют собой соответственно видимый элемент страницы и саму страницу. Оба этих объекта были созданы с помощью тегов HTML. Теперь же мы начнем рассмотрение объектов, не являющихся элементами страницы. Это объекты Web-обозревателя, не видимые пользователю.<br> <br> Объект document имеет внутренний объект location, предоставляющий доступ к интернет-адресу страницы и различным его частям. Доступен он через одноименное свойство. Воспользовавшись этим объектом, мы можем узнать, с какого интернет-адреса была загружена данная страница:<br> <br> address = document.location.href;<br> <br> выяснить имя файла этой страницы:<br> <br> filename = document.location.pathname;<br> <br> либо загрузить другую страницу:<br> <br> document.location.href = "<a href="http://www.othersite.ru/otherpage.htm">http://www.othersite.ru/otherpage.htm</a>";<br> <br> Объект window представляет текущее окно Web-обозревателя либо текущий фрейм, если страница загружена во фрейме. С помощью этого объекта вы можете, например, закрыть это окно:<br> <br> window.close();<br> <br> или заменить текст, отображаемый в его строке статуса:<br> <br> window.status = "Сейчас работает Web-сценарий!";<br> <br> Объект window имеет внутренний объект navigator, предоставляющий доступ к самой программе Web-обозревателя. Доступен он через одноименное свойство. Воспользовавшись этим объектом, мы можем выяснить, например, версию программы:<br> <br> version = window.navigator.appVersion; или название:<br> <br> programName = window.navigator.appName;<br> <br> Объект window имеет внутренний объект history, предоставляющий доступ к списку "истории" Web-обозревателя. Он доступен также через одноименное свойство. Воспользовавшись этим объектом, мы можем "путешествовать" по списку "истории" вперед:<br> <br> window.history.forward();<br> <br> и назад:<br> <br> window.history.back();<br> <br> В объектной модели документа существует также еще несколько других объектов, но рассматриваться они не будут. Эти объекты применяются достаточно редко и в весьма специфических случаях. Если же вы все-таки захотите узнать побольше об объектной модели документа, обратитесь к соответствующей литературе.<br><br> <h1>Объекты</h1>Объекты<br><br> Выше были рассмотрены два вида переменных: обычные переменные, иначе говоря, скаляры и массивы. Скаляры могут содержать только одно значение, массивы же — множество пронумерованных значений, доступ к которым можно получить по их номеру — индексу. И скаляры, и массивы находят свое применение в программах на JavaScript; нет смысла рассказывать, в каких случаях что применять, — это и так очевидно. Давайте лучше поговорим еще об одном виде переменных, которого мы до сих пор не касались.<br> <br> Это объекты.<br> <br> Объектом называется сложный тип данных, содержащий не какое-то одно значение, а целую сущность. Эта сущность может иметь набор свойств и методов, с помощью которых программа может ей управлять; свойство -это своего рода переменная, принадлежащая объекту, а метод — функция, также принадлежащая объекту и выполняющая над ним какие-либо действия. Объект (и сущность, содержащаяся в нем) представляет собой "вещь в себе"; ее внутренняя структура и принцип действия неизвестны использующему объект программисту.<br> <br> В качестве примера объекта можно рассмотреть прекрасно знакомый вам Web-обозреватель. У него есть свойство "адрес" и метод "открыть Web-страницу, которой принадлежит этот адрес". Вы можете присвоить этом свойству нужный адрес, а также можете его оттуда считать и присвоить какой-либо переменной или использовать иным способом:<br> <br> currentWebBrowser.address = "<a href="http://www.w3c.org">http://www.w3c.org</a>"; currAddr = currentWebBrowser.address + "/сss/";<br> <br> Именно такой синтаксис используется для доступа к свойствам: <имя объеках <имя свойства> (не забудьте поставить знак точки). В первом случае мы поместили в свойство address объекта currentWebBrowser строку с интернет-адресом комитета WWWC. Во втором случае мы извлекли из этого свойства находящийся в нем адрес, прибавили к нему справа текст "/сss/" и присвоили переменной currAddr. (Как видите, для слияния (или конкатенации) строк использовался оператор +.)<br> <br> Для вызова метода используется аналогичный синтаксис: <имя объекта>. <имя метода> (). Сейчас мы вызовем метод до вышеупомянутого объекта:<br> <br> currentWebBrowser.gо ();<br> <br> Метод до — не что иное, как обычная функция. В данный момент возвращенное ей значение игнорируется, но в других случаях оно может использоваться. Также метод, как и любая функция, может принимать параметры:<br> <br> currentWebBrowser.goTo("<a href="http://www.w3c.org">http://www.w3c.org</a>");<br> <br> Таким образом мы можем управлять Web-обозревателем. И — заметьте -ничего не зная о его внутреннем устройстве. Более того, мы не обязаны о нем знать. Использование объектов как раз и направлено на то, чтобы позволить программистам пользоваться различными инструментами и дополнительными компонентами, не зная их внутреннего устройства, а также создавать такие инструменты и компоненты для своих коллег.<br> <br> Говорят, что JavaScript — объектно-ориентированный язык программирования, т. к. использует объекты. Этим он отличается от обычных, процедурных языков, которые используют только функции.<br> <br> Каждый объект перед тем, как с ним можно будет работать, должен быть создан. Выполняется это с помощью оператора создания объекта new.<br> <br> var currentWebBrowser; <b>currentWebBrowser </b>= new WebBrowser();<br> <br> Здесь объявляется переменная currentWebBrowser и ей присваивается вновь созданный с помощью оператора new объект. Этот объект создан на основе класса WebBrowser, который является как бы шаблоном для создаваемых объектов. A currentWebBrowser также иногда называется экземпляром класса<br> <br> WebBrowser.<br> <br> Удалить ненужный объект можно с помощью метода delete.<br> <br> currentWebBrowser.delete();<br> <br> Имейте в виду, что ненужные объекты, созданные вами, всегда надо удалять, чтобы освободить ресурсы системы. Исключение составляют только истемные объекты, создаваемые самим интерпретатором или предоставляемые интерпретатору Web-обозревателем. Если вы попытаетесь удалить системный объект, интерпретатор выдаст сообщение об ошибке. О системных объектах мы поговорим ниже.<br> <br> Но каким же образом создаются классы объектов? Исключительно просто. Более того, если бы остальные языки объектно-ориентированного программирования увидели, как легко создаются классы в JavaScript, они бы умерли от зависти. Взглянем еще раз на выражение, с помощью которого создаются объекты:<br> <br> currentWebBrowser = new WebBrowser();<br> <br> Согласитесь, это сильно напоминает вызов функции. Но дело в том, что WebBrowser — и есть функция, только специальным образом написанная. Она называется конструктором класса. Давайте напишем конструктор для класса WebBrowser.<br> <br> function WebBrowser() {<br> <br> this.address = "<a href="http://www.server.ru/my_home_page.htm">http://www.server.ru/my_home_page.htm</a>";<br> <br> }<br> <br> Этот код создает в классе WebBrowser одно-единственное свойство address. Обратите внимание на синтаксис, с помощью которого это делается. В качестве имени класса используется ключевое слово this, обозначающее текущий класс. Интерпретатор JavaScript создает свойства класса сразу же при первом обращении к ним; вот и в нашем случае он создал свойство address и дал ему значение, присвоенное нами. Конструктор может принимать параметры:<br> <br> function WebBrowser(homePage) { this.address = homePage;<br> <br> }<br> <br> Таким образом мы можем передать конструктору класса адрес домашней страницы, с которой начнется путешествие по Интернету.<br> <br> var currentWebBrowser;<br> <br> currentWebBrowser = new WebBrowser("<a href="http://www.server.ru/home_page.htm">http://www.server.ru/home_page.htm</a>");<br> <br> "Но, позвольте! — скажете вы. — А как же создаются методы класса?" Тоже очень просто.<br> <br> Прежде всего, нам нужно написать функцию, реализующую этот метод.<br> <br> function fGoTo(pageAddress) { this.address = pageAddress;<br> <br> Мы назвали эту функцию fGoTo. Это имя состоит из буквы f (от англ. function — функция) и имени метода дото, который она реализует.<br> <br> Теперь перепишем функцию-конструктор таким образом, чтобы создать новый метод дото.<br> <br> function WebBrowser(homePage) {<br> <br> this.address = homePage;<br> <br> this.goTo = fGoTo; }<br> <br> Как видите, мы "присваиваем" написанную нами функцию fGoTo свойству дото класса WebBrowser. После этого можно вызывать метод дото этого класса.<br> <br> var currentWebBrowser;<br> <br> currentWebBrowser = new WebBrowser("<a href="http://www.server.ru/home_jpage.htm">http://www.server.ru/home_jpage.htm</a>");<br> <br> currentWebBrowser.goTo("<a href="http://www.w3c.org">http://www.w3c.org</a>");<br> <br> Только что вы научились создавать простейшие классы. Но на самом деле вам в очень редких случаях придется делать это. Куда чаще вы будете пользоваться уже готовыми системными классами, предоставляемыми самим интерпретатором JavaScript и другими программами, например Web-обозревателем. Поэтому давайте поговорим о системных классах.<br> <br> Системных классов, предоставляемых программисту интерпретатором, довольно много. Среди них есть, например, класс Date, предназначенный для работы со значениями даты и времени.<br> <br> var d;<br> <br> d = new Date () ;<br> <br> Только что мы создали объект класса Date. Так как мы не передали параметр в функцию конструктора этого класса, интерпретатор поместил в этот объект значение текущей даты. После этого можно, например, узнать номер дня недели:<br> <br> var dayNumber; dayNumber = d.getDay(};<br> <br> Или выяснить год:<br> <br> var year;<br> <br> year = d.getFullYear();<br> <br> Некоторые методы класса Date перечислены в табл. 13.1.<br> <br> Как видите, класс Date предусматривает полный набор методов для работы со значениями даты и времени. Другие системные классы также имеют достаточно большие наборы свойств и методов, которые мы не будем здесь рассматривать.<br> <br> <p align="center"> <b></b><br><br> <h1>Особые случаи создания поведений</h1>Особые случаи создания поведений<br><br> Итак, создание поведений и привязку их к элементам страницы и событиям мы рассмотрели. Но все это были весьма тривиальные случаи. Сейчас же поговорим кое о чем особенном...<br><br> <h1>Останов проигрывания анимации (Stop Timeline)</h1>Останов проигрывания анимации (Stop Timeline)<br><br> Поведение stop Timeline позволяет вам остановить проигрывание анимации, запущенной ранее поведением Play Timeline. Для его создания воcпользуйтесь пунктом <b>Stop Timeline </b>подменю <b>Timeline </b>меню поведений. На экране появится диалоговое окно <b>Stop Timeline </b>(Рисунок 13.31).<br> <br> <p align="center"><br><br> <h1>Открытие нового окна Webобозревателя (Open Browser Window)</h1>Открытие нового окна Web-обозревателя (Open Browser Window)<br><br> Это поведение аналогично поведению GO to URL за тем исключением, что оно открывает новую страницу в новом окне Web-обозревателя. При этом оно позволяет задать различные параметры нового окна: размеры, наличие инструментария и строки статуса и т. п.<br> <br> Выберите в меню поведений пункт <b>Open Browser Window. </b>На экране появится диалоговое окно <b>Open Browser Window, </b>показанное на Рисунок 13.16.<br> <br> <p align="center"><br><br> <h1>Отладка Webсценариев</h1>Отладка Web-сценариев<br><br> Но прежде, чем мы начнем говорить об отладке Web-сценариев, поговорим об ошибках и о том, как они выявляются.<br><br> <h1>Панель Behaviors</h1>Панель Behaviors<br><br> Вся работа с поведениями будет протекать в специальной панели <b>Behaviors. </b>Чтобы вызвать ее на экран, включите пункт-выключатель <b>Behaviors </b>меню <b>Window </b>или нажмите комбинацию клавиш <Shift>+<F3>. Панель <b>Behaviors </b>показана на Рисунок 13.3.<br> <br> <p align="center"><br><br> <h1>Переход на другую Webстраницу (Go to URL)</h1>Переход на другую Web-страницу (Go to URL)<br><br> Иногда бывает нужно загрузить в текущем окне Web-обозревателя другую страницу, не дожидаясь, пока это сделает посетитель. Для таких случаев Dreamweaver предлагает поведение GO to URL. Выберите в меню поведений соответствующий пункт; на экране появится диалоговое окно <b>Go To URL, </b>показанное на Рисунок 13.15.<br> <br> <p align="center"><br><br> <h1>Переход на заданный кадр анимации (Go To Timeline Frame)</h1>Переход на заданный кадр анимации (Go To Timeline Frame)<br><br> При создании анимации на Web-страницах иногда бывает очень полезно "перескочить" на заданный кадр анимационной дорожки. Например, вы можете создать гиперссылку или кнопку, позволяющую посетителю сайта "перемотать" анимацию в начало. Или ваша анимация может состоять из нескольких фрагментов, и вы хотите дать посетителю возможность просмотреть каждый из этих фрагментов отдельно, для чего также предусмотрели несколько кнопок. Да и мало ли может быть случаев, когда такое может понадобиться!<br> <br> Для таких случаев Dreamweaver предусматривает поведение GO TO Timeline Frame. Выберите одноименный пункт в подменю <b>Timeline </b>меню поведений. На экране появится диалоговое окно <b>Go To Timeline Frame </b>(Рисунок 13.14).<br> <br> <p align="center"><br><br> <h1>Перенаправление на другую страницу</h1>Перенаправление на другую страницу в зависимости от версии Web-обозревателя (Check Browser)<br><br> Несовместимость различных Web-обозревателей уже давно стала притчей во языцех. В качестве решения этой проблемы Web-дизайнеры очень часто создают различные версии одной и той же Web-страницы, предназначенные для разных Web-обозревателей. Иногда для того, чтобы перенаправить посетителя на соответствующую страницу, используются "говорящие" гиперссылки вида: "Пользователям Navigator 1.0 — сюда. А вы слышали: вышла версия 2.0!". Но чаще всего на главной странице сайта помещается Web-сценарий, определяющий версию программы Web-обозревателя и перенаправляющий посетителя на соответствующую ей страницу.<br> <br> Практически всегда такие сценарии выполняются при наступлении события onLoad объекта страницы (тег <BODY>), т. е. когда страница полностью загрузится. При этом посетитель перемещается на другую страницу автоматически, не делая никаких щелчков по гиперссылкам. (Конечно, если его программное обеспечение поддерживает Web-сценарии. В противном случае нужно все-таки будет предусмотреть на главной странице соответствующие гиперссылки, иначе он не попадет, куда нужно.)<br> <br> Автоматическое перенаправление на другую страницу стало в наше время настолько популярным, что все более-менее мощные Web-редакторы позволяют создавать такие штуковины. Dreamweaver не стал исключением. Если вы выберете пункт <b>Check Browser </b>меню поведений, вы в этом убедитесь.<br> <br> А пока посмотрим на диалоговое окно <b>Check Browser, </b>показанное на Рисунок 13.9. Что же предлагает нам Dreamweaver?<br> <br> А предлагает он нам три возможности: <br> <li> остаться на текущей странице;<br> </li> <li> перейти на "основную" страницу ("основная" - - в терминологии Dreamweaver);<br> </li> <li> перейти на "альтернативную" страницу ("альтернативная" — также в терминологии Dreamweaver).<br> </li> <p align="center"><br><br> <h1>Перетаскивание свободно позиционируемого</h1>Перетаскивание свободно позиционируемого элемента (Drag Layer)<br><br> Мы уже говорили об анимированных элементах страницы. Однако вы можете предоставить возможность пользователю самому перетаскивать свободно позиционируемые элементы по странице. Это может быть полезно, если вы делаете интерактивную игру, наподобие головоломки, учебное пособие или полноценную программу в виде Web-страницы.<br> <br> Поведение Drag Layer, реализующее перетаскивание свободных элементов, привязывается к событию onLoad тега <BODY>. Выберите одноименный пункт меню поведений; на экране появится диалоговое окно <b>Drag Layer, </b>показанное на Рисунок 13.12.<br> <br> <p align="center"><br><br> <h1>Подробнее о Webсценариях</h1>Подробнее о Web-сценариях<br><br> Здесь будет рассказано о задачах, успешно решаемых с использованием Web-сценариев. Далее будет дан краткий урок основ JavaScript, после чего мы с вами перейдем к рассмотрению стандартных сценариев, поддерживаемых Dreamweaver. Автор не ставит цели сделать из вас знатоков JavaScript -в конце концов, эта книга совсем о другом. Если же вы хотите побольше узнать об этом языке, найдите другие книги, благо сейчас их издано очень много.<br> <br> Итак, пора дать ответ на вопрос...<br><br> <h1>Показ и скрытие свободно позиционируемых</h1>Показ и скрытие свободно позиционируемых элементов (Show-Hide Layers)<br><br> Показ и скрытие свободно позиционируемых элементов страницы можно использовать в разных целях. Например, показывать различные подсказки при наведении курсора мыши на гиперссылки или графические изображения. Также можно на их основе создавать начальные заставки, показываемые посетителю сайта на самой первой его странице. (Почти всегда, однако, для этого используются фильмы форматов Flash, RealMedia или GIF. Но эту традицию стоит нарушить.) И, разумеется, появляющиеся и пропадающие в ответ на действия пользователя элементы страницы незаменимы при создании игр, обучающих пособий и программ, созданных на основе Web-страниц.<br> <br> Вы уже знаете, как создать на странице свободный элемент, как задать его размеры и сделать невидимым (до поры до времени). Поговорим теперь, как заставить его появляться и исчезать в ответ на события. А для этого Dreamweaver предоставляет поведение show-Hide Layers.<br> <br> Выберите пункт <b>Show-Hide Layers </b>в меню поведений. На экране появится диалоговое окно <b>Show-Hide Layers </b>(Рисунок 13.30).<br> <br> <p align="center"><br><br> <h1>Поведения и анимации</h1>Поведения и анимации<br><br> Вы познакомились с двумя, можно сказать, "детищами" Dreamweaver: анимацией и поведением. Они называются так потому, что не являются возможностями ни HTML, ни JavaScript, ни объектной модели документа DOM. И анимация, и поведения "придуманы" самим Dreamweaver, чтобы помочь вам создавать сложные Web-сценарии, решающие весьма непростые задачи. Вы работаете с анимациями и поведениями, используя удобный интерфейс Web-редактора, создаете их, изменяете и удаляете, a Dreamweaver за вашей спиной выполняет над кодом довольно сложные действия.<br> <br> Неудивительно, что анимации и поведения могут взаимодействовать. Вы уже знаете, как проиграть анимацию в ответ на какое-либо действие пользователя. Но, кроме того, вы можете привязать поведение к тому или иному кадру анимации, и когда системный таймер "дотикает" до соответствующей отметки шкалы времени, это поведение сработает. Например, таким образом вы можете заставить звуковой файл проигрываться в нужный момент, либо во время анимации показывать на странице скрытые до поры до времени свободные элементы.<br> <br> Давайте еще раз откроем панель <b>Timelines, </b>выбрав пункт <b>Timelines </b>подменю <b>Others </b>меню Window, или иным способом. И еще раз посмотрим на нее (см. Рисунок 12.1). Над серой линейкой с отметками времени (в кадрах) вы можете увидеть еще один канал анимации, пока еще нами не использованный. Это канал поведений. Он обозначен буквой В, от англ, behavior — поведение.<br> <br> Чтобы привязать к какому-либо кадру анимации поведение, сначала выберите необходимый кадр в канале поведений. В результате этот кадр будет выделен черным. Далее выберите в меню поведений нужный пункт, например, <b>Show-Hide Layers. </b>Как обычно, на экране появится диалоговое окно задания параметров выбранного поведения, в нашем случае — <b>Show-Hide Layers. </b>Введите параметры и нажмите кнопку ОК. И поведение, привязанное к кадру анимации, будет создано.<br> <br> Против соответствующего кадра анимации в канале поведений появится небольшой значок (Рисунок 13.33). А в списке панели <b>Behaviors </b>— новое поведение, привязанное к событию оnFramе<номер кадра> (Рисунок 13.34). Такого события в объектной модели документа не предусмотрено; Dreamweaver сам создал его так же, как создал анимации и поведения.<br> <br> <p align="center"><br><br> <h1>Предварительная загрузка графических</h1>Предварительная загрузка графических изображений (Preload Images)<br><br> Как вы помните из материала предыдущей главы, на Web-страницах часто используются анимированные картинки, представляющие собой обычный набор графических изображений, быстро сменяющих друг друга. Такая анимация в среде Dreamweaver создается очень просто, да и при "ручной" работе также не вызывает особой сложности у достаточно опытного Web-программиста. Проблема в другом: при загрузке страницы из Интернета загружается только одно, первое изображение, а остальные Web-обозревателю приходится подгружать в процессе проигрывания анимации, создавая значительные задержки при проигрывании анимации в первый раз.<br> <br> Решить эту проблему позволяет предварительная загрузка нужного набора изображений. Изображения загружаются с помощью специального сценария, но нигде не отображаются, а просто сохраняются в кэше Web-обозревателя. При проигрывании такой анимации Web-обозреватель берет нужные графические файлы из своего кэша, вместо того, чтобы загружать их из Сети.<br> <br> Для выполнения предварительной загрузки графических изображений могут применяться два подхода:<br> <br> <li>Статический, самый очевидный. На странице создается соответствующее количество графических изображений (тег <IMG>) размером 1x1 пиксел (или даже 0x0, если это сработает). В качестве значения атрибута SRC указывается имя одного из файлов, содержащих разные кадры анимации. При загрузке страницы Web-обозреватель тотчас загружает все нужные для анимации файлы и сохраняет их в своем кэше. Этот способ очень прост и надежен, если анимация содержит небольшое количество кадров. Однако, если кадров в анимации достаточно много, Web-обозреватель займет для сохранения этих изображений в памяти слишком много системных ресурсов, что не всегда приемлемо.<br> </li> <li>Динамический. Используется Web-сценарий, загружающий все эти файлы. При этом графические изображения не хранятся в памяти и, таким образом, не занимают системные ресурсы, стало быть, анимация может содержать сколько угодно кадров. Однако этот подход несколько сложнее из-за необходимости создания сценария.<br> </li> И все же для предварительной загрузки изображений рекомендуется использовать второй, динамический подход. И Dreamweaver вам в этом поможет, предоставив поведение Preload images. Очевидно, что это поведение привязывается к событию onLoad тега <BODY>. Чтобы создать его, выберите одноименный пункт в меню поведений. После этого на экране появится диалоговое окно <b>Preload Images, </b>показанное на Рисунок 13.19.<br> <br> <p align="center"><br><br> <h1>Привязка поведений к тексту</h1>Привязка поведений к тексту<br><br> Мы знаем, как привязать поведение к элементу страницы, например гиперссылке или графическому изображению. Но что делать, если мы хотим привязать его, к фрагменту текста в абзаце?<br> <br> Если вы готовы пожертвовать совместимостью с Navigator, можете использовать такой прием:<br> <br> <Р>Это <SPAN onClick="doSomething();">текст, по которому можно щелкать</span>.</Р><br> <br> function doSomething() {<br> <br> Что-то делаем. .. }<br> <br> Как видите, нужный фрагмент текста выделен тегом <SPAN> и привязан к этому тегу обработчик события onclick. Это работать будет, но только в Internet Explorer. Этот Web-обозреватель предоставляет Web-программисту доступ к любому элементу страницы и, соответственно, может обрабатывать события, происходящие в них.<br> <br> Это можно сделать и в среде Dreamweaver, воспользовавшись диалоговым окном <b>Tag Chooser. </b>Выделите нужный фрагмент текста и выберите пункт <b>Tag </b>меню <b>Insert </b>или нажмите комбинацию клавиш <Ctrl>+<E>. В левом списке окна <b>Tag Chooser </b>разверните ветвь <b>HTML Tags </b>и выберите пункт <b>Formatting and Layout, </b>далее выберите в правом списке пункт <b>span </b>и нажмите кнопку <b>Insert. </b>После этого выделенный вами фрагмент текста будет "взят" в тег <SPAN>. Вы можете поставить в него текстовый курсор и привязать к нему любое поведение.<br> <br> Кстати, так можно привязать поведение к любому тегу. Смотрите сюда:<br> <br> <FONT SIZE="+2" onClick="doSomething();">Это текст, по которому можно щелкать. </FONT><br> <br> И в этом случае Dreamweaver придет вам на помощь. Вам останется только поставить текстовый курсор на нужный текст и создать поведение.<br> <br> Но это будет работать только в Internet Explorer.<br> <br> У Navigator поддержка Web-программирования значительно ограничена. Он дает доступ к ограниченному набору элементов: гиперссылкам, графическим изображениям, внедренным элементам, фреймам, свободно позиционируемым элементам и еще кое-чему. К обычным абзацам текста и уж тем более элементам <SPAN> нашему брату Web-программисту путь заказан.<br> <br> Что делать?<br> <br> Есть один способ. Если уж Navigator требует гиперссылки, дадим ему гиперссылку.<br> <br> Взгляните на следующий код:<br> <br> <Р>Это <А HREF="javascript:;" onClick="doSomething();">текст, по которому можно щелкать</А>.</Р><br> <br> Мы преобразовали нужный нам фрагмент текста в гиперссылку, привязали к ней обработчик события onclick. В качестве значения интернет-адреса мы задали "javascript: ;", чтобы Web-обозреватель при щелчке по такой гиперссылке никуда не переходил. Можете проверить — такой код будет работать и в Internet Explorer, и в Navigator.<br> <br> Чтобы созданная нами гиперссылка совсем уж не походила на гиперссылку, вы можете вставить в Тег <А> стиль. Задайте атрибуту стиля text-decoration значение попе, чтобы отключить подчеркивание, а атрибуту color — значение цвета вашего текста. И пусть после этого кто-нибудь скажет, что это гиперссылка!<br> <br> Конечно, все вышеописанные манипуляции вы можете выполнить и в среде Dreamweaver. Вы можете ввести текст javascript:; в поле ввода <b>Link </b>редактора свойств, поставить в только что созданную гиперссылку текстовый курсор и воспользоваться панелью <b>Behaviors. </b>Автор описал все это в HTML, чтобы вам было понятнее.<br><br> <h1>Проигрывание аудиоклипа (Play Sound)</h1>Проигрывание аудиоклипа (Play Sound)<br><br> В свете последних тенденций к наполнению Интернета мультимедийной информацией Dreamweaver предоставляет вам возможность в ответ на какое-либо событие проиграть аудиоклип с помощью поведения Play Sound. Для этого выберите пункт <b>Play Sound </b>меню поведений. После этого на экране появится диалоговое окно <b>Play Sound </b>(Рисунок 13.17).<br> <br> <p align="center"><br><br> <h1>Простейший Webсценарий</h1>Простейший Web-сценарий<br><br> Давайте создадим простейшую Web-страничку, содержащую работающий Web-сценарий. Этот сценарий будет выводить текущие дату и время.<br> <br> <HTML> <br> <head> <link rel="canonical" href="https://www.e-lave.ru//index.htm"/><br> <br> <ТIТLЕ>Сегодня</ТIТLЕ> <br> </HEAD> <br> <BODY> Р><br> <br> <SCRIPT LANGUAGE="JavaScript"> var d;<br> <br> d=new Date ( ) ;<br> <br> document. write (d.toString () ) ;<br> </SCRIPT><br> <br> </BODY> <br> </HTML><br> <br> Сохраните этот код в файле под именем 13.1.htm и откройте в Web-обозревателе. Вы увидите, что на странице будут стоять сегодняшние дата и время (Рисунок 13.1).<br> <br> <p align="center"><br><br> <h1>Проверка наличия модуля расширения (Check Plugin)</h1>Проверка наличия модуля расширения (Check Plugin)<br><br> В главе 4, посвященной графическим изображениям и мультимедийным элементам, помещаемым на Web-страницы, говорилось о модулях расширения Web-обозревателя — специальных программах, работающих совместно с Web-обозревателем и предназначенных для обработки не поддерживаемых им непосредственно данных. Существуют модули расширения Web-обозревателя для проигрывания фильмов Flash, Shockwave, аудио- и видеоклипов форматов RealMedia, MP3 и т. п. Некоторые из модулей расширения поставляются в составе Web-обозревателей, другие же должны покупаться или загружаться из Интернета отдельно.<br> <br> Если вы используете в своих страницах мультимедийное или иное содержимое, не поддерживаемое ни самим Web-обозревателем, ни одним из поставляемых с ним модулем расширения, но для которого существуют модули расширения, доступные в Сети, вы должны выполнять проверку, установлен ли этот модуль на компьютере посетителя сайта.<br> <br> Обычно такая проверка выполняется прямо на Web-странице с данными, отображаемыми с помощью модуля расширения. Если такой модуль установлен, данные будут успешно отображены. В противном случае вы можете перенаправить посетителя на другую страницу с разъяснениями и предложением загрузить соответствующий модуль или теми же данными в более "удобоваримом" для Web-обозревателя формате. Как и в случае проверки версии Web-обозревателя, выполнять проверку установленного модуля расширения лучше всего сразу после загрузки страницы, привязав поведение<br> <br> К Событию<b> </b>onLoad тега <BODY>.<br> <br> Для выполнения такой проверки вы можете воспользоваться поведением check plugin, для чего вам достаточно будет выбрать одноименный пункт меню поведений. После этого на экране появится диалоговое окно <b>Check Piugin, </b>показанное на Рисунок 13.10.<br> <br> <p align="center"><br><br> <h1>Работа с поведениями</h1>Работа с поведениями<br><br> Здесь мы изучим приемы работы с поведениями в нашем любимом Dreamweaver. Изучать мы их будем на примере страницы default2.htm, созданной в качестве новой главной страницы первого сайта Sample site 1. Откройте ее в окне документа.<br><br> <h1>Текущая дата на Webстранице</h1>Рисунок 13.1. Текущая дата на Web-странице<br><br><div style="text-align:center;"><img src="image/risunok-13-1-tekushhaja-data-na-web-stranice_1.gif" alt="Текущая дата на Webстранице"></div><br> Давайте рассмотрим наш пример подробнее.<br> <br> Если мы отбросим весь маловажный код, у нас останется единственный текстовый абзац <р>, внутри которого помещен сценарий. Вот он:<br> <br> <р><br> <br> <SCRIPT LANGUAGE="JavaScript"><br> <br> var d;<br> <br> d=new Date();<br> <br> document. write (d.toString( ) );<br> <br> </SCRIPT><br> <br> Сам абзац не представляет собой ничего особенного. Сценарий — по большому счету, тоже. Мы уже познакомились с такими сценариями; они выполняются непосредственно при загрузке страницы и обычно производят различные предустановки. В нашем случае такой предустановкой является помещение в текстовый абзац строки, содержащей сегодняшние дату и время.<br> <br> Как это происходит? С помощью метода write объекта document. Автор не рассматривал этот метод, когда говорил об объекте document. Все объекты. входящие в объектную модель документа, имеют множество свойств и методов, многие из которых используются в сценариях довольно часто. А объем книги ограничен; мы не можем уделять слишком много места описанию объектной модели в ущерб Dreamweaver. Поэтому кое о чем автор умолчал.<br> <br> Теперь же настало время рассказать о методе write. Он помещает строку. переданную ему в качестве параметра, в то место документа, где встретилось выражение, вызывающее этот метод. Только и всего. В нашем случае он проделывает это со строковым значением текущей даты и помещает его внутри текстового абзаца <р>.<br> <br> Остальной код вполне понятен. Мы объявляем переменную, помещаем в него значение текущей даты в виде объекта класса Date и преобразуем это значение в строку методом tostring. Вы также можете для этого использовать метод toLocaleString, выполняющий это преобразование с учетом национальных настроек операционной системы, но такой код, возможно, будет работать не во всех Web-обозревателях.<br><br> <h1>Диалоговое окно Check Piugin</h1>Рисунок 13.10. Диалоговое окно <b>Check Piugin</b><br><br><div style="text-align:center;"><img src="image/risunok-13-10-dialogovoe-okno-check-piugin_1.gif" alt="Диалоговое окно Check Piugin"></div><br> Группа переключателей <b>Piugin </b>задает способ, которым выбирается модуль расширения. Если вы включите переключатель <b>Select </b>(он, кстати, включен по умолчанию), то сможете выбрать нужный модуль расширения в раскрывающемся списке, расположенном правее кнопки. В этом списке доступны пять пунктов:<br> <br> <li> <b>Flash </b>— модуль расширения Macromedia Flash; </li> <li><b>Shockwave </b>— Macromedia Shockwave; </li> <li><b>LiveAudio </b>— Creative LiveAudio; </li> <li><b>QuickTime </b>— Apple QuickTime;<br> </li> <li> <b> Windows Media Player </b>— стандартный проигрыватель мультимедийных файлов, поставляемый в составе Microsoft Windows.<br> </li> Как видите, в этом списке перечислены не все модули расширения, которые могут быть реально у вас установлены, а только "известные" Dreamweaver. Если же вам нужно проверить "существование" какого-то другого модуля, выберите переключатель <b>Enter </b>и введите имя нужного модуля расширения в поле ввода, расположенное правее этого переключателя.<br> <br> В поле "ввода <b>If Found, Go To URL </b>вводится интернет-адрес страницы, на которую будет осуществлен переход в случае, если нужный модуль расширения будет найден на компьютере. Если вы хотите, чтобы в этом случае посетитель оставался на текущей странице, оставьте это поле пустым; часто так и делают.<br> <br> В поле ввода <b>Otherwise, Go To URL </b>вводится интернет-адрес страницы, на которую будет осуществлен переход в случае, если нужного модуля расширения не будет найдено. Если вы хотите, чтобы в этом случае посетитель оставался на текущей странице, оставьте это поле пустым. Обычно, если какого-либо модуля расширения на компьютере клиента нет, выполняется переход на страницу с разъяснениями и предложением установить его, а если такой модуль есть, посетитель остается на той же странице и наблюдает данные, отображаемые с помощью этого модуля.<br> <br> Бывает так, что Web-сценарий, определяющий присутствие модуля расширения, не работает или работает некорректно. (В частности, так происходит в некоторых версиях Internet Explorer.) В этом случае выполняется автоматический переход на страницу, чей адрес указан в поле ввода <b>Otherwise, Go То URL. </b>Если же вы хотите, чтобы в этом случае всегда осуществлялся переход на страницу, чей интернет-адрес указан в поле ввода <b>If Found, Go To URL </b>(т. е. как будто проверка прошла удачно, и модуль расширения был бы найден), включите флажок <b>Always go to first URL if detection is not possible.</b><br> <br> Как обычно, кнопка <b>OK </b>сохраняет сделанные вами установки, а кнопка <b>Cancel </b>— отменяет их.<br><br><br> <h1>Диалоговое окно Control Shockwave or Flash</h1>Рисунок 13.11. Диалоговое окно <b>Control Shockwave or Flash</b><br><br><div style="text-align:center;"><img src="image/risunok-13-11-dialogovoe-okno-control-shockwave-or_1.gif" alt="Диалоговое окно Control Shockwave or Flash"></div><br> Прежде всего, выберите соответствующий нужному фильму элемент <EMBED> или <OBJECT> в раскрывающемся списке <b>Movie. </b>Имейте в виду, что в этом меню отображаются имена таких элементов; для тех из них, кто не имеет уникального имени, отображается строка <b>unnamed. </b>Поэтому автор рекомендует для всех фильмов, которыми вы собираетесь управлять из сценариев, задавать уникальное имя.<br> <br> Выбрав фильм, задайте действия, которое хотите над ним совершить. Это действие задается с помощью набора переключателей <b>Action. </b>Всего переключателей в этом наборе четыре:<br> <br> <li> <b>Play </b>— начинает проигрывание фильма;<br> </li> <li> <b> Stop </b>— останавливает его;<br> </li> <li> <b> Rewind </b>— перематывает его к началу;<br> </li> <li> <b> Go to Frame </b>— перематывает его к заданному в расположенном правее поле ввода кадру.<br> </li> Задав нужные параметры, нажмите кнопку <b>ОК.</b><br><br> <h1>Диалоговое окно Drag Layer (вкладка Basic)</h1>Рисунок 13.12. Диалоговое окно <b>Drag Layer </b>(вкладка <b>Basic)</b><br><br><div style="text-align:center;"><img src="image/risunok-13-12-dialogovoe-okno-drag-layer-vkladka_1.gif" alt="Диалоговое окно Drag Layer (вкладка Basic)"></div><br> В раскрывающемся списке <b>Layer </b>выбирается свободный элемент, который вы хотите позволить посетителю перемещать.<br> <br> Вы можете выбрать ограниченное или неограниченное движение выбранного свободного элемента. Это делается с помощью раскрывающегося списка <b>Movement. </b>Пункт <b>Unconstrained </b>задает неограниченное движение; в этом случае свободный элемент может перемещаться посетителем куда угодно. Пункт <b>Constrained </b>списка задает ограниченное движение; в этом случае свободный элемент может двигаться в пределах прямоугольной области, чьи размеры задаются с помощью набора полей ввода, которые в этом случае появятся правее списка <b>Movement:</b><br> <br> <li><b>Up</b> — задает вертикальную координату верхней границы области в пикселах;<br> </li> <li> <b>Down </b>— вертикальную координату нижней границы; </li> <li><b>Left </b>— горизонтальную координату левой границы; </li> <li><b>Right </b>— горизонтальную координату правой границы.<br> </li> Вы также можете предусмотреть некую точку на странице, куда будет "стремиться" перемещаемый свободный элемент. Координаты этой точки задаются в пикселах в полях ввода группы <b>Drop Target: Left </b>(горизонтальная) и Тор (вертикальная). Нажатие кнопки <b>Get Current Position </b>позволит вам поместить в эти поля ввода текущие координаты свободного элемента. В поле ввода <b>Snap if Within ... Pixels of Drop Target </b>задается расстояние в пикселах до вышеуказанной точки, при достижении которого перемещаемый элемент сам "приклеивается" к ней.<br> <br> Выше мы рассмотрели элементы управления, находящиеся на вкладке <b>Basic </b>диалогового окна <b>Drag Layer, </b>показанного на Рисунок 13.12. Если вы делаете простейшую головоломку, их вам будет достаточно. Если же хотите большего, переключитесь на вкладку <b>Advanced </b>(Рисунок 13.13).<br> <br> <p align="center"><br><br> <h1>Диалоговое окно Drag Layer (вкладка Advanced)</h1>Рисунок 13.13. Диалоговое окно <b>Drag Layer </b>(вкладка <b>Advanced)</b><br><br><div style="text-align:center;"><img src="image/risunok-13-13-dialogovoe-okno-drag-layer-vkladka_1.gif" alt="Диалоговое окно Drag Layer (вкладка Advanced)"></div><br> По умолчанию, чтобы перетащить свободный элемент на другое место, посетитель должен "ухватиться" мышью за любое его место. С помощью раскрывающегося списка <b>Drag Handle </b>и набора полей ввода правее его вы можете задать ограниченную прямоугольную область внутри этого элемента, за которую его можно будет таскать. Для этого выберите в данном списке пункт <b>Area Within Layer </b>и введите в поля ввода соответствующие координаты:<br> <br> <li> в поле ввода <b>L</b> — горизонтальную координату левой границы области в пикселах;<br> </li> <li> <b>Т</b> — вертикальную координату верхней границы; </li> <li><b>W</b> — ширину области; </li> <li><b>Н</b> — высоту области.<br> </li> Чтобы задать поведение по умолчанию, выберите пункт <b>Entire Layer </b>раскрывающегося списка <b>Drag Handle.</b><br> <br> С помощью флажка <b>While Dragging </b>и раскрывающегося списка <b>Bring Layer to Front, then </b>вы можете задать поведение свободного элемента при перетаскивании. Если включен флажок <b>While Dragging, </b>перетаскиваемый элемент будет находиться над всеми остальными свободными элементами, имеющимися на странице. При этом если в раскрывающемся списке <b>Bring Layer to Front, then </b>выбран пункт <b>Leave on Top, </b>то этот элемент так и останется "наверху" после отпускания, а если выбран пункт <b>Restore z-index, </b>то он будет помещен на ту же позицию в порядке перекрытия, на которой находился до начала перетаскивания.<br> <br> В поле ввода <b>Call JavaScript </b>вы можете ввести строку JavaScript-кода, например вызов написанной ранее функции, которая будет вызываться периодически во время перетаскивания элемента по странице. Этот код может, например, показывать координаты элемента в строке статуса окна Web-обозревателя.<br> <br> В поле ввода <b>When Dropped: Call JavaScript </b>вы можете ввести строку JavaScript-кода, которая будет вызвана после отпускания элемента. При этом если включен флажок <b>Only if snapped, </b>этот код будет вызван только тогда, когда перетаскиваемый элемент "приклеится" к конечной точке, чьи координаты были заданы на вкладке <b>Basic </b>диалогового окна <b>Drag Layer.</b><br> <br> Задав нужные параметры, нажмите кнопку <b>ОК.</b><br><br> <h1>Диалоговое окно Go To Timeline Frame</h1>Рисунок 13.14. Диалоговое окно <b>Go To Timeline Frame</b><br><br><div style="text-align:center;"><img src="image/risunok-13-14-dialogovoe-okno-go-to-timeline-frame_1.gif" alt="Диалоговое окно Go To Timeline Frame"></div><br> Прежде чем задать кадр анимации, нужно выбрать саму анимацию. Это делается в раскрывающемся списке <b>Timeline. </b>Номер же кадра вводится в поле ввода <b>Go to Frame. </b>После этого остается только нажать кнопку <b>ОК.</b><br> <br> Вы, наверно, удивились, почему мы не рассмотрели поле ввода <b>Loop ... times. </b>Потерпите, о нем еще будет рассказано, когда мы будем рассматривать специальные случаи создания поведений. Это будет ближе к конт главы.<br><br> <h1>Диалоговое окно Go To URL</h1>Рисунок 13.15. Диалоговое окно <b>Go To URL</b><br><br><div style="text-align:center;"><img src="image/risunok-13-15-dialogovoe-okno-go-to-url_1.gif" alt="Диалоговое окно Go To URL"></div><br> Сам интернет-адрес задается в поле ввода <b>URL. </b>Вы также можете нажать кнопку <b>Browse </b>и выбрать нужную страницу в диалоговом окне <b>Select File.</b><br> <br> В списке <b>Open In </b>задается фрейм, в котором будет открыта новая страница. Если ваша страница не представляет собой набор фреймов, в этом списке будет присутствовать единственный пункт <b>Main Window </b>(все окно), как в нашем случае.<br> <br> Задав нужные параметры, нажмите кнопку <b>ОК.</b><br><br><br> <h1>Диалоговое окно Open Browser Window</h1>Рисунок 13.16. Диалоговое окно <b>Open Browser Window</b><br><br><div style="text-align:center;"><img src="image/risunok-13-16-dialogovoe-okno-open-browser-window_1.gif" alt="Диалоговое окно Open Browser Window"></div><br> В поле ввода <b>URL to Display </b>задается интернет-адрес страницы, которая будет показана в новом окне. Вы можете нажать кнопку <b>Browse </b>и выбрать нужную страницу в диалоговом окне <b>Select File.</b><br> <br> В полях ввода <b>Window Width и Window Height </b>задаются соответственно ширина и высота нового окна. Заметьте, что координатами окна управлять вы не можете.<br> <br> С помощью группы флажков <b>Attributes </b>задаются дополнительные параметры нового окна:<br> <br> <li> <b>Navigation Toolbar </b>- включает или отключает наличие у нового окна главного инструментария с кнопками <b>Вперед </b>(Forward), <b>Назад </b>(Back), <b>Остановить </b>(Stop) и <b>Обновить </b>(Reload);<br> </li> <li> <b> Location Toolbar </b>— включает или отключает наличие у нового окна инструментария с полем ввода интернет-адреса;<br> </li> <li> <b> Status Bar </b>— включает или отключает наличие у нового окна строки статуса;<br> </li> <li> <b>Menu Bar </b>— включает или отключает наличие у нового окна системного меню;<br> </li> <li> <b> Scrollbars as Needed </b>— разрешает или запрещает появление у нового окна полос прокрутки, если его содержимое в нем не помещается;<br> </li> <li> <b> Resize Handles </b>— разрешает или запрещает пользователю изменять размеры нового окна.<br> </li> Имейте в виду, что если вы не задали размеров окна, то новое окно будет иметь случайные размеры и полный набор параметров, перечисленных выше (т. е. оба инструментария, строку статуса и т. д.). Если же вы зададите размеры, то новое окно, наоборот, не будет иметь ни одного из этих атрибутов, поэтому вам самим придется задавать нужные параметры, включая соответствующие флажки группы <b>Attributes.</b><br> <br> В поле ввода <b>Window Name </b>задается имя создаваемого окна. Впоследствии вы можете использовать это имя, например, при создании поведения GO to URL для вывода в нем новой Web-страницы.<br> <br> Кнопка <b>ОК </b>диалогового окна сохраняет сделанные вами установки, а кнопка <b>Cancel </b>— отменяет их.<br><br><br> <h1>Диалоговое окно Play Sound</h1>Рисунок 13.17. Диалоговое окно <b>Play Sound</b><br><br><div style="text-align:center;"><img src="image/risunok-13-17-dialogovoe-okno-play-sound_1.gif" alt="Диалоговое окно Play Sound"></div><br> Это диалоговое окно содержит одно-единственное поле ввода <b>Play Sound, </b>предназначенное для ввода имени аудиофайла, который будет проигран. Вы также можете нажать кнопку <b>Browse </b>и выбрать нужный файл в диалоговом окне <b>Select File. </b>После этого нажмите кнопку <b>ОК.</b><br><br><br> <h1>Диалоговое окно Popup Message</h1>Рисунок 13.18. Диалоговое окно <b>Popup Message</b><br><br><div style="text-align:center;"><img src="image/risunok-13-18-dialogovoe-okno-popup-message_1.gif" alt="Диалоговое окно Popup Message"></div><br> Введите текст предупреждения в область редактирования <b>Message </b>и нажмите кнопку <b>ОК.</b><br> <br> Вы можете использовать в тексте предупреждения любой JavaScript-код, заключив его в фигурные скобки. Например, чтобы вывести посетителю сайта текущую дату, вы можете использовать такой код: Сегодня {new Date()}<br> <br> Если же вам понадобится для каких-то целей ввести в текст фигурную скобку, предварите ее обратной косой чертой (/{ или /}).<br><br><br> <h1>Диалоговое окно Preload Images</h1>Рисунок 13.19. Диалоговое окно <b>Preload Images</b><br><br><div style="text-align:center;"><img src="image/risunok-13-19-dialogovoe-okno-preload-images_1.gif" alt="Диалоговое окно Preload Images"></div><br> Файлы, которые должны быть предварительно загружены, перечислены в списке <b>Preload Images. </b>Чтобы добавить файл в этот список, введите его имя в поле ввода <b>Image Source File </b>и нажмите кнопку со знаком "плюс". Вы также можете нажать кнопку <b>Browse </b>и выбрать нужный файл в диалоговом окне <b>Select File. </b>Чтобы изменить какой-либо файл, выберите его в списке, измените его имя в поле ввода <b>Image Source File </b>и после этого обязательно переключитесь на другой элемент управления, лучше всего — на сам список <b>Preload Images. </b>Чтобы удалить ненужный файл, выберите его в списке и нажмите кнопку со знаком "минус".<br> <br> Теоретически, с помощью этого поведения можно предварительно загружать не только графические, но и любые другие файлы. В частности, это могут быть аудиофайлы, которые будут впоследствии проигрываться в ответ на действия пользователя, или видеоклипы Flash. Хотя в документации по Dreamweaver этого почему-то не написано.<br> <br> После задания списка файлов, которые должны быть предварительно загружены, нажмите кнопку <b>ОК. </b>Кнопка <b>Cancel </b>позволит вам отказаться от сделанных изменений.<br><br> <h1>Анимированный элемент страницы</h1>Рисунок 13.2. Анимированный элемент страницы<br><br><div style="text-align:center;"><img src="image/risunok-13-2-animirovannyj-jelement-stranicy_1.gif" alt="Анимированный элемент страницы"></div><br> Уже не раз говорилось, что анимация всегда привязывается к системному таймеру. Это позволяет проигрывать одно и то же "кино" и на самых медленных, и на самых быстрых компьютерах с одинаковой скоростью. Как правило, делается это следующим образом: пишется специальная функция-обработчик события "тика" этого системного таймера, которая и заставляет анимированный элемент двигаться.<br> <br> Для того чтобы привязать функцию-обработчик к событию "тика" таймера, нужно использовать метод setintervai объекта window. Этот метод принимает в качестве параметра строку с именем функции-обработчика и интервал между "тиками" в миллисекундах, а возвращает особое значение, называемое идентификатором интервала. Впоследствии, когда анимация должна быть закончена, нужно будет вызвать метод ciearinterval объекта window, передав ему этот самый идентификатор. Но, т. к. у нас анимация проигрывается бесконечно, то и метод ciearinterval не вызывается, и идентификатор, хранимый в переменной timer, фактически не нужен.<br> <br> Функцию-обработчик мы привязываем к "тику" таймера в функции setupAnimation. Ее код приведен ниже.<br> <br> function setupAnimation() {<br> <br> timer = window.setlnterval("movelmage()", 100) }<br> <br> Эта функция, в свою очередь, является обработчиком события onLoad, возникающего сразу по окончании загрузки Web-страницы. В качестве параметров метода setlnterval МЫ Передаем ИМЯ функции movelmage И 100 -<br> <br> интервал между "тиками" в миллисекундах. Обратите также внимание на следующий код:<br> <br> <BODY onLoad="setupAnimation();"><br> <br> С его помощью к событию onLoad привязывается функция-обработчик.<br> <br> Обратимся теперь к функции, выполняющей движение анимированного элемента, — movelmage. Ее код выглядит так:<br> <br> function movelmage() {<br> <br> livediv.style.pixelLeft += dx;<br> <br> if (livediv.style.pixelLeft + livediv.style.pixelWidth >= document.body.clientwidth) dx = -dx;<br> <br> if (livediv.style.pixelLeft <= 0) dx = -dx; }<br> <br> Разберем его по строкам. Первая строка:<br> <br> livediv.style.pixelLeft += dx;<br> <br> или, как понятнее,<br> <br> livediv.style.pixelLeft = livediv.style.pixelLeft + dx;<br> <br> увеличивает значение свойства pixelLeft объекта style на значение переменной dx. Свойство pixelLeft представляет значение горизонтальной координаты элемента страницы в пикселах.<br> <br> Вторая строка:<br> <br> if (livediv.style.pixelLeft + livediv.style.pixelWidth >= document.body.clientwidth) dx = -dx;<br> <br> осуществляет проверку, дошел ли анимированный элемент до правого края страницы. Для этого мы сначала складываем значение уже знакомого свойства pixelLeft и нового свойства pixeiwidth, представляющего ширину элемента страницы в пикселах. После этого мы сравниваем получившуюся сумму со значением свойства ciientwidth объекта body и, если она стала больше этого значения, меняем знак у значения переменной dx. Свойство ciientwidth представляет ширину элемента страницы в пикселах, а объект<br> <br> body — саму Web-страницу, значит, выражение body.clientwidth возвращает значение ширины всей страницы в пикселах.<br> <br> И последняя, третья, строка:<br> <br> if (livediv. style. pixelLeft <= 0) dx = -dx;<br> <br> осуществляет проверку, дошел ли анимированный элемент до левого края страницы. Для этого мы просто сравниваем значение свойства pixelLeft с нулем и, если оно стало меньше нуля, изменяем знак значения переменной dx.<br> <br> После того как мы сменим знак значения dx, анимированный элемент "поедет" в противоположную сторону. Таким образом, анимация будет проигрываться бесконечно.<br> <br> Кстати, рассмотренный нами Web-сценарий не будет работать только в Navigator 4.x. Чтобы он работал в этой капризной программе, его нужно немного изменить. Измененный код страницы 13.2.htm по имени 13.3.htm приведен ниже. Подробно описываться он не будет — попробуйте разобраться с этим кодом сами, на досуге.<br> <br> if (livediv. style. pixelLeft <= 0) dx = -dx;<br> <br> <HTML> <head> <link rel="canonical" href="https://www.e-lave.ru//index.htm"/><br> <br> <TITLE>Анимация


    J
    v
    a
    '


    Правда, исправленный вариант страницы перестанет работать в других Web-обозревателях...

    Вот такая анимация...

    Диалоговое окно

    Рисунок 13.20. Диалоговое окно Set Nav Bar Image (вкладка Basic)


    Диалоговое окно





    Диалоговое окно

    Рисунок 13.21. Диалоговое окно Set Nav Bar Image (вкладка Advanced)

    Диалоговое окно

    В списке Also Set Image выбирается элемент полосы навигации, вид которого вы хотите изменить.

    В поле ввода То Image File вводится имя файла изображения для выбранного в списке Also Set Image элемента. Это изображение будет отображаться, если выбранный в списке элемент находится в "ненажатом" состоянии. Вы также можете щелкнуть кнопку Browse и выбрать нужный файл в диалоговом окне Select File.

    Если вы выбрали пункт Over Image or Over While Down Image в раскрывающемся списке When element <названш выделенного элемента> is displaying, то становится доступным также поле ввода If Down, To Image File. В нем задается имя файла изображения, которое будет отображаться, если выбранный в списке пункт находится в "нажатом" состоянии. Также здесь доступна кнопка Browse.

    Вы можете задать особое поведение сразу для нескольких элементов полосы навигации. Только не забудьте нажать кнопку ОК.

    Диалоговое окно Set Text of Status Bar

    Рисунок 13.22. Диалоговое окно Set Text of Status Bar

    Диалоговое окно Set Text of Status Bar

    Это диалоговое окно содержит единственное поле ввода Message, в котором вводится текст, отображаемый в строке статуса. Введя его, нажмите кнопку ОК.

    Вы можете использовать в тексте, отображаемом в строке статуса, любой JavaScript-код, заключив его в фигурные скобки. Например, чтобы вывести посетителю сайта текущую дату, вы можете использовать такой код:

    Сегодня {new Date()}

    Если же вам понадобится ввести в текст фигурную скобку, предварите ее обратной косой чертой (/{ или /}).

    Чтобы отобразить в строке статуса текст по умолчанию (он формируется самим Web-обозревателем -- обычно надпись "Готово" или адрес гиперссылки), задайте в диалоговом окне следующий текст:

    {window.defaultStatus}

    Свойство defaultStatus объекта window как раз и возвращает этот текст по умолчанию.



    Диалоговое окно

    Рисунок 13.23. Диалоговое окно Show Pop-Up Menu (вкладка Contents)

    Диалоговое окно

    Чтобы создать новый пункт меню гиперссылок, введите его текст в поле ввода Text. В поле ввода Link вводится интернет-адрес соответствующей

    пункту гиперссылки; также вы можете щелкнуть расположенный правее этого поля ввода значок папки и выбрать нужный файл в диалоговом окне Select File. А с помощью раскрывающегося списка Target - задать цель гиперссылки.



    Кнопка Indent Item

    Рисунок 13.24. Кнопка Indent Item вкладки Contents диалогового окна Show Pop-Up Menu

    Кнопка Indent Item

    Результат показан на Рисунок 13.25. В данном случае пункт Links станет единственным пунктом подменю, раскрывающемся при щелчке на пункте Others.

    Как видите, пункт Links отображается с отступом; это говорит о том, что он принадлежит подменю.



    Подменю в меню гиперссылок

    Рисунок 13.25. Подменю в меню гиперссылок

    Подменю в меню гиперссылок

    Чтобы вернуть пункт из подменю в основное меню или подменю более высокого уровня, нажмите кнопку Outdent Item (Рисунок 13.26).



    Кнопка Outdent Item

    Рисунок 13.26. Кнопка Outdent Item вкладки Contents диалогового окна Show Pop-Up Menu

    Кнопка Outdent Item

    Вкладка Appearance диалогового окна Show Pop-Up Menu (Рисунок 13.27) позволит вам настроить внешний вид меню гиперссылок.



    Диалоговое окно

    Рисунок 13.27. Диалоговое окно Show Pop-Up Menu (вкладка Appearance)

    Диалоговое окно

    С помощью раскрывающегося списка, расположенного выше всех остальных элементов управления, вы можете выбрать расположение меню гиперссылок: вертикальное (пункт Vertical Menu) или горизонтальное (Horizontal Menu).

    В раскрывающемся списке Font выбирается шрифт, которым набран текст пунктов меню. По умолчанию выбран пункт Default Font, обозначающий шрифт, заданный для выбранного вами в окне документа элемента страницы.

    В поле ввода Size задается размер шрифта, которым набран текст пунктов меню.

    С помощью кнопок-выключателей вверх и вниз вы можете сделать шрифт пунктов меню соответственно жирным или курсивным.

    Правее кнопок вверх и вниз находится набор из трех кнопок-переключателей, задающих выравнивание текста пунктов меню. Они задают соответственно левое выравнивание, центрирование и правое выравнивание в порядке слева направо.

    Группа селекторов цвета Up State задает цвета пунктов меню в "ненажатом" состоянии. Селектор цвета Text задает цвет текста, а селектор цвета Cell -цвет фона (фактически — цвет фона ячейки таблицы, которая и создает меню гиперссылок). Аналогично, группа селекторов цвета Down State задает цвета пункта меню, над которым посетитель поместил курсор мыши.

    Результаты применения заданных вами параметров вы можете увидеть в расположенной в нижней части диалогового окна панели предварительного просмотра.

    Вкладка Advanced диалогового окна Show Pop-Up Menu (Рисунок 13.28) позволит вам задать некоторые дополнительные параметры таблицы, создающей меню гиперссылок.

    Поля ввода и раскрывающиеся списки Cell Width и Cell Height задают соответственно ширину и высоту ячеек этой таблицы. Если вы выберете в раскрывающихся списках пункт Automatic, то соответствующий размер будет устанавливаться самим Web-обозревателем. Чтобы самим задать нужный размер, выберите в соответствующем раскрывающемся списке пункт Pixels и введите этот размер в пикселах в поле ввода, расположенное левее.

    Поля ввода Cell Padding и Cell Spacing задают соответствующие параметры таблицы.

    В поле ввода Text Indent задается величина отступа красной строки в пикселах.

    В поле ввода Menu Delay вводится задержка открытия меню и его подменю в миллисекундах.

    Включите флажок Show Borders, если хотите, чтобы границы меню и подменю были видимы.



    Диалоговое окно

    Рисунок 13.28. Диалоговое окно Show Pop-Up Menu (вкладка Advanced)

    Диалоговое окно

    В поле ввода Border Width вводится толщина границы меню и подменю в пикселах.

    Селектор цвета Border Color задает цвет границы меню и подменю. Также вы можете задать цвет "затемненной" стороны границы в селекторе цвета Shadow, а цвет "освещенной" стороны — в селекторе цвета Highlight.

    Результаты применения заданных вами параметров вы также можете увидеть в расположенной в нижней части диалогового окна панели предварительного просмотра.

    Вкладка Position диалогового окна Show Pop-Up Menu (Рисунок 13.29) позволит вам задать местонахождение меню гиперссылок относительно элемента страницы, к которому оно привязано.

    Набор из четырех больших кнопок-переключателей Menu Position позволит вам задать собственно местоположение меню гиперссылок. Эти кнопки заставляют меню появляться соответственно в правом нижнем углу, ниже, выше и в правом верхнем углу элемента, к которому оно привязано. (Порядок перечисления кнопок — слева направо.)

    Если вас не устраивает ни одно из четырех предопределенных местоположений меню, вы можете задать свое собственное. Для этого введите в поля ввода X и Y соответственно горизонтальную и вертикальную координаты верхнего левого угла меню.



    Диалоговое окно

    Рисунок 13.29. Диалоговое окно Show Pop-Up Menu (вкладка Position)

    Диалоговое окно

    По умолчанию меню гиперссылок убирается с экрана сразу же после того, как посетитель уберет курсор мыши с элемента страницы, к которому оно привязано. Если вы хотите, чтобы оно оставалось на экране, отключите флажок Hide Menu on onMouseOut Event.

    После задания всех параметров меню гиперссылок не забудьте нажать кнопку ОК.



    Панель Behaviors

    Рисунок 13.3. Панель Behaviors

    Панель Behaviors

    Большую часть этой панели занимает список уже созданных к этому време,-ни поведений, привязанных к выделенному в окне документов элементу страницы. Наименование тега элемента, к которому привязаны отображаемые в списке поведения (по умолчанию это сама страница), находится выше этого списка. Если вы выделите в окне документа другой элемент, в списке панели тотчас отобразятся привязанные к нему поведения. К сожалению, узнать, к какому элементу страницы привязаны поведения, иным способом нельзя.

    Список поведений представляет собой таблицу из двух колонок: Events (событие) и Actions (действие, происходящее в ответ на событие). Вы можете выбрать любое поведение в списке и произвести над ним какие-либо манипуляции.

    Если вы поставите текстовый курсор на саму Web-страницу, выделив ее таким образом, то увидите, что в списке уже присутствует одно поведение -

    Play Animation, привязанное к событию onLoad. Это поведение было добавлено самим Dreamweaver, когда мы включили флажок Autoplay в панели Timelines. Так что некоторые поведения создаются самим Dreamweaver без вашего ведома.

    Вы, наверно, уже заметили, что в столбце Events списка, правее отображаемого в нем значения, находится небольшая кнопка со стрелкой, направленной вниз. При нажатии на эту кнопку на экране появляется меню событий, в котором вы можете выбрать событие, в ответ на которое будет происходить заданное вами действие. Это меню показано на Рисунок 13.4. Таким образом, вы можете изменить событие, в ответ на которое выполняется какое-либо действие, например, заставить анимацию проигрываться в ответ на щелчок мышью.



    Диалоговое окно ShowHide Layers

    Рисунок 13.30. Диалоговое окно Show-Hide Layers

    Диалоговое окно ShowHide Layers

    Все имеющиеся на странице свободно позиционируемые элементы перечислены в списке Named Layers. Вы можете выбрать в этом списке любой из них и задать для него выполняемое действие: показ или скрытие.

    Для задания действия же служат три кнопки, расположенные под списком:

  • Show — показывает свободный элемент (при этом в соответствующей строке списка правее его имени появляется надпись "(show)");
  • Hide — скрывает свободный элемент (надпись "(hide)");
  • Default — восстанавливает видимость свободного элемента, заданную при его создании (надпись "(default)").
  • Выберите необходимый свободный элемент в списке и нажмите нужную кнопку. Чтобы отменить ошибочно выбранное действие, нажмите ту же кнопку еще раз. После этого нажмите кнопку ОК, чтобы сохранить сделанные установки.

    Диалоговое окно Stop Timeline

    Рисунок 13.31. Диалоговое окно Stop Timeline

    Диалоговое окно Stop Timeline

    Это диалоговое окно содержит только раскрывающийся список Stop Timeline. В этом списке выбирается анимация, которую нужно остановить. Пункт ** ALL TIMELINES ** позволяет остановить проигрывание всех анимаций, созданных на данной странице. После выбора анимации не забудьте нажать кнопку ОК.

    Диалоговое окно Swap Image

    Рисунок 13.32. Диалоговое окно Swap Image

    Диалоговое окно Swap Image

    Все имеющиеся на странице графические изображения перечислены в списке Images. Выберите нужное. После этого введите имя файла нового изображения в поле ввода Set Source to; также вы можете нажать кнопку Browse и выбрать нужный файл в появившемся на экране диалоговом окне Select File.

    Если вы хотите изменить сразу несколько изображений, выполните вышеприведенную последовательность действий для всех нужных элементов. Созданный Dreamweaver Web-сценарий выполнит все эти замены одновременно.

    Если включен флажок Preload Images (а он включен по умолчанию), Dreamweaver создаст еще один сценарий, выполняющий предварительную загрузку нужных файлов изображений. (Фактически для этого он создаст поведение Preload images.) Если вы отключите этот флажок, то сами должны будете выполнить их предзагрузку, либо мириться с задержками при изменении изображений.

    Если вы привязываете поведение swap image к событию onMouseOver, то Dreamweaver автоматически создаст поведение swap image Restore, восстанавливающее все изначальные изображения, и привязывает его к событию onMouseOut. Если вы не хотите, чтобы он так делал, отключите флажок Restore Images onMouseOut.

    Закончив работу, нажмите кнопку ОК.

    Кадр анимации в

    Рисунок 13.33. Кадр анимации в канале поведений, к которому привязано поведение


    Кадр анимации в





    Поведение привязанное

    Рисунок 13.34. Поведение, привязанное к кадру анимации, в списке панели Behaviors

    Поведение привязанное

    Таким образом, вы можете создать сколько угодно поведений, привязанных к кадрам анимации. Чтобы просмотреть поведения, привязанные к какому-либо кадру, просто выберите его в канале поведений панели Timelines. Имейте в виду, что выбирать можно только кадры, помеченные знаком, показанным на Рисунок 13.33. Также вы можете привязать к одному кадру несколько поведений, просто добавив их в список поведений при выбранном кадре.

    Вы можете изменить параметры привязанного к кадру анимации поведения, дважды щелкнув по соответствующей строке в списке поведений. Чтобы удалить ненужное поведение, либо удалите его из списка поведений, либо используйте пункт Remove Behavior контекстного меню панели Timelines или одноименный пункт подменю Timeline меню Modify.

    Вы можете удивиться, почему автор не использовал для создания поведений пункт Add Behavior контекстного меню панели Timelines. (Кроме того, в подменю Timeline меню Modify есть пункт Add Behavior to Timeline.) Если вы выберете этот пункт, Dreamweaver выведет на экран предупреждение, предлагающее вам воспользоваться для создания поведения тем самым путем, который мы описали. Зачем разработчикам Dreamweaver это понадобилось, непонятно.

    Ну, вот и все о создании поведений и о написании Web-сценариев вообще. Поговорим о следующем, последнем шаге работы над любой программой — об отладке.

    Сообщение о синтаксической

    Рисунок 13.35. Сообщение о синтаксической ошибке Internet Explorer

    Сообщение о синтаксической

  • Логические ошибки — это ошибки в логике работы программы. Программный код выглядит абсолютно правильным, но работает неправильно. Такие ошибки выявить и исправить намного сложнее.
  • Обычно программист сразу же после написания программы обязательно ее проверит, "погоняет" сам, чтобы прячущиеся в ней ошибки "вылезли" наружу, проявились. Этот процесс и называется отладкой. За отладкой обычно следует исправление найденных ошибок и новая отладка. И так повторяется довольно долго, пока программист не будет уверен, что ошибок в его творении больше нет.

    Не всегда, правда, это бывает так. Очень часто уже готовые программы содержат ошибки. Но разговор сейчас не об этом. Давайте поговорим, почему процесс отладки не всегда позволяет выявить все ошибки.

    Вообще-то все ошибки в достаточно сложной, многокомпонентной программе выявить невозможно. Дело в том, что программа может устанавливаться на компьютерах самых разных конфигураций, и для того, чтобы быть уверенным, что программа действительно будет на всех них работать, разработчик должен на всех них ее и проверить. Сами понимаете, что это физически невозможно. Другое дело, что программист может пропустить какую-то ошибку, не исправить ее. Здесь можно говорить как о его невнимательности, так и о его ограниченности. С невнимательностью все понятно. А вот с ограниченностью...

    Программный код на современных компьютерах выполняется с большой скоростью. Более того, этот код зачастую представляет собой "вещь в себе"; разработчик не может "влезть" внутрь его, посмотреть, что хранится в той или иной переменной, хотя часто без этого не обойтись. В этом его ограниченность.

    А человек всегда преодолевает свою ограниченность посредством созданных им машин. Поэтому были созданы специальные программы — отладчики, позволяющие "заглянуть" в программный код и увидеть, как он работает. Сейчас все средства для разработки программ имеют в своем составе такие отладчики.

    Не стал исключением и Dreamweaver. Он позволяет вам проверить программы, используемые в Web-страницах, а именно Web-сценарии. Если вы пишете сценарии сами, без отладчика вам будет трудно обойтись.

    Какие же возможности предлагают нам современные программы-отладчики?

  • Установка так называемых точек останова. Это особые метки в коде программы, на которых выполнение приостанавливается, после чего программист может посмотреть на результат работы своей программы. После этого выполнение программы может быть продолжено до ее конца или до следующей точки останова. Точки останова применяются, чтобы выяснить, что происходит в том или ином участке кода программы.
  • Пошаговое выполнение кода. Программист может выполнять программный код выражение за выражением и наблюдать за результатами выполнения. Пошаговое выполнение позволит точно узнать, как выполняется программа, и что происходит во время ее выполнения.
  • Просмотр значений переменных. Может пригодиться практически всегда.
  • Так, с отладчиками вообще мы разобрались. Обратимся теперь к конкретному представителю этого славного семейства - встроенному отладчику Dreamweaver.

    Меню событий панели Behaviors

    Рисунок 13.4. Меню событий панели Behaviors

    Меню событий панели Behaviors

    Чтобы отобразить в этом меню только события, поддерживаемые какой-либо программой Web-обозревателя, выберите пункт Show Events For. На экране появится небольшое подменю; включите пункт-выключатель, соответствующий нужной программе. Все пункты этого подменю перечислены в табл. 13.4.



    Диалоговое окно Play Timeline

    Рисунок 13.5. Диалоговое окно Play Timeline

    Диалоговое окно Play Timeline



    Меню поведений панели Behaviors

    Рисунок 13.6. Меню поведений панели Behaviors

    Меню поведений панели Behaviors

    Итак, чтобы создать новое поведение, сначала выделите нужный элемент страницы. Вы также можете привязать поведение к самой странице, для чего щелкните по пустому месту на ней или выберите тег в строке тегов. Затем выберите необходимый пункт в меню поведений. После этого на экране появится диалоговое окно задания параметров выбранного вами поведения. Такое окно для поведения Play Timeline показано на Рисунок 13.5. Задайте требуемые параметры и нажмите кнопку ОК. Диалоговые окна задания параметров для других поведений будут рассмотрены ниже.

    Кнопка со знаком "минус" позволит вам удалить выбранное в списке поведение. С таким же успехом вы можете нажать клавишу . He забудьте только выделить в окне документа нужный элемент страницы.

    Кнопки вверх и вниз перемещают выбранное в списке поведение на позицию вверх или вниз. Дело в том, что если несколько поведений привязано к одному и тому же событию, они выполняются в порядке следования в списке поведений. С помощью кнопок t и -I вы можете изменить этот порядок.

    Диалоговое окно Call JavaScript

    Рисунок 13.7. Диалоговое окно Call JavaScript

    Диалоговое окно Call JavaScript

    В этом окне находится единственное поле ввода JavaScript, в котором вводится нужный программный код. Это может быть, например, вызов какой-либо функции, написанной вами и помещенной в секцию заголовка страницы, вызов метода, принадлежащего какому-либо элементу или объекту, или иной код. Не забудьте только нажать кнопку ОК после того, как введете этот код.

    Диалоговое окно Change Property

    Рисунок 13.8. Диалоговое окно Change Property

    Диалоговое окно Change Property

    Набор переключателей Property позволяет выбрать способ задания нужного свойства.

    Если выбран переключатель Select, вы сможете выбрать нужное свойство в раскрывающемся списке, находящемся правее этого переключателя. Имейте, однако, в виду, что в этом списке для многих объектов отображаются как свойства самого этого объекта, так и его внутреннего объекта style. Таким образом, вы можете изменить также и значения атрибутов его стиля.

    Правее раскрывающегося списка свойств находится еще один раскрывающийся список. С его помощью вы можете задать, поддерживаемые каким Web-обозревателем свойства будут отображаться в списке свойств. В этом списке доступны четыре пункта:

  • NS3 — отображаются только свойства, поддерживаемые Navigator 3.0;
  • IE3 — Internet Explorer 3.0;
  • NS4 — Navigator 4.0;
  • IE4 — Internet Explorer 4.0 (выбран по умолчанию).
  • Если выбран переключатель Enter, вы можете ввести имя нужного свойства в поле ввода, расположенном правее. Используйте эту возможность для ввода имен свойств, поддерживаемых новейшими программами Web-обозревателей, но не "известных" Dreamweaver.

    Осталось ввести новое значение свойства в поле ввода New Value — и можно нажимать кнопку ОК.


    Диалоговое окно Check Browser

    Рисунок 13.9. Диалоговое окно Check Browser

    Диалоговое окно Check Browser

    Интернет-адрес "основной" страницы задается в поле ввода URL. Интернет-адрес "альтернативной" страницы — в поле ввода Alt URL. Конечно, вы можете нажать кнопку Browse, находящуюся правее нужного поля ввода, и выбрать необходимый файл в диалоговом окне Select File.

    Возможно, выбор всего из трех страниц покажется вам небогатым. Однако, если вы не делаете сверхзаумного сайта, где на каждую версию каждого Web-обозревателя отведена своя версия каждой страницы, вам должно этого хватить.

    Группа элементов управления Netscape Navigator позволяет задать, на какие страницы будет произведено перенаправление, если посетитель сайта пользуется Navigator. Сама версия Web-обозревателя задается в небольшом поле ввода, называющемся так же - Netscape Navigator. Если версия Web-обозревателя окажется такой же, как вы ввели, или более поздней, осуществляется переход на страницу, заданную в раскрывающемся списке or later. В противном случае переход будет выполнен на страницу, заданную в раскрывающемся списке otherwise.

    Раскрывающиеся списки or later и otherwise имеют по три пункта:

  • Stay on this Page — оставаться на текущей странице;
  • Go to URL — перейти на "основную" страницу;
  • Go to Alt URL — перейти на "альтернативную" страницу.
  • Как видите, все довольно просто.

    Точно так же задаются страницы для пользователей различных версий Internet Explorer. Для этого служит группа элементов управления Internet Explorer. Для задания страницы, предназначенной для пользователей других программ Web-обозревателей, используется единственный раскрывающийся список Other Browsers.

    По умолчанию Dreamweaver предлагает нам следующее:

  • пользователей Internet Explorer 4.0 и Navigator 4.0 или более новых версий этих программ — переслать на "основную" страницу;
  • пользователей более старых версий Internet Explorer 4.0 и Navigator 4.0, а также других программ Web-обозревателей — переслать на "альтернативную" страницу.
  • Как правило, этих установок бывает достаточно. Вам остается только задать интернет-адреса "основной" и "альтернативной" Web-страниц. И, разумеется, нажать кнопку ОК.

    Скрытие меню гиперссылок (Hide PopUp Menu)

    Скрытие меню гиперссылок (Hide Pop-Up Menu)

    Это поведение скрывает выведенное ранее на экран меню гиперссылок (о создании меню гиперссылок см. ниже). Как правило, Dreamweaver создает его сам, но иногда вам придется делать это самим.

    После выбора в меню поведений пункта Hide Pop-Up Menu на экране появится небольшое окно-предупреждение. Закройте его, нажав кнопку ОК. На этом создание поведения Hide Pop-up Menu закончено. Никаких параметров оно не имеет.

    Нажатие кнопки Cancel вышеупомянутого окна-предупреждения позволит вам отказаться от создания поведения Hide Pop-Up Menu.


    Создание поведений

    Создание поведений

    Теперь настало время рассмотреть все поведения, предлагаемые нам Dreamweaver, их создание и все их параметры, которые вы можете задать.

    Название поведения в терминологии самого Dreamweaver приведено в скобках, так что вы сразу сможете найти его в меню поведений.

    Имейте только в виду, что здесь приводятся не все поведения, поддерживаемые Dreamweaver. Поведения, служащие для поддержки форм и элементов управления, рассмотрим в главе 16.


    Некоторые методы класса Date

    Таблица 13.1. Некоторые методы класса Date

    Метод

    Описание

    getDate ( )

    Возвращает число

    getDay ( )

    Возвращает цифру, обозначающую день недели (0 — воскресенье, 1 — понедельник, 2 — вторник и т. д.)

    getFullYear()

    Возвращает год

    getHours ( )

    Возвращает час

    getMilliseconds ( )

    Возвращает миллисекунды

    getMinutes ( )

    Возвращает минуты

    getMonth ( )

    Возвращает цифру, обозначающую месяц (от 0 до 11)

    getSeconds ( )

    Возвращает секунды

    getTime ( )

    Возвращает время в виде количества миллисекунд, прошедших с полуночи 1 января 1 970 года

    Системный класс Math — другого рода. Он включает набор свойств и методов, реализующих различные математические и тригонометрические функции. Единственный его объект создается самим интерпретатором JavaScript при запуске и уничтожается при завершении работы. Так что вам не нужно самим создавать объекты этого класса. Это как раз типичный случай системного объекта.

    var f;

    f = Math.sin(Math.PI);

    В результате вычисления вышеприведенного выражения в переменной f окажется значение sin (я).

    Существуют также системные классы Number и string, служащие для хранения данных соответственно числового и строкового форматов, и несколько других системных классов, используемых значительно реже.

    Язык JavaScript имеет одну любопытную особенность. Дело в том, что любая переменная обычного типа данных может быть представлена как объект какого-либо класса. Давайте, например, рассмотрим следующий код:

    var s, 1;

    s = "JavaScript";

    1 = s.length;

    Здесь мы сначала помещаем в переменную s строку "JavaScript", а потом вызываем свойство length этой переменной. В таком случае интерпретатор

    считает переменную s объектом класса string и беспрепятственно "пускает" нас к свойству length этого класса, возвращающему длину строки текста, которую мы и помещаем в переменную 1.

    Аналогичный "финт" можно проделать и с числовой величиной:

    var a, s;

    а = 16765247;

    s = a.toString();

    Здесь вызываем метод toString класса Number, возвращающий строковое представление числа.

    Раньше говорилось, что, помимо интерпретатора JavaScript, системные классы могут представляться также и другими программами. К числу этих самых "других" программ относится Web-обозреватель. Его классы и системные объекты — это что-то особенное...

    Поведения поддерживаемые Dreamweaver

    Таблица 13.2. Поведения, поддерживаемые Dreamweaver

    Название в терминологии Dreamweaver

    Описание

    Call JavaScript

    Вызов фрагмента JavaScript-кода или функции, написанной на JavaScript

    Change Property

    Изменение значения свойства какого-либо объекта

    Check Browser

    Перенаправление посетителей на разные Web-страницы в зависимости от программы Web-обозревателя

    Check Plugin

    Перенаправление посетителей на разные Web-страницы в зависимости от того, установлен ли у них нужный модуль расширения Web-обозревателя

    Control Shockwave or Flash

    Управление проигрыванием фильма Shockwave или Flash

    Drag Layer

    Позволяет посетителю перетаскивать свободно позиционируемый элемент страницы с места на место

    Go to Timeline Frame

    Перемещение к заданному кадру анимации

    Go to URL

    Перенаправление посетителей на другую Web-страницу

    Hide Pop-Up Menu

    Скрытие меню гиперссылок, выведенного ранее на экран с помощью поведения Show Pop-Up Menu

    Jump Menu

    Привязывается самим Dreamweaver при создании раскрывающегося списка гиперссылок. Пользователю обычно не нужно создавать это поведение самому

    Jump Menu Go

    Привязывается самим Dreamweaver при создании раскрывающегося списка гиперссылок к кнопке Go (Перейти). Пользователю обычно не нужно создавать это поведение самому

    Open Browser Window

    Открытие какой-либо Web-страницы в новом окне Web-обозревателя

    Play Sound

    Проигрывание аудиофайла

    Play Timeline

    Запуск проигрывания анимации

    Popup Message

    Вывод окна-предупреждения с заданным текстом и кнопкой ОК

    Preload Images

    Загрузка из файлов графических изображений. Эти изображения могут использоваться затем для вывода на страницу в качестве ответа на событие

    Set Nav Bar Image

    Создается самим Dreamweaver при создании полосы навигации. Пользователю обычно не нужно создавать это поведение самому

    Set Text of Frame

    Помещение какого-либо текста во фрейм

    Set Text of Layer

    Помещение какого-либо текста в свободно позиционируемый элемент

    Set Text of Status Bar

    Помещение какого-либо текста в строку статуса окна Web-обозревателя

    Set Text of Text Field

    Помещение какого-либо текста в поле ввода

    Show Pop-Up Menu

    Вывод на экран меню гиперссылок, например, в ответ на помещение посетителем страницы курсора мыши над каким-либо элементом страницы

    Show-Hide Layers

    Показ или скрытие свободно позиционируемого элемента

    Stop Timeline

    Остановка проигрывания анимации

    Swap Image

    Замена одного графического изображения другим

    Swap Image Restore

    Восстановление изначально присутствовавшего на странице графического изображения после его замены с помощью поведения Swap Image

    Validate Form

    Проверка введенных в форму данных на правильность (о формах см. главу 16)

    Осталось привести список поддерживаемых Dreamweaver событий (табл. 13.3). Имейте, однако, в виду, что это не полный список поддерживаемых событий — некоторые события используются достаточно редко, и поэтому описываться здесь не будут.



    События поддерживаемые Dreamweaver

    Таблица 13.3. События, поддерживаемые Dreamweaver

    Название

    Описание

    onAbort
    onBlur
    onChange
    onClick

    Наступает, когда пользователь останавливает загрузку Web-страницы, например, нажав кнопку Останов

    Наступает, когда элемент управления или сама страница теряет фокус ввода

    Наступает, когда посетитель изменяет значение элемента управления

    Наступает при щелчке мышью по элементу страницы или по самой странице

    onDblClick

    Наступает при двойном щелчке мышью по элементу страницы или по самой странице

    onError

    Наступает при возникновении ошибки при загрузке страницы, графического изображения или внедренного элемента

    onFocus

    Наступает, когда элемент управления или сама страница получает фокус ввода

    onHelp

    Наступает, когда пользователь вызывает интерактивную справку Web-обозревателя

    onKeyDown

    Наступает при нажатии клавиши клавиатуры

    onKeyPress

    Наступает при нажатии и отпускании клавиши клавиатуры

    onKeyUp

    Наступает при отпускании клавиши клавиатуры

    onLoad

    Наступает по окончании загрузки страницы, графического изображения или внедренного элемента

    onMouseDown

    Наступает при нажатии кнопки мыши

    onMouseMove

    Периодически наступает при перемещении курсора мыши над элементом страницы или над самой страницей

    onMouseOut

    Наступает при "уводе" курсора мыши с элемента страницы

    onMouseOver

    Наступает, когда курсор мыши "заходит" на элемент страницы

    onMouseUp

    Наступает при отпускании кнопки мыши

    onMove

    Наступает при перемещении окна Web-обозревателя

    onReset

    Наступает, когда посетитель нажимает кнопку Сброс формы

    onResize

    Наступает при изменении размеров окна Web-обозревателя

    onScroll

    Наступает при прокрутке содержимого страницы или ее элемента посетителем

    onSelect

    Наступает при выделении текста в поле ввода

    onSubmit

    Наступает, когда посетитель нажимает кнопку Отправить формы, запуская отправку данных

    onUnload

    Наступает, когда посетитель покидает текущую Web-страницу

    На этом закончим наше затянувшееся вступление. Пора переходить к работе над поведениями в Dreamweaver.

    Пункты подменю Show Events For меню событий

    Таблица 13.4. Пункты подменю Show Events For меню событий

    Пункт подменю

    Отображаемые события

    3.0 and Later Browsers

    Internet Explorer и Navigator, версии 3.0 и более поздние

    4.0 and Later Browsers

    Internet Explorer и Navigator, версии 4.0 и более поздние

    IE 3.0

    Interhet Explorer 3.0

    IE 4.0

    Internet Explorer 4.0

    IE 5.0

    Internet Explorer 5.0

    IE 5.5

    Internet Explorer 5.5

    IE 6.0

    Internet Explorer 6.0

    Netscape 3.0 Navigator 3.0
    Netscape 4.0 Navigator 4.0
    Netscape 6.0 Navigator 6.0
    Dreamweaver также предоставляет вам возможность изменить параметры выбранного в списке поведения. Для этого просто дважды щелкните по нему мышью, после чего на экране появится диалоговое окно задания параметров соответствующего поведения. Например, для поведения play Timeline такое окно выглядит так, как на Рисунок 13.5. В раскрывающемся списке Play Timeline выберите нужную анимацию и не забудьте нажать кнопку ОК для сохранения сделанных изменений или Cancel — для отказа от них.



    Управление фильмом Shockwave или

    Управление фильмом Shockwave или Flash (Control Shockwave or Flash)

    Видеоролики разной длины и различного качества часто используются на современных Web-страницах. Нередко они управляются Web-сценариями.

    Так, фильм Flash может запускаться в ответ на нажатие кнопки или наведение курсора мыши на какой-либо элемент страницы. Существуют сайты, почти целиком реализованные на Flash-фильмах и Web-сценариях, которые ими управляют.

    Dreamweaver предоставляет вам возможность управлять фильмом в формате Shockwave или Flash из обработчика того или иного события. Для этого используется поведение Control Shockwave or Flash. Для создания такого поведения выберите одноименный пункт меню поведений. Диалоговое окно Control Shockwave or Flash, показанное на Рисунок 13.11, позволит вам задать параметры этого поведения.



    Перед тем как создать меню

    Внимание

    Перед тем как создать меню гиперссылок, дайте элементу страницы, к которому оно привязывается, уникальное имя.
    Выберите в меню поведений пункт Show Pop-Up Menu. На экране появится диалоговое окно Show Pop-Up Menu (Рисунок 13.23).



    в этом случае верен своему

    Внимание

    Dreamweaver и в этом случае верен своему кредо!.. Если вы введете русский текст в поле ввода Text, он будет искажен до неузнаваемости. Поэтому либо задавайте для пунктов меню гиперссылок только английский текст, либо правьте сам JavaScript-код вручную.
    Вы можете не вводить данные в поле ввода Link. В этом случае пункт меню не будет гиперссылкой и, соответственно, не будет реагировать на щелчки мышью. Таким образом вы можете создавать, например, разделители.

    Все созданные вами к данному времени пункты меню гиперссылок отображаются в списке, занимающем большую часть вкладки Contents. Этот список состоит из трех колонок: Text (текст пункта меню), Link (интернет-адрес гиперссылки) и Target (цель гиперссылки). Вы можете выбрать любой пункт в этом списке и выполнить над ним различные манипуляции.

    Чтобы создать новый пункт, нажмите кнопку со знаком "плюс", расположенную над списком пунктов, и задайте в полях ввода Text, Link и раскрывающемся списке Target нужные данные.

    Чтобы изменить какой-либо пункт меню, выберите его в списке пунктов и измените его данные, пользуясь перечисленными выше элементами управления.

    Чтобы удалить ненужный пункт, выберите его в списке пунктов и нажмите кнопку со знаком "минус", расположенную над этим списком.

    Кнопки вверх и вниз позволят переместить выбранный вами пункт на позицию вверх или вниз соответственно.

    Вы также можете создавать вложенные меню. Для этого создайте пункт основного меню, при щелчке на котором будет открываться подменю, причем не вводите ничего в поле ввода Link. Далее создайте первый пункт подменю и поместите его точно перед созданным ранее пунктом. Теперь вам останется нажать кнопку Indent Item (Рисунок 13.24).



    При создании на странице меню

    Внимание

    При создании на странице меню гиперссылок Dreamweaver помещает в корневую папку сайта файл mm_menu.js, содержащий необходимые сценарии, и графическое изображение arrows.gif. Не удаляйте их! И не забудьте поместить их на Web-сервер.

    Создавать поведение Swap image Restore

    Внимание

    Создавать поведение Swap image Restore можно только после создания поведения Swap Image.

    Для того чтобы запустить отладчик

    Внимание

    Для того чтобы запустить отладчик Dreamweaver, вы должны иметь на своем компьютере установленную виртуальную машину Java фирмы Microsoft. Будьте внимательны: в составе Windows XP эта виртуальная машина не поставляется — вам самим придется загружать ее с сайта этой фирмы.

    После загрузки и запуска отладчика Dreamweaver выведет небольшое предупреждение с кнопкой ОК и флажком Don't show me this message again. Это предупреждение предлагает вам установить точки останова и запустить отладку. Закройте это окно, нажав ОК; вы можете перед этим включить флажок Don't show me this message again, если больше не хотите его видеть.

    Оно разделено на две части. В верхней части отображается выполняемый программный код, причем отладчик не разделяет HTML- и JavaScript-код, а отображает все вместе. В нижней части находится список переменных и их текущих значений, изначально пустой. Вы можете изменять относительные размеры этих двух частей, перемещая мышью находящуюся между ними полоску разделителя. В самом верху окна находится инструментарий отладчика, с помощью которой выполняются все доступные действия в этом окне.

    Программный код, отображаемый в верхней половине окна отладчика, пронумерован по строкам. Номера строк отображаются на серой полосе, тянущейся вдоль левого края всей верхней половины. Строка, которая в данный момент должна быть выполнена, помечена маленькой желтой стрелкой, направленной вправо.

    Теперь мы должны, как предлагает Dreamweaver, установить точки останова и запустить отладку. Давайте так и сделаем.

    Чтобы установить точку останова, поставьте текстовый курсор на нужной строке программного кода (кода JavaScript, а не HTML) и нажмите клавишу . Вы также можете выбрать пункт Set/Remove Breakpoint в контекстном меню или нажать одноименную кнопку инструментария отладчика. Точка останова обозначается специальным маркером — небольшим красным кружком, стоящим на серой полосе с номерами строк напротив соответствующей строки кода.

    Если вы случайно ошиблись и поставили точку останова не там, поставьте на строке, где стоит точка останова, текстовый курсор и снова нажмите клавишу , кнопку Set/Remove Breakpoint или пункт в контекстном меню. Вы также можете убрать одновременно все точки останова в коде, нажав кнопку Remove All Breakpoints или выбрав в контекстном меню одноименный пункт.

    Расставив точки останова, можно запускать код на выполнение. Для этого нажмите кнопку Run инструментария отладчика или клавишу . Кнопка Stop Debugging позволит вам отключить отладчик и продолжить выполнение JavaScript-кода без него.

    Когда Web-сценарий выполняется из-под отладчика, его быстродействие невелико, особенно на маломощных компьютерах. Это происходит потому, что отладчик перехватывает и проверяет каждое выражение, выполняемое интерпретатором. Поэтому, чтобы увидеть реальное быстродействие вашего кода, "прогоните" его впоследствии без отладчика.

    Дойдя до ближайшей установленной вами точки останова, выполнение кода временно прервется. Маркер точки останова в этом случае примет такой вид . Чтобы запустить его дальше, нажмите кнопку Run инструментария отладчика или клавишу .

    Вы также можете использовать кнопки Step Over, Step Into и Step Out инструментария отладчика для пошагового выполнения кода, выражение за выражением.

    Нажатие кнопки Step Over или клавиши вызывает простой переход на следующее выражение.

    Кнопка Step Into (нажатие клавиши ) аналогична Step Over за одним исключением. Если следующее выражение программного кода является вызовом функции, то далее начнет выполняться первое выражение кода функции, т. е. вы как бы "зайдете" в функцию. Имейте в виду, что "зайти" таким образом можно только в функции, созданные самим программистом.

    Кнопка Step Out (нажатие клавиши ) действует только тогда, когда выполняется код какой-либо функции. При ее нажатии выполняется весь код функции, и очередная остановка происходит на выражении, следующим за вызовом этой функции, т. е. кнопка Step Out позволит вам "выйти" из функции.

    Теперь обратимся к списку переменных, находящемуся в нижней части окна отладчика. Вы видите, что этот список, как и многие списки Dreamweaver, представляет собой таблицу, состоящую из двух колонок. В первой колонке - Variable Name — отображается имя переменной или свойства, а во второй - Value — его значение. Вы можете выделить любую строку в списке и выполнить над ней некоторые действия.

    Над самим списком находятся две кнопки со знаками "плюс" и "минус". Их назначение уже должно быть вам понятно. Кнопка со знаком "плюс" добавляет новую строку в список, после чего вам останется ввести в добавленную строку имя нужной переменной или нужного свойства и нажать клавишу . Кнопка со знаком "минус" позволит вам удалить выделенную в списке строку. Как видите, все очень удобно, за исключением того, что, как вы уже заметили, русские буквы опять отображаются некорректно.

    Также вы можете изменить имя переменной (свойства) или его значение. Для этого выберите нужную строку в списке и щелкните мышью по значению в колонке Variable Name или Value. После этого введите новое имя или значение в появившееся в строке поле ввода и нажмите клавишу .

    Чтобы закончить отладку, либо закройте окно отладчика и окно Web-обозревателя, либо нажмите кнопку Stop Debugging. В первом случае выполнение всех сценариев будет прервано, а сам Web-обозреватель — выгружен, а во втором — выполнение продолжится без отладчика.

    Когда будете изменять событие или

    Внимание

    Когда будете изменять событие или параметры поведения, не забудьте выделить в окне документа нужный элемент страницы.
    В верхней части панели Behaviors находятся четыре кнопки: +, —, вверх и вниз. Давайте рассмотрим их по очереди.

    Кнопка со знаком "плюс" позволит вам создать новое поведение. При ее нажатии на экране появляется довольно большое меню поведений (Рисунок 13.6), в котором можно выбрать нужное поведение. Некоторые из пунктов этого меню могут быть недоступными; это обычно означает, что в данный момент времени на странице нет необходимых элементов. Также некоторые поведения могут "прятаться" в подменю, например поведения, управляющие анимациями, находятся в подменю Timeline.

    С помощью пунктов уже знакомого вам подменю Show Events For, находящегося в этом же меню, можно задать, поддерживаемые каким Web-обозревателем события будут отображаться в меню событий. Пункты этого подменю перечислены в табл. 13.4. Чтобы вывести нужный набор событий, просто выберите соответствующий пункт-выключатель.



    обозревателя сейчас считается дурным тоном.

    Внимание

    Учтите, что помещать посторонний текст в строку статуса окна Web- обозревателя сейчас считается дурным тоном. Поэтому используйте эту возможность только тогда, когда без нее действительно не обойтись.

    Восстановление всех изначальных

    Восстановление всех изначальных изображений (Swap Image Restore)

    Если вы хотите после вызова поведения swap image восстановить изображения, отображавшиеся на странице изначально, создайте поведение Swap image Restore. Для этого выберите пункт Swap Image Restore меню поведений. На экране появится небольшое окно-предупреждение; нажмите кнопку ОК, чтобы закрыть его. Нажатие кнопки Cancel позволит вам отказаться от создания этого поведения.



    Встроенный отладчик Dreamweaver

    Встроенный отладчик Dreamweaver

    Чтобы вызвать встроенный в Dreamweaver отладчик JavaScript-кода, нажмите комбинацию клавиш + или ++. Первая комбинация запускает отладку в первичном Web-обозревателе, а вторая -во вторичном. (О первичном и вторичном Web-обозревателях см. главу 2.) Также вы можете выбрать нужный пункт в подменю Debug in Browser меню File или меню кнопки Preview/Debug in Browser инструментария документа . После этого нажмите кнопку ОК в нескольких появившихся на экране окнах-предупреждениях, чтобы собственно запустить отладчик. И подождите некоторое время, пока все это загрузится и запустится.



    Вывод на экран меню гиперссылок (Show PopUp Menu)

    Вывод на экран меню гиперссылок (Show Pop-Up Menu)

    В последнее время в моду вошли меню гиперссылок, раскрывающиеся после наведения курсора мыши на какой-либо элемент Web-страницы или щелчка по нему. Родоначальником этой моды, вероятно, были Web-дизайнеры, разрабатывавшие сайт фирмы Microsoft, после чего меню "разбежались" по другим сайтам и страницам. Разумеется, разработчики Dreamweaver не могли пройти мимо этого и ввели в свое детище возможность создания такого меню с помощью поведения show Pop-up Menu и привязки его к любому элементу страницы.



    Вывод предупреждения (Popup Message)

    Вывод предупреждения (Popup Message)

    Очень часто для сообщения пользователю о чем-либо (например, необходимости ввести данные в поле ввода на странице) используются окна-предупреждения. Они представляют собой обычное стандартное предупреждение Windows: небольшое окно с текстом предупреждения, изображением восклицательного знака и кнопкой ОК. Для вывода такого предупреждения вы можете воспользоваться поведением Popup Message. Выберите одноименный пункт меню поведений, после чего на экране появится диалоговое окно Popup Message (Рисунок 13.18).



    Вывод текста в строке статуса

    Вывод текста в строке статуса окна Web-обозревателя (Set Text of Status Bar)

    Dreamweaver также позволяет вам вывести любой текст в строке статуса текущего окна Web-обозревателя. Это может быть использовано, например, для показа краткого описания гиперссылки, над которой находится курсор мыши, или просто краткого описания текущей страницы сайта. (Иногда в статусной строке выводится текущее время, "ползущий" справа налево либо "вырастающий" слева направо текст или другие чудеса.) Выберите пункт Set Text of Status Bar в подменю Set Text меню поведений. На экране появится диалоговое окно Set Text of Status Bar, показанное на Рисунок 13.22.



    Вызов JavaScriptкода (CallJavaScript)

    Вызов JavaScript-кода (CallJavaScript)

    Если вы хотите, чтобы в ответ на какое-либо событие, произошедшее в том или ином элементе страницы, выполнялся некий JavaScript-код, создайте для этого элемента поведение Call JavaScript. Для этого вызовите одноименный пункт меню поведений. После этого на экране появится диалоговое окно Call JavaScript, показанное на Рисунок 13.7.



    Webсценарии — подход Dreamweaver Поведения

    Web-сценарии — подход Dreamweaver. Поведения

    Сейчас, когда все объяснено, вам может показаться, что писать Web-сценарии проще простого. Однако это совсем не так. Web-программирование — штука очень и очень непростая. Хотя бы из-за того, что вам придется держать в голове множество имен объектов, классов, свойств, методов и событий, с помощью которых создается тот или иной эффект. Вдобавок многие вещи делаются отнюдь не так очевидно, как, скажем, анимация. Поверьте, но над первыми своими Web-сценариями автор сидел не один час.

    Но разработчики Dreamweaver решили облегчить жизнь начинающих Web-программистов. Для этого они ввели понятие поведения (по-английски -behavior) — заранее определенного действия, которое будет происходить в ответ на какое-либо событие, произошедшее внутри или вне системы. Dreamweaver поддерживает достаточный набор таких поведений, который покроет практически все потребности начинающего, да и опытного Web-дизайнера. Работа с поведениями в среде Dreamweaver осуществляется так же просто, как и с анимациями — щелчками мыши и нажатиями клавиш клавиатуры.

    Когда вы задаете какое-либо поведение для того или иного элемента страницы, Dreamweaver автоматически создает необходимый для этого набор Web-сценариев и помещает его в HTML-код страницы. Это делается незаметно от пользователя; пользователь просто работает со списком созданных им поведений, отображаемым в специальном списке. Таким образом, Dreamweaver дает возможность прикоснуться к Web-программированию даже тем Web-дизайнерам, которые не знают ни языка JavaScript, ни объектной модели документа.

    Все поведения, поддерживаемые Dreamweaver, приведены в табл. 13.2.



    Зачем нужны Webсценарии

    Зачем нужны Web-сценарии

    Web-сценарии могут быть применены везде, где не может быть использован "чистый" HTML, т. е. там, где элементы страницы должны вести себя так, как стандартом HTML не предусмотрено.

    Возьмем ту же самую анимацию. За очень небольшим исключением (например, нестандартный тег , поддерживаемый Internet Explorer), элементы страницы не могут по ней двигаться. Если вам все же нужно, чтобы они двигались, не обойтись без применения Web-сценариев. Зная язык JavaScript, вы с легкостью реализуете нужное поведение элементов, заставите их летать с требуемой скоростью и по желаемой траектории. HTML такое не может.

    Очень часто Web-сценарии используются для изменения содержимого Web-страницы или даже для создания нового содержимого в ответ на действия пользователя. В частности, при наведении курсора мыши на гиперссылку рядом с ней может появляться краткое описание, либо изображение-гиперссылка может менять свой вид. (Кстати, такие "горячие" изображения, меняющиеся при наведении на них курсора мыши, мы уже создавали в главе 3 при помощи Dreamweaver. Такие "фокусы" реализуются также с помощью Web-сценариев.) Иногда содержимое Web-страницы корректируется сразу же в процессе ее загрузки Web-обозревателем, что достигается помещением в HTML-код сценариев, исполняющихся при загрузке.

    Вообще, фантазия Web-дизайнера, решившего создать интерактивную Web-страницу с использованием Web-сценариев, почти ничем не ограничена. (Ограничения, конечно, существуют, но их очень мало, и касаются они, в основном, доступу к содержимому дисков клиентского компьютера.) В настоящее время существуют даже Web-страницы, содержимое которых может изменяться самим пользователем прямо в окне Web-обозревателя. (Другой вопрос: зачем это нужно?..) На страницах может отображаться, например, текущее время, причем, "часики" действительно будут "тикать". Также Web-сценарии часто используются для правильного размещения на странице свободно позиционируемых элементов. В частности, можно создать свободный элемент, который при любых изменениях размеров окна Web-обозревателя всегда будет находиться в его центре.

    С помощью Web-сценариев можно создать принципиально новый интерфейс пользователя для своей страницы. На многих страницах применяется иерархический список, в котором перечислены все разделы и подразделы сайта. Такие страницы напоминают окно Проводника Windows. Часто с помощью свободно позиционируемых элементов и сложных Web-сценариев создают принципиально новые элементы управления для ввода данных, не снившихся даже самой великой и ужасной Windows. Но это уже — удел достаточно опытных программистов.

    Ну и, конечно, Web-сценарии применяются для написания настоящих программ, использующих в качестве интерфейса Web-страницы. Известны, например, игры "15", "Лото", различные головоломки и викторины, созданные на основе Web-сценариев и размещенные в Интернете. Часто таким же образом создаются и более серьезные программы, например, утилиты подбора цветов для Web-страниц или даже целые Web-редакторы, конечно, не очень сложные.

    Вообще, создание таких вот Web-программ — достаточно новая область деятельности, еще даже толком не развившаяся, но довольно перспективная. В самом деле, такие программы очень просто распространять и сопровождать. Они не требуют создания разработчиком дистрибутивного пакета, иной раз весьма "увесистого", и распространения его каким-либо образом, а потенциальным пользователям не придется его подолгу загружать. Они не требуют установки на компьютере пользователя, а становятся доступны сразу после набора в окне Web-обозревателя нужного адреса. А при создании новой версии такой программы разработчику достаточно будет только обновить на своем сайте соответствующую Web-страничку.

    Web-программы имеют только два недостатка. Во-первых, они доступны только после подключения к Интернету. (Хотя, конечно, их можно распространять на дискетах, CD, по электронной почте и другими путями.) Во-вторых, из-за ограничений интерпретатора JavaScript с помощью таких программ невозможно сохранение документов на дисках клиентского компьютера.

    Задание нового содержимого фрейма (Set Text of Frame)

    Задание нового содержимого фрейма (Set Text of Frame)

    Dreamweaver позволяет вам поместить новое содержимое в любой из фреймов текущего набора. Для этого выберите пункт Set Text of Frame в подменю Set Text меню поведений. На экране появится диалоговое окно Set Text of Frame.

    В раскрывающемся списке Frame выбирается фрейм, в который вы хотите поместить новое содержимое. Само содержимое в виде HTML-кода вводится в область редактирования New HTML. Вы также можете нажать кнопку Get Current HTML, чтобы скопировать в эту область редактирования текущее содержимое фрейма, после чего внести необходимые изменения. Если вы включите флажок Preserve Background Color, Web-сценарий, обновляющий содержимое фрейма, сохранит цветовые настройки текста и фона;

    в противном случае эти настройки пропадут. Задав нужные настройки, нажмите кнопку ОК.

    Вы можете использовать в HTML-коде нового содержимого фрейма любой JavaScript-код, заключив его в фигурные скобки. Например, чтобы вывести посетителю сайта текущую дату, вы можете использовать такой код:

    Сегодня {new Date()}

    Если же вам понадобится ввести в текст фигурную скобку, предварите ее обратной косой чертой (/{ или /}).

    Задание нового содержимого

    Задание нового содержимого

    свободно позиционируемого элемента (Set Text of Layer)
    Dreamweaver позволяет вам поместить новое содержимое в любой из свободно позиционируемых элементов, имеющихся на странице. Для этого выберите пункт Set Text of Layer в подменю Set Text меню поведений. На экране появится диалоговое окно Set Text of Layer

    В раскрывающемся списке Layer выбирается свободный элемент, в который вы хотите поместить новое содержимое. Само содержимое в виде HTML-кода вводится в область редактирования New HTML, Задав нужные настройки, нажмите кнопку ОК.

    Вы можете использовать в HTML-коде нового содержимого свободного элемента любой JavaScript-код, заключив его в фигурные скобки. Например, чтобы вывести посетителю сайта текущую дату, вы можете использовать такой код:

    Сегодня {new Date()}

    Если же вам понадобится ввести в текст фигурную скобку, предварите ее обратной косой чертой (/{ или /}).

    Запуск проигрывания анимации (Play Timeline)

    Запуск проигрывания анимации (Play Timeline)

    Конечно же, Dreamweaver предоставляет специальные поведения для управления проигрыванием анимации в ответ на какое-либо событие. Это реализуется с помощью поведения Play Timeline. Одноименный пункт для создания этого поведения находится в подменю Timeline меню поведений.

    Диалоговое окно Play Timeline показано на Рисунок 13.5. Оно содержит один-единственный раскрывающийся список, называющийся Play Timeline. В нем выбирается анимация, которую нужно проиграть, после чего нажимается кнопка ОК. Как видите, все очень просто.

    Использование пакета Dreamweaver

    Базовый интернетадрес

    Базовый интернет-адрес

    Метатег, задающий базовый интернет-адрес, может быть полезен, если страницы вашего сайта разбросаны по разным Web-серверам. Вместо того, чтобы в гиперссылках указывать полные интернет-адреса, вы можете указать относительные, а в секции заголовка страницы поместить метатег базового адреса. В этом случае полные интернет-адреса будут вычисляться относительно его.

    Кроме того, такой метатег может устранить ошибки загрузки страниц, которые должны отображаться во фреймах, но почему-то выводятся в полном окне Web-обозревателя. Для этого достаточно указать в этом метатеге имя базового фрейма, в котором должна отображаться страница.

    Чтобы поместить на страницу метатег базового интернет-адреса, выберите пункт Base подменю Head Tags меню Insert. Также вы можете нажать кнопку Base (Рисунок 14.8), находящуюся на вкладке Head панели объектов. На экране появится диалоговое окно Base, показанное на Рисунок 14.9.



    Echo

    echo

    Директива echo помещает в HTML-код содержимое одной из встроенных переменных Web-сервера. Она имеет такой синтаксис:

    " -- >

    В качестве значения атрибута var задается имя нужной переменной. Встроенные переменные, поддерживаемые большинством Web-серверов, перечислены в табл. 14.3.



    Include

    include

    Директива include вставляет в содержимое текущего файла содержимое другого. (Эта директива также называется серверным включением, а файл, содержащий включаемый фрагмент кода, — файлом включения). Вставка осуществляется в то место файла, где встретилась эта директива. Записывается она так:

    " —>

    или так:

    " —>

    В первом случае <Имя файла> представляет собой обычное имя файла, заданное с учетом особенностей файловой системы серверного компьютера. Например, так:



    В данном случае в текущий файл вставляется содержимое файла header.inc, находящегося в папке Inetpub\wwwroot\includes на диске С.

    Во втором случае файл <имя файла> ищется относительно корневой папки сайта. Также он может находиться на другом Web-сайте; в этом случае в качестве значения атрибута virtual указывается полный интернет-адрес этого файла.



    В данном случае файл header.inc располагается в папке htmls/includes, вложенной в корневую папку сайта.

    http://www.othersite.ru/includes/header.inc" .—>
    А в этом случае файл header.inc находится вообще на другом сайте.

    Существует негласное правило: все файлы включений должны иметь расширение inc (от англ, include — включение). Хотя не возбраняются другие расширения. Также, если у вас имеется достаточно много файлов включений, лучше всего поместить их в особую папку, например includes. В противном случае можно оставить их в той же папке, где находятся все Web-страницы.



    Как использовать серверные директивы

    Как использовать серверные директивы

    А сейчас давайте поговорим, как можно использовать серверные директивы.

    Ну, насчет директивы echo все ясно. Используйте ее, если на страницу нужно поместить текущую дату или имя файла страницы. Для этого достаточно подставить в качестве значения атрибута var имя соответствующей переменной.

    А вот как можно использовать директиву include? Для разделения кода Web-страниц на отдельные части. Зачем это нужно?

    Необходимо это во многих случаях. Но нужнее всего, если сайт построен по принципам табличного дизайна, либо странички содержат какие-либо повторяющиеся стандартные элементы. В этом случае умелое разделение кода на фрагменты принесет истинное облегчение Web-дизайнеру. Даже если он использует Dreamweaver.

    Давайте вернемся назад и вспомним, чем отличаются Web-страницы, построенные на основе табличного дизайна, от прочих. Как вы помните, все, что находится на такой странице, представляет собой содержимое одной огромной таблицы, занимающей всю эту страницу. А какие недостатки таблиц мы знаем?

    Недостаток первый: очень медленная загрузка. Web-обозреватель не может вывести на экран таблицу, пока не загрузит ее целиком. А если таблица довольно велика, а канал связи с Интернетом достаточно нетороплив, загрузка может продолжаться очень долго.

    Недостаток второй: большой объем получающегося HTML-кода. В самом деле, вспомните, какие размеры были у страниц, созданных на основе табличного дизайна! Сравните их со страничками сайта, основанного на фреймах! Отчасти это происходит из-за того, что сам код, создающий таблицу, очень велик — это плата за гибкость. Но основная причина этого другая: при использовании табличного дизайна каждая страница включает в себя все повторяющиеся элементы (заголовок, полоса навигации, сведения об авторских правах), которые во втором случае "вынесены" в отдельные фреймы, т. е. размер HTML-кода еще больше увеличивается.

    Недостаток третий, свойственный не самим таблицам, а табличному дизайну: каждая страница содержит все стандартные, повторяющиеся элементы оформления. А теперь представьте, что вам нужно слегка изменить стандартное примечание, а страниц в вашем сайте добрая сотня. Что делать? Открывать каждую из них и вручную править текст? А если вы пропустите какую-нибудь из них? А если забудете сохранить при закрытии? Уже не стоит говорить о том, что перелопатить вручную такое количество страниц трудно чисто физически.

    Dreamweaver пытается решить эту проблему, предоставляя уже известные вам шаблоны. Но это не решение проблемы, а половина решения. Да, вы можете внести изменения в шаблон, после чего Dreamweaver за вас будет переносить эти изменения во все страницы сайта. Но это не устраняет проблему увеличения размеров страниц. Страницы, созданные на основе табличного дизайна, все же остаются большими, занимая место на дисках сервера, которого всегда не хватает. Более того, размер страниц увеличивается еще за счет разного рода специальных комментариев, вносимых самим Dreamweaver, чтобы выделить HTML-код шаблона.

    Так как же решить эту проблему? И есть ли у нее решение?

    Есть.

    Решение в том, чтобы вынести повторяющиеся элементы страниц в отдельные файлы, оставив в них только основное содержимое, т. е. выделить в HTML-коде страницы фрагменты, создающие ее заголовок, полосу навигации и сведения об авторских правах, вырезать их и сохранить в других файлах. А на их место поместить серверные директивы include, указывающие на эти файлы.

    Поясним вышесказанное на примере. Давайте для примера создадим страничку, код которой приведен ниже.



    <ТITLЕ>Страница









    Страница 3



    Страница 1
    Это основное содержимое страницы.
    Страница 2
    Страница 4



    Сохраните этот код в файле 14.1.htm и откройте его в Web-обозревателе. Вы увидите нечто, похожее на Рисунок 14.21.

    Эта страница сделана на основе табличного дизайна. Значит, она содержит все повторяющиеся элементы. Давайте вынесем их в другие файлы.



    Как работают поисковые агенты

    Как работают поисковые агенты

    Поисковый агент — это программа, периодически сканирующая всю Сеть и проверяющая, есть ли по тому или иному адресу Web-страница. Если страница есть, агент проверяет ее HTML-код, извлекает из него интернет-адреса, ведущие на другие Web-страницы. Также он извлекает ее название и пытается извлечь описание и набор ключевых слов, если они есть, после чего заносит все это в базу данных поисковика (или, как говорят опытные интернетчики, выполняет индексирование). Далее он обращается к Web-страницам, находящимся по найденным на текущей странице адресам, и проделывает с ними то же самое.

    Поисковые агенты, как правило, пишутся на заказ очень опытными и знающими программистами. Хороший поисковый агент — настоящее произведение программистского искусства. Он должен отсекать несуществующие адреса, правильно опознавать HTML-теги, "интеллектуально" создавать описания и при этом быстро работать. Сами понимаете: Сеть велика, а времени всегда не хватает...

    Вообще, проанализировать HTML-код — задача не очень сложная. В самом деле, название страницы помещается внутри тега в секции заголовка <head> <link rel="canonical" href="https://www.e-lave.ru//index.htm"/>, а интернет-адреса других страниц с большой долей вероятности следует искать в тегах <А> и <AREA>. Написать программу, извлекающую такую информацию, для опытного программиста — пара пустяков.<br> <br> Сложность здесь совсем в другом.<br> <br> Давайте вспомним, какие данные помещаются в базу данных поисковой машины, и классического поисковика, и каталога. Кроме адреса и названия страницы, это еще и краткое описание и набор ключевых слов. А откуда их взять?<br> <br> Проанализировать текст, помещенный на Web-странице? А как? Как обычная программа, даже очень сложная и подающая признаки легкого "интеллекта", узнает, какое из многих сотен, а то и тысяч слов текста страницы можно использовать как ключевое? Как она "ужмет" многокилобайтовый текст в краткое описание из 200 символов (такое ограничение на размер текста описания накладывают многие каталоги)? Как при этом выбрать нужную информацию и выжать всю "воду"?<br> <br> Нет, это задача непроста даже для человека-модератора. Что уж требовать от программы...<br> <br> Да, но как-то нужно выбирать из текста страниц необходимую информацию!<br> <br> Как раз для этого и предназначены метатеги HTML. Именно с их помощью можно представить в HTML-коде информацию, которая не будет предназначена человеку, а исключительно программам. Человек ее даже не увидит (если, конечно, не станет специально для этого просматривать HTML-код).<br> <br> Конечно, поисковые агенты пользуются для добычи информации не только метатегами. Они также проверяют текст страницы, причем, в зависимости от тега, в котором находится этот текст, они придают ему разное значение. Также они сравнивают, какие данные находятся в метатегах и основном тексте страницы, и на основании результатов этого сравнения делают определенные выводы. Уже говорилось, что хороший поисковый агент — это настоящее произведение программистского искусства, несущее в себе частицу его создателя.<br> <br> А теперь все же обратимся к метатегам.<br><br> <h1>Ключевые слова</h1>Ключевые слова<br><br> Чтобы поместить на страницу метатег, содержащий набор ключевых слов, выберите пункт <b>Keywords </b>подменю <b>Head Tags </b>меню <b>Insert. </b>Также вы можете нажать кнопку <b>Keywords </b>(Рисунок 14.5), находящуюся на вкладке <b>Head </b>панели объектов. На экране появится диалоговое окно <b>Keywords, </b>показанное на Рисунок 14.6.<br> <br> <p align="center"><br><br> <h1>Метатеги</h1>Метатеги<br><br> Метатег — это особый тег HTML, предназначенный для помещения в код Web-страницы информации о ней самой. Эта информация используется, в основном, программами — поисковыми агентами, Web-обозревателями и. возможно, Web-редакторами — и никак не отображается в окне Web-обозревателя.<br> <br> С помощью метатегов в код Web-страницы можно поместить следующую информацию:<br> <br> <li> краткое описание страницы; </li> <li> набор ключевых слов;<br> </li> <li> интернет-адрес страницы, на которую будет выполнен переход по истечении некоего промежутка времени (задержка перед перенаправлением на другую Web-страницу);<br> </li> <li> базовый адрес, от которого будут отсчитываться все относительные адреса (об абсолютных и относительных интернет-адресах см. главу 6); <br> </li> <li> "родственную связь" между двумя страницами и тип этой "связи"; </li> <li> текстовую кодировку страницы;<br> </li> <li> некоторые другие данные, создаваемые и используемые, в основном, специальными программами, например популярнейшим Web-редактором Microsoft FrontPage.<br> </li> Как видите, метатеги позволяют сделать весьма много.<br> <br> Все метатеги помещаются в секции HTML-заголовка (тег <head> <link rel="canonical" href="https://www.e-lave.ru//index.htm"/>) Web-страницы. Большинство из них создается с помощью одинарного тега <МЕТА> и трех его атрибутов. Тип метатега задается атрибутом NAME или НТТР-EQUIV, а сами данные — атрибутом CONTENT. Ниже приведен пример метатега, задающего текстовую кодировку.<br> <br> <МЕТА HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251"><br> <br> Этот фрагмент взят из HTML-кода страницы default.htm нашего первого сайта Sample site 1.<br> <br> А следующий метатег задает набор ключевых слов, которые могут быть использованы поисковым агентом:<br> <br> <МЕТА NAME="keywords" CONTENT="музыка,аудио,МР3"><br> <br> И не только могут быть, но и используются! Поисковые агенты всегда проверяют содержимое метатегов страниц, чтобы найти нужную для занесения в базу данных информацию. И, "подсовывая" им определенное содержимое, можно делать свой сайт более популярным.<br> <br> Вот это и есть пассивная интернет-реклама.<br> <br> Начинающие Web-дизайнеры часто пренебрегают метатегами, недооценивают их важность. И зря. Метатеги — мощный инструмент в руках знающего специалиста; пользуясь ими, он может сделать на какое-то время популярным даже совершенно провальный интернет-проект. И наоборот, неудачные метатеги могут "убить" даже очень перспективный сайт. Конечно, это крайние случаи, но...<br> <br> Давайте же поговорим о пассивной интернет-рекламе и о более активном ее использовании.<br><br> <h1>Описание Webстраницы</h1>Описание Web-страницы<br><br> Чтобы поместить на страницу метатег, содержащий ее описание, выберите пункт <b>Description </b>подменю <b>Head Tags </b>меню <b>Insert. </b>Также вы можете нажать кнопку <b>Description </b>(Рисунок 14.2), находящуюся на вкладке <b>Head </b>панели объектов. На экране появится диалоговое окно <b>Description, </b>показанное на Рисунок 14.3.<br> <br> <p align="center"><br><br> <h1>Пассивная интернетреклама</h1>Пассивная интернет-реклама<br><br> Специалисты по интернет-рекламе уже давно знают, что одни ключевые слова пользуются на поисковых машинах большей, а другие — меньшей популярностью. В самом деле, если вы зайдете на сайт поисковой машины, зачастую на первой же странице будет присутствовать список самых популярных слов, набираемых в поле ввода запроса. На русскоязычных поисковых машинах это, прежде всего, "работа", "музыка", "аудио", "МРЗ", вездесущие "секс" и "порно" и т. д. и т. п.<br> <br> Почему так происходит? Вроде бы слов в языке много, а список популярнейших ключевых слов практически не меняется со временем и почти одинаков для любого языка. А все это из-за того, что люди ищут в Сети примерно одно и то же, называя искомое одними и теми же словами. И это правильно: больше шансов найти "музыку", а не "гармоничное сочетание звуков, производимое с использованием особых инструментов". А уж поисками лучшей работы занимаются фактически все, за исключением тех, кто на ней уже работает.<br> <br> Но шутки в сторону. Выходит, что набор популярнейших ключевых слов совсем невелик. И, поместив все популярнейшие ключевые слова в метатег<br> <br> <МЕТА NAME="keywords" CONTENT="музыка,аудио,МРЗ,работа,секс,анекдот"><br> <br> можно поднять популярность своей Web-странички, даже если на ней нет и намека на музыку в формате МРЗ (или, как правильно, MPEG 1, уровень 3) или анекдоты про секс вместо работы. Так это или не так?<br> <br> Так-то оно так. Да не совсем.<br> <br> Безусловно, создав удачный набор ключевых слов в метатеге, можно повысить популярность своей страницы или сайта. Но только при том условии, что содержимое этой страницы будет соответствовать ключевым словам.<br> <br> Когда-то, во времена "глупых" поисковых агентов такие фокусы проходили. Но не сейчас. Поисковые агенты стали не в пример "умнее". Помните, что они, вдобавок к метатегам, проверяют еще и само содержимое страниц, причем учитывают еще и тег, с помощью которого отформатирован тот или иной текст. "Обмануть" такого поискового агента почти так же сложно, как победить агента 007.<br> <br> Прежде всего, ключевые слова, которые вы перечислили в метатеге, должны также присутствовать в описании страницы. А описание страницы создается с помощью другого метатега:<br> <br> <МЕТА NAME="description" CONTENT="Крутая страничка о музыке и аудио в формате МРЗ, работе, сексе с анекдотами обо всем этом"><br> <br> Далее, все перечисленные вами ключевые слова должны присутствовать в названии страницы, задаваемом с помощью тега <TITLE>.<br> <br> <ТITLЕ>Крутая страничка о музыке и аудио в формате МРЗ, работе, сексе с анекдотами обо всем этом</ТITLЕ><br> <br> Хорошо, если все эти ключевые слова будут встречаться также и в заголовках, созданных с помощью тегов <H1>, ..., <H6>. Причем, чем больше уровень заголовка, тем большим весом будут обладать ключевые слова. Например, заголовок первого уровня:<br> <br> <Н1>Музыка и секс</Н1><br> <br> имеет больший вес в глазах поискового агента, чем заголовок шестого уровня:<br> <br> <Н6>Семья, работа и прочая досадная ерунда</Н6><br> <br> И наконец, нужно, чтобы ключевые слова присутствовали и в обычном тексте:<br> <br> <Р> К вопросу о музыке и сексе в формате МРЗ. Анекдоты об этом до сих пор тревожат международную общественность. Наша работа состоит в том, чтобы свести их к минимуму.</Р><br> <br> Теперь нужно дать ответ еще на один важный вопрос. Нужно ли помещать метатеги с описаниями и ключевыми словами на всех страницах сайта или достаточно будет только его главной страницы? Вообще, лучше, если каждая страница сайта будет иметь полный набор метатегов; в этом случае поисковый агент сможет занести в базу данных ВСЕ страницы сайта. И, когда посетитель производит поиск по какому-либо ключевому слову, поисковая машина может выдать ссылку прямо на нужную страницу. Но иногда набором метатегов снабжают только главную страницу сайта, что вполне оправдано для сайтов "для своих", не стремящихся к особой популярности<br> <br> В свете вышесказанного, в крайне невыгодном положении оказываются страницы, вообще не содержащие никакого текста. Прежде всего, это наборы фреймов, в которых находится только набор тегов, описывающих различные фреймы и их содержимое. Поэтому в страницах наборов фреймов приходится создавать фиктивное содержимое с помощью парного тега <NOFRAMES>, где и перечислять необходимые ключевые слова. Или, что даже лучше, помещать набор ключевых слов в комментарий.<br> <br> Как видите, чтобы сделать свою страничку популярной, используя методы пассивной интернет-рекламы, нужно хорошо постараться. Придется не только расставить везде соответствующие метатеги, но и серьезно поработать над содержимым страниц, чтобы ненавязчиво разместить в нем ключевые слова. Иногда для этого даже приходится переделывать весь сайт.<br> <br> И все же положительный результат не гарантирован. Как сказал кто-то, половина средств, потраченных на рекламу, выброшены на ветер. Знать бы только, какая половина...<br> <br> К тому же, различные поисковые агенты трактуют информацию, помещенную на Web-страницу, по-разному. Одни тщательно проверяют и метатеги, и содержимое, выискивая соответствия между заявленным и действительным. Другие ограничиваются метатегами, да и то не всеми. Существует даже особая профессия — специалист по поисковым системам. Такие специалисты специально переделывают страницы так, чтобы их "заметил" тот или иной поисковый агент. Таких специалистов во всем мире очень немного (как и профессиональных "искалыциков" информации в Интернете), и ценятся они очень дорого.<br> <br> Теперь самое время сказать о "черной рекламе", недобросовестных способах "раскрутки" сайтов. Заключаются они в том, что в коде страницы создается набор ключевых слов, совершенно не соответствующих ее содержанию. Кроме того, с помощью специальных приемов на странице также создается особое "скрытое", не видимое посетителям содержимое, призванное "обмануть" поискового агента.<br> <br> Как можно создать такое содержимое? Например, с помощью тега комментария:<br> <br> <!— <ТITLЕ>Крутая страничка о музыке и аудио в формате МРЗ, работе,<br> <br> сексе с анекдотами обо всем этом</ТITLЕ> —> <ТITLЕ>Руководство по разведению суматранских тараканов</ТITLЕ><br> <br> Как видите, с помощью тега комментария здесь создается второе, невидимое название. Также можно поместить на страницу дополнительный невидимый текст, "согласующийся" с ключевыми словами:<br> <br> <!— <Н1>Музыка и секс</Н1> —><br> <br> <Н1>Ваши тараканы</Н1><br> <br> <!— <Р>K вопросу о музыке и сексе в формате МРЗ. Анекдоты об этом до сих пор тревожат международную общественность. Наша работа состоит в том, чтобы свести их к минимуму.</Р> —> <Р>Чтобы ваши тараканы были здоровыми, они должны хорошо питаться. Лучшее питание для породистых тараканов — хлебные крошки Pedigree Pal.<br><br> <br> Конечно, это чистейшей воды жульничество. И, как и любое жульничество, оно рассчитано на получение сиюминутного эффекта. Если вы серьезно работаете над своим интернет-представительством, никогда так не делайте.<br><br> <h1>Перезагрузка</h1>Перезагрузка<br><br> Метатег перезагрузки задает период времени, по истечении которого Web-обозреватель перезагрузит текущую страницу. Этот метатег может быть использован на сайтах новостей, причем новостей быстроизменяющихся. Посетитель может открыть страницу с такими "скоропортящимися" новостями и читать их, а Web-обозреватель сам по истечении заданного времени загрузит более "свежие" новости.<br> <br> Метатег перезагрузки также может применяться для автоматического перенаправления посетителя на другую страницу. Это бывает нужно, когда какой-либо популярный Web-сайт меняет свой адрес. Тогда Web-дизайнер изготавливает простейшую страничку, содержащую текст типа "Сейчас вы окажетесь на нашем сайте..." и гиперссылку для перехода на новый адрес, если автоматическое перенаправление почему-то не сработает. После этого ему остается добавить в секцию HTML-заголовка этой страницы метатег перезагрузки.<br> <br> Другое применение метатега перезагрузки — создание начальных страничек для сайтов, сделанных на основе фреймового дизайна. Как вы помните, наборы фреймов очень плохо обрабатываются поисковыми агентами. Первый выход из этой ситуации — поместить полный набор ключевых слов в тег комментария или <NOFRAMES>. Второй выход — создать начальную страничку с тем же набором ключевых слов, необходимых метатегов, заставкой и просьбой подождать пару секунд. Web-дизайнеры делают и так и этак, в зависимости от своих личных пристрастий.<br> <br> Чтобы поместить на страницу метатег перезагрузки, выберите пункт <b>Refresh </b>подменю <b>Head Tags </b>меню <b>Insert. </b>Также вы можете нажать кнопку <b>Refresh </b>(Рисунок 14.11), находящуюся на вкладке <b>Head </b>панели объектов. На экране появится диалоговое окно <b>Refresh, </b>показанное на Рисунок 14.12.<br> <br> <p align="center"><br><br> <h1>Поддержка Dreamweaver серверных директив</h1>Поддержка Dreamweaver серверных директив<br><br> К сожалению, поддержка серверных включений Dreamweaver MX оставляет желать лучшего.<br> <br> Разработчики Dreamweaver утверждают, что их программа читает файлы включений, расшифровывает их и выводит в окно документа вместе содержимым страницы, использующей эти включения. Так-то оно так, но не совсем. Dreamweaver действительно выводит содержимое серверных включений в окне документа, но некорректно обрабатывает HTML-разметку: он "проглатывает" весь HTML-код, находящийся в серверных включениях, и выводит только текст. Посмотрите, что он сделал с нашей страницей 14.2.shtm (Рисунок 14.22).<br> <br> <p align="center"><br><br> <h1>Поисковые машины</h1>Поисковые машины<br><br> Чтобы выяснить, что же такое пассивная реклама сайта, нам придется поговорить о поисковых машинах — особых Web-сайтах, предназначенных для поиска информации в Интернете. Если вы давно во Всемирной паутине, то знаете, что такое поисковая машина и как ей пользоваться. Для тех из вас, кто пока не так искушен в сетевых реалиях, предлагается небольшой ликбез.<br> <br> А для этого придется углубиться в древнюю историю Интернета...<br> <br> Итак, мысленно перенесемся в 1989 год. После создания языка HTML Сеть, а именно, та, что стали называть Всемирной паутиной WWW, стала расти как на дрожжах. Сначала Сетью пользовались, в основном, ученые, а значит, информация туда выкладывалась большей частью серьезная, небольшими частями, и найти ее было несложно. Некоторые из старых интернетчиков называют это время "золотым веком" Сети. Что ж, может, они и правы... Но только отчасти.<br> <br> Впоследствии произошло то, чего одни ждали с нетерпением, а другие -с ужасом. Сеть перестала быть пристанищем ТОЛЬКО ученого люда. В нее пришли сначала всяческого рода маргиналы, жаждущие общения, потом -компьютерщики, а в самое последнее время — обыватели, занятые в "некомпьютерных" областях человеческой деятельности. Сеть стала огромной, качество (в смысле, достоверность) выкладываемой в нее информации катастрофически снизилось, а поиск нужной информации среди тонн электронного хлама стал представлять серьезную проблему.<br> <br> Эту проблему надо было как-то решать. И ее решили, когда Сеть набрала достаточный объем.<br> <br> В 1995 году несколько американских студентов решили объединить свои коллекции полезных интернет-ссылок в своего рода базу данных, которой мог бы пользоваться каждый. При этом база данных содержала и сами адреса Web-страниц, и их описания, и набор ключевых слов — особых слов, однозначно описывающих содержимое каждой страницы (например, для музыкальных сайтов такими словами будут "музыка", "МРЗ", "аудио" и т. п.). Потом они написали специальную программу, осуществляющую поиск адреса по набранному в поле ввода слову и выдающую результат в виде Web-страницы с набором найденных ссылок. Кроме того, они написали еще одну программу, сканирующую Сеть в поисках новых Web-страниц и заносящую новые адреса в базу данных; сейчас такую программу называют поисковым агентом, поисковым роботом, или, в шутку, "пауком". Так возникла первая поисковая машина "Yahoo!"<b><a href="http://www.yahoo.com)">http://www.yahoo.com</a>, </b>получившая огромнейшую популярность и существующая до сих пор.<br> <br> Задумка оказалась настолько удачной, что породила волну подражаний. Поисковые машины плодились, как грибы после дождя. Сейчас их существует столько, что список даже более-менее крупных из них занял бы несколько страниц убористого текста. Ограничимся только несколькими (табл. 14.1).<br> <br> <p align="center"> <b></b><br><br> <h1>Работа с метатегами в среде Dreamweaver</h1>Работа с метатегами в среде Dreamweaver<br><br> А теперь давайте поговорим о том, как работать с метатегами в среде Dreamweaver. Мы уже знаем, что такое метатеги и как они могут нам помочь (и навредить), осталось выяснить, поддерживает ли их наша любимая программа.<br> <br> Поддерживает. И замечательно поддерживает!<br> <br> Однако, чтобы вы смогли с ними нормально работать, вам придется выполнить кое-какие настройки. Вспомните: метатеги представляют информацию, которая никак не отображается на странице. Поэтому нам нужно сделать их видимыми.<br> <br> Включите пункт-выключатель <b>Head Content </b>в меню <b>View </b>или нажмите комбинацию клавиш <Ctrl>+<Shift>+<W>. В верхней части окна документа Dreamweaver, ниже инструментариев появится панель заголовка Web-страницы (Рисунок 14.1). На этой панели в виде символических значков представлены все имеющиеся на странице метатеги.<br> <br> <p align="center"><br><br> <h1>Реклама в Интернете</h1>Реклама в Интернете<br><br> Вообще, рекламировать сайты в Сети можно по-разному. Очень грубо сетевую рекламу можно разделить на две разновидности: активную и пассивную или "раскрутку". Активная реклама — самая очевидная. Она включает в себя рисование рекламных баннеров, "расклеивание" их по чужим страницам в обмен на чужие баннеры, упоминание в сетевых новостях, написание хвалебных статей в сетевые СМИ, открытие почтовой рассылки и т. п., т. е. вы активно призываете сетевой люд посетить ваш сайт.<br> <br> А вот о пассивной рекламе так коротко не скажешь. Начать придется издалека...<br><br> <h1>Панель заголовка</h1>Рисунок 14.1. Панель заголовка<br><br><div style="text-align:center;"><img src="image/risunok-14-1-panel-zagolovka_1.gif" alt="Панель заголовка"></div><br> Вы можете выбрать любой значок и изменить значения атрибутов метатега, пользуясь редактором свойств. Для помещения на Web-страницу новых ме-татегов применяется подменю <b>Head Tags </b>меню <b>Insert </b>или вкладка <b>Head </b>панели объектов. Вы можете использовать тот способ, который вам больше нравится. Чтобы удалить ненужный метатег, выберите его и нажмите клавишу <Del>.<br> <br> А сейчас давайте рассмотрим различные метатеги, которые вы можете поместить на страницу, их параметры и случаи, когда они могут быть полезны.<br><br> <h1>Редактор свойств</h1>Рисунок 14.10. Редактор свойств при выбранном метатеге базового интернет-адреса<br><br><div style="text-align:center;"><img src="image/risunok-14-10-redaktor-svojstv-pri-vybrannom_1.gif" alt="Редактор свойств"></div><br> Если выбрать в панели заголовка метатег базового интернет-адреса, редактор свойств примет вид, показанный на Рисунок 14.10. В нем вы можете изменить сам базовый адрес в поле ввода <b>Href </b>и выбрать новый базовый фрейм в раскрывающемся списке <b>Target.</b><br><br> <h1>Кнопка Refresh панели объектов</h1>Рисунок 14.11. Кнопка <b>Refresh </b>панели объектов<br><br><div style="text-align:center;"><img src="image/risunok-14-11-knopka-refresh-paneli-obektov_1.gif" alt="Кнопка Refresh панели объектов"></div><br> В поле ввода <b>Delay </b>вводится значение задержки перед загрузкой Web-обозревателем другой страницы. Это значение вводится в секундах. Если введен ноль, Web-обозреватель выполняет загрузку немедленно, без всякой задержки.<br> <br> <p align="center"><br><br> <h1>Диалоговое окно Refresh</h1>Рисунок 14.12. Диалоговое окно <b>Refresh</b><br><br><div style="text-align:center;"><img src="image/risunok-14-12-dialogovoe-okno-refresh_1.gif" alt="Диалоговое окно Refresh"></div><br> С помощью набора переключателей <b>Action </b>задается собственно действие, которое произойдет по истечении заданной задержки. Dreamweaver позволяет выбрать два возможных действия:<br> <br> <li> перезагрузка текущей страницы (переключатель <b>Refresh This Document);</b><br> </li> <li> перенаправление на другую страницу (переключатель <b>Go To URL). </b>Адрес этой страницы вводится в поле ввода <b>Go To URL. </b>Вы также можете нажать кнопку <b>Browse </b>и выбрать нужную страницу в диалоговом окне Select File.<br> </li> Задав параметры перезагрузки, нажмите кнопку ОК для создания метатега или кнопку <b>Cancel </b>— для отказа от этого. Готовый метатег перезагрузки отображается в панели заголовка значком, показанным на Рисунок 14.11, т.е. так же, как и кнопка <b>Refresh </b>в панели объектов.<br> <br> Если выбрать в панели заголовка метатег перезагрузки, редактор свойств примет вид, показанный на Рисунок 14.13. В нем вы можете изменить значение задержки в поле ввода <b>Delay </b>и выбрать другое действие с помощью набора переключателей <b>Action </b>и поля ввода URL.<br> <br> <p align="center"><br><br> <h1>Редактор свойств</h1>Рисунок 14.13. Редактор свойств при выбранном метатеге перезагрузки<br><br><br><div style="text-align:center;"><img src="image/risunok-14-13-redaktor-svojstv-pri-vybrannom_1.gif" alt="Редактор свойств"></div><br><br> <br><br> <h1>Кнопка Link панели объектов</h1>Рисунок 14.14. Кнопка <b>Link </b>панели объектов<br><br><br><div style="text-align:center;"><img src="image/risunok-14-14-knopka-link-paneli-obektov_1.gif" alt="Кнопка Link панели объектов"></div><br> <p align="center"><br><br> <br><br> <h1>Диалоговое окно Link</h1>Рисунок 14.15. Диалоговое окно <b>Link</b><br><br><div style="text-align:center;"><img src="image/risunok-14-15-dialogovoe-okno-link_1.gif" alt="Диалоговое окно Link"></div><br> Адрес Web-страницы (или другого файла, например, таблицы стилей), с которой связывается текущая страница, вводится в поле ввода <b>Href. </b>Вы также можете нажать кнопку <b>Browse </b>и выбрать нужный файл в диалоговом окне <b>Select File.</b><br> <br> Поля ввода <b>ID </b>и <b>Title </b>нужно заполнять только в том случае, если вы собираетесь управлять этим метатегом из Web-сценария. Internet Explorer позволяет такое сделать. Первое из этих полей ввода задает уникальный идентификатор, с помощью которого можно обратиться к метатегу из сценария. Второе задает необязательное название данного метатега.<br> <br> <br><br> <h1>Редактор свойств при выбранномметатеге связи</h1>Рисунок 14.16. Редактор свойств при выбранном-метатеге связи<br><br><div style="text-align:center;"><img src="image/risunok-14-16-redaktor-svojstv-pri-vybrannom_1.gif" alt="Редактор свойств при выбранномметатеге связи"></div><br> Как может использоваться описанный выше метатег связи? Например, вы можете задавать связь между отдельными страницами, содержащими части большого документа, и его оглавлением. В этом случае отдельная страница будет помечена как chapter или section (а то и Subsection), а оглавление -contents или index. Также первую страницу документа можно пометить как Start, Последующую — как Next И Т. Д.<br> <br> Примечание 1 <br>Примечание 1<br><br> <br> Метатег задания связи создается с помощью тега<LINK>, а не <МЕТА>.<br><br> <h1>Кнопка Meta панели объектов</h1>Рисунок 14.17. Кнопка <b>Meta </b>панели объектов<br><br><div style="text-align:center;"><img src="image/risunok-14-17-knopka-meta-paneli-obektov_1.gif" alt="Кнопка Meta панели объектов"></div><br> С помощью раскрывающегося списка <b>Attribute </b>выбирается тип создаваемого метатега. Если он должен содержать описательную информацию о странице, например имя автора или название программы, в которой она была создана, выберите пункт <b>Name. </b>Если же эта информация носит системный характер, например задает текстовую кодировку, выберите пункт <b>HTTP-equivalent.</b><br> <br> <p align="center"><br><br> <h1>Диалоговое окно Meta</h1>Рисунок 14.18. Диалоговое окно <b>Meta</b><br><br><div style="text-align:center;"><img src="image/risunok-14-18-dialogovoe-okno-meta_1.gif" alt="Диалоговое окно Meta"></div><br> Задав тип метатега, можно ввести собственно данные. В поле ввода <b>Value </b>вводится наименование информации, например "Creator", если вы хотите ввести название программы, в которой была создана страница. Сами же данные вводятся в область редактирования <b>Content </b>(в нашем случае — "Macromedia Dreamweaver").<br> <br> Введя все данные, нажмите кнопку <b>ОК </b>для создания метатега или кнопку <b>Cancel </b>— для отказа от этого.<br> <br> Если при создании специального метатега в раскрывающемся списке <b>Attribute </b>был выбран пункт <b>Name, </b>то этот метатег будет отображаться в панели заголовка значком, показанным на Рисунок 14.17, т. е. так же, как и кнопка <b>Meta </b>в панели объектов. Если же был выбран пункт <b>HTTP-equivalent, </b>значок будет таким, как на Рисунок 14.19.<br> <br> <p align="center"><br><br> <h1>Значок которым в</h1>Рисунок 14.19. Значок, которым в панели заголовка отображается метатег типа <b>HTTP-equivalent</b><br><br><div style="text-align:center;"><img src="image/risunok-14-19-znachok-kotorym-v-paneli-zagolovka_1.gif" alt="Значок которым в"></div><br> Если выбрать в панели заголовка специальный метатег, редактор свойств примет вид, показанный на Рисунок 14.20. В нем вы можете изменить тип метатега с помощью раскрывающегося списка <b>Attribute, </b>задать новое наименование информации в поле ввода <b>Value </b>и изменить саму информацию в поле<br> ввода <b>Content.</b> Вот и все о метатегах.<br> <br> <p align="center"><br><br> <h1>Кнопка Description панели объектов</h1>Рисунок 14.2. Кнопка <b>Description </b>панели объектов<br><br><div style="text-align:center;"><img src="image/risunok-14-2-knopka-description-paneli-obektov_1.gif" alt="Кнопка Description панели объектов"></div><br> Текст описания страницы вводится в область редактирования <b>Description. </b>После этого остается нажать кнопку <b>ОК, </b>чтобы создать метатег описания, или кнопку <b>Cancel </b>— для отказа от этого. Готовый метатег описания отображается в панели заголовка значком, показанным на Рисунок 14.2, т. е. так же, как и кнопка <b>Description </b>в панели объектов.<br> <br> <p align="center"><br><br> <h1>Редактор свойств</h1>Рисунок 14.20. Редактор свойств при выбранном специальном метатеге<br><br><br><div style="text-align:center;"><img src="image/risunok-14-20-redaktor-svojstv-pri-vybrannom_1.gif" alt="Редактор свойств"></div><br><br> <br><br> <h1>Страницапример сделанная</h1>Рисунок 14.21. Страница-пример, сделанная без использования серверных директив<br><br><div style="text-align:center;"><img src="image/risunok-14-21-stranica-primer-sdelannaja-bez_1.gif" alt="Страницапример сделанная"></div><br> Сначала нужно выяснить, где находится основное содержимое страницы. В нашем случае это строка: "Это основное содержимое страницы.". Все остальное — повторяющиеся элементы.<br> <br> Наш случай — самый простой. Мы вынесем все, что находится от тега <BODY> до приведенной выше строки, в файл 14.1.inc, а все, что расположено после нее и до тега </BODY>, — в файл 14.2.inc. А саму страницу переименуем в 14.2.shtm. После всех этих пертурбаций ее код будет выглядеть так:<br> <br> <HTML> <head> <link rel="canonical" href="https://www.e-lave.ru//index.htm"/><br> <br> <ТITLE>Страница</ТITLE> </HEAD> <br> <BODY><br> <br> <!-- linclude file="14 .1.inc" --><br> <br> Это основное содержимое страницы.<br> <br> <!-- #include file="14.2.inc" --> <br> </BODY> <br> </HTML><br> <br> Как видите, от изначального HTML-кода страницы осталось не так уж и много. А теперь вообразите, что мы проделали такую операцию со всеми страницами большого и сложного сайта. Представляете, насколько уменьшатся все его файлы!<br> <br> Тогда файл 14. Line будет выглядеть так:<br> <br> <TABLE BORDER="1"> <TR><br> <br> <TD><A HREF="pagel.htm">Страница 1</A></TD> <br> <TD ROWSPAN="4"><br> <br> А файл 14.2.inc — так:<br> <br> </TD> </TR> <TR><br> <br> <TD><A НRЕF="раgе2.htm">Страница 2</A></TD><br> </TR> <TR><br> <br> <TD><A HREF="page3.htm">Страница 3</A></TD><br> </TR> <TR><br> <br> <TD><A HREF="page4.htm">Страница 4</A></TD> </TR> <br> </TABLE><br> <br> К сожалению, просмотреть страницы этого "дивного нового" сайта в Web-обозревателе мы не сможем. Ни один Web-обозреватель не понимает серверных директив, как ни один Web-сервер не понимает HTML-тегов. Это не его обязанности. Чтобы увидеть, как Web-сервер обработает серверные директивы, нам понадобится сам Web-сервер. А его у нас нет.<br><br> <h1>Webстраницы содержащие</h1>Рисунок 14.22. Web-страницы, содержащие серверные включения, Dreamweaver отображает некорректно<br><br><div style="text-align:center;"><img src="image/risunok-14-22-web-stranicy-soderzhashhie-servernye_1.gif" alt="Webстраницы содержащие"></div><br> Иначе, как грубейшей ошибкой, назвать это нельзя. Ведь автор прекрасно помнит, что третья версия Dreamweaver (3.0) нормально отображала содержимое файлов включений. Досадно, что новая версия, вместе с новыми возможностями, таит в себе новые ошибки,<br> <br> Однако не все так плохо. Вы можете отключить вывод содержимого серверных включений; в этом случае они будут просто помечаться особым значком (Рисунок 14.23). Для этого откройте окно <b>Preferences, </b>выбрав пункт <b>Preferences </b>в меню <b>Edit, </b>и переключитесь на вкладку <b>Invisible Elements. </b>Отключите флажок <b>Server-Side Includes </b>и нажмите кнопку <b>ОК.</b><br> <br> <p align="center"><br><br> <h1>Серверные включения</h1>Рисунок 14.23. Серверные включения, отображаемые в виде значков<br><br><div style="text-align:center;"><img src="image/risunok-14-23-servernye-vkljuchenija-otobrazhaemye_1.gif" alt="Серверные включения"></div><br> На этом поддержка серверных директив include Dreamweaver не заканчивается. Вы можете вставить серверное включение в код страницы, выбрав пункт <b>Server-Side Include </b>подменю <b>Script Objects </b>меню <b>Insert </b>или нажав кнопку <b>Server-Side Include </b>(Рисунок 14.24), находящуюся на вкладке <b>Script </b>панели объектов. После этого вам останется только выбрать нужный файл в появившемся на экране диалоговом окне <b>Select File.</b><br> <br> <p align="center"><br><br> <h1>Кнопка ServerSide Include панели объектов</h1>Рисунок 14.24. Кнопка <b>Server-Side Include </b>панели объектов<br><br><div style="text-align:center;"><img src="image/risunok-14-24-knopka-server-side-include-paneli_1.gif" alt="Кнопка ServerSide Include панели объектов"></div><br> Если вы выберете значок серверной директивы include, редактор свойств примет вид, представленный на Рисунок 14.25. С его помощью вы сможете изменить значения атрибутов этой директивы.<br> <br> <p align="center"><br><br> <h1>Вид редактора свойств</h1>Рисунок 14.25. Вид редактора свойств при выбранной серверной директиве include<br><br><div style="text-align:center;"><img src="image/risunok-14-25-vid-redaktora-svojstv-pri-vybrannoj_1.gif" alt="Вид редактора свойств"></div><br> Разновидность директивы include — с атрибутом file или virtual — задается с помощью набора переключателей <b>Туре. </b>Вам необходимо будет выбрать нужный переключатель: <b>File </b>или <b>Virtual.</b><br> <br> Само имя файла задается в поле ввода <b>Filename. </b>Вы также можете нажать значок папки, расположенный справа этого поля ввода, и выбрать нужный файл в появившемся на экране диалоговом окне <b>Select File.</b><br> <br> Нажав кнопку <b>Edit, </b>вы сможете отредактировать файл серверного включения. Dreamweaver отобразит его в окне документа в виде HTML-кода.<br> <br> Да, Dreamweaver очень странно поддерживает серверные директивы. Будем надеяться, что в следующей его версии этот недостаток будет устранен. А пока что можем только посоветовать изучать язык HTML и править код таких вот разделенных на части страниц вручную.<br> <br> На этом рассказ о серверных директивах окончен.<br><br> <h1>Диалоговое окно Description</h1>Рисунок 14.3. Диалоговое окно <b>Description</b><br><br><div style="text-align:center;"><img src="image/risunok-14-3-dialogovoe-okno-description_1.gif" alt="Диалоговое окно Description"></div><br> Не стоит создавать слишком большого описания. Будьте кратки. Большие описания очень плохо читаются, если читаются вообще. К тому же, многие поисковые машины ограничивают длину описания двумястами символов.<br> <br> Dreamweaver и здесь проявляет свою нелюбовь к русским буквам. Поэтому вам придется либо вводить описание страницы латинскими буквами, либо править сам HTML-код вручную.<br> <br> Если выбрать в панели заголовка метатег описания, редактор свойств примет вид, показанный на Рисунок 14.4. Как видите, вы можете изменить описание страницы в области редактирования <b>Description.</b><br> <br> <p align="center"><br><br> <h1>Редактор свойств</h1>Рисунок 14.4. Редактор свойств при выбранном метатеге описания Web-страницы<br><br><br><div style="text-align:center;"><img src="image/risunok-14-4-redaktor-svojstv-pri-vybrannom_1.gif" alt="Редактор свойств"></div><br><br> <br><br> <h1>Кнопка Keywords панели объектов</h1>Рисунок 14.5. Кнопка <b>Keywords </b>панели объектов<br><br><div style="text-align:center;"><img src="image/risunok-14-5-knopka-keywords-paneli-obektov_1.gif" alt="Кнопка Keywords панели объектов"></div><br> Ключевые слова, разделенные запятыми, вводятся в область редактирования <b>Keywords. </b>(Dreamweaver и в этом случае искажает русские буквы, так что будьте внимательны.) После этого остается нажать кнопку <b>ОК, </b>чтобы создать метатег ключевых слов, или кнопку <b>Cancel </b>— для отказа от этого. Готовый метатег ключевых слов отображается в панели заголовка значком, показанным на Рисунок 14.5, т. е. так же, как и кнопка <b>Keywords </b>панели объектов.<br> <br> <p align="center"><br><br> <h1>Диалоговое окно Keywords</h1>Рисунок 14.6. Диалоговое окно <b>Keywords</b><br><br><div style="text-align:center;"><img src="image/risunok-14-6-dialogovoe-okno-keywords_1.gif" alt="Диалоговое окно Keywords"></div><br> Здесь так же, как и в случае с описанием страницы, не стоит создавать слишком большого набора ключевых слов. Ограничьтесь только теми ключевыми словами, которые максимально полно описывают вашу страницу. Помните, что и на длину набора ключевых слов также существует ограничение в 200 символов. И не гонитесь за дешевой сиюминутной популярностью, помещая в набор все привлекательные ключевые слова, которые можете вспомнить.<br> <br> Если выбрать в панели заголовка метатег набора ключевых слов, редактор свойств примет вид, показанный на Рисунок 14.7. Как видите, вы можете изменить набор ключевых слов в области редактирования <b>Keywords.</b><br> <br> <p align="center"><br><br> <h1>Редактор свойств</h1>Рисунок 14.7. Редактор свойств при выбранном метатеге набора ключевых слов<br><br><br><div style="text-align:center;"><img src="image/risunok-14-7-redaktor-svojstv-pri-vybrannom_1.gif" alt="Редактор свойств"></div><br><br> <br><br> <h1>Кнопка Base панели объектов</h1>Рисунок 14.8. Кнопка <b>Base </b>панели объектов<br><br><br><div style="text-align:center;"><img src="image/risunok-14-8-knopka-base-paneli-obektov_1.gif" alt="Кнопка Base панели объектов"></div><br> <p align="center"><br><br> <br><br> <h1>Диалоговое окно Base</h1>Рисунок 14.9. Диалоговое окно <b>Base</b><br><br><div style="text-align:center;"><img src="image/risunok-14-9-dialogovoe-okno-base_1.gif" alt="Диалоговое окно Base"></div><br> Базовый интернет-адрес вводится в поле ввода <b>Href. </b>Вы также можете нажать кнопку <b>Browse </b>и выбрать в диалоговом окне <b>Select File </b>какой-либо файл, находящийся в нужной папке. После этого вам останется только удалить имя файла, оставив лишь путь.<br> <br> Базовый фрейм выбирается с помощью раскрывающегося списка <b>Target. </b>Если ваша страница представляет собой набор фреймов, в этом списке будут перечислены все их имена.<br> <br> Задав базовые адрес и фрейм, нажмите кнопку <b>ОК, </b>чтобы создать метатег, или кнопку <b>Cancel </b>— для отказа от этого. Готовый метатег базового адреса отображается в панели заголовка значком, изображенным на Рисунок 14.8, т. е. так же, как и кнопка <b>Base </b>панели объектов.<br> <br> <p align="center"><br><br> <h1>Серверные директивы</h1>Серверные директивы<br><br> Теперь пришла пора поговорить о серверных директивах.<br><br><br> <h1>Специальные метатеги</h1>Специальные метатеги<br><br> Метатеги могут содержать любые другие данные. В частности, каждая Web-страница, созданная в Dreamweaver, содержит сведения о текстовой кодировке, помещенные в нее с помощью такого вот специального метатега. Популярный Web-редактор Microsoft FrontPage с помощью специального метатега метит страницы, созданные в нем. Также и сам Microsoft Internet Explorer вставляет в секцию заголовка всех страниц, которые вы сохраняете на диске, особую метку вида "здесь был Internet Explorer". Так что специальные метатеги без работы не остаются.<br> <br> Чтобы поместить на страницу специальный метатег, выберите пункт <b>Meta </b>подменю <b>Head Tags </b>меню <b>Insert. </b>Также вы можете нажать кнопку <b>Meta </b>(Рисунок 14.17), находящуюся на вкладке <b>Head </b>панели объектов. На экране появится диалоговое окно Meta, показанное на Рисунок 14.18.<br> <br> <p align="center"><br><br> <h1>Стандартный набор серверных директив</h1>Стандартный набор серверных директив<br><br> Прежде всего, давайте рассмотрим, как серверные директивы вставляются в HTML-код. Проблема заключается в том, что их нужно как-то выделить, чтобы Web-сервер сразу их "увидел", а Web-обозреватель, наоборот, "не заметил". Поэтому серверные директивы помещаются в тег комментария и помечаются значком # ("решетка"):<br> <br> <!— #<Директива> <br> <Атрибут1>=<Значение1><br> <Атрибут2>=<Значение2> ... —><br> <br> Однако, кроме этого, надо выполнить еще кое-какие действия. Чтобы Web-сервер "знал", что в какой-либо странице используются серверные директивы, нужно изменить расширение файла, в котором сохранена эта страница. Как вы помните, обычно HTML-файлы имеют расширение htm или html. Так вот: эти расширения нужно изменить соответственно на shtm и shtml.<br> <br> Подавляющее большинство Web-серверов требуют, чтобы Web-страницы с серверными директивами находились в файлах с расширениями shtm и shtml. Правда, встречаются серверы с другими требованиями (например, малоизвестный Web-сервер со странным названием "л3" требует, чтобы такие файлы имели расширение ssi), но подобные случаи весьма редки. И все же, невредно было бы прежде, чем применять в своих страницах серверные директивы, прочитать документацию к серверу или проконсультироваться у его администратора.<br> <br> Как видите, серверная директива может иметь (и практически всегда имеет) несколько атрибутов, которым присвоены значения. В этом смысле серверные директивы чем-то похожи на теги HTML.<br><br> <h1>Связи между Webстраницами</h1>Связи между Web-страницами<br><br> Метатег, задающий связь между двумя разными Web-страницами или между Web-страницей и другим файлом, используется очень редко и практически всегда -- только специальными программами. Обычными Web-обозревателями применяется только одна его форма, которая служит для привязки к странице внешней таблицы стилей. (О таблицах стилей см. главу 10.) Другие формы этого метатега не нашли широкого применения.<br> <br> Однако давайте все же рассмотрим этот метатег. А вы уж сами для себя решите, использовать его или не использовать.<br> <br> Итак, чтобы поместить на страницу метатег связи, выберите пункт <b>Link </b>подменю <b>Head Tags </b>меню <b>Insert. </b>Также вы можете нажать кнопку <b>Link </b>(Рисунок 14.14), находящуюся на вкладке <b>Head </b>панели объектов. На экране появится диалоговое окно <b>Link, </b>показанное на Рисунок 14.15.<br> <br> <p align="center"><br><br> <h1>Популярнейшие поисковые машины</h1>Таблица 14.1. Популярнейшие поисковые машины<br><br> <table border=1> <tr> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> </tr> <tr> <td> </td> <td> <b>Зарубежные/ отечественные</b><br> <br> </td> <td> <b>Название</b><br> <br> </td> <td> <b>Интернет-адрес</b><br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> Зарубежные<br> <br> </td> <td> Yahoo!<br> AltaVista<br> ListBot<br> InfoSeek<br> Lycos<br> Google<br> <br> </td> <td> <a href="http://www.yahoo.com">http://www.yahoo.com</a> <a href="http://www.altavista.com">http://www.altavista.com</a> <br> <a href="http" ://www. listbot.com> http ://www.listbot.com </a><a href="http://www.infoseek.com">http://www.infoseek.com</a> <a href="http://www.lycos.com">http://www.lycos.com</a><a href="http://www.google.com"> http://www.google.com</a><br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> Отечественные<br> <br> </td> <td> Апорт <br> Яндекс<br> Рамблер<br> <br> </td> <td> <a href="http://www.aport.ru">http://www.aport.ru</a> <a href="http://www.yandex.ru">http://www.yandex.ru</a> <a href="http://www.rambler.ru">http://www.rambler.ru</a><br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> </tr> </table> Поисковые машины делятся на две большие группы, отличающиеся принципом работы - на классические поисковые машины и каталоги ссылок. Сейчас мы их рассмотрим.<br> <br> Классическая поисковая машина (поисковик) — это, грубо говоря, база данных ссылок плюс программа поиска. Это поисковая машина в чистом виде. Она занимается тем, что хранит адреса Web-страниц в базе данных и выдает пользователям результаты поиска по ключевым словам. При этом она работает полностью в автоматическом режиме: сама находит и заносит в базу данных новые Web-страницы, сама формирует их описания и наборы ключевых слов, сама обновляет адреса уже существующих страниц, если они изменились, и их описания.<br> <br> Присутствие пресловутого "человеческого фактора" в работе классических поисковиков минимально. (Хотя, разработчик может заложить в программу - агента и программу поиска какие-то свои наработки в плане оптимизации поиска, но на этом влияние человека на машину заканчивается.)<br> <br> Также в базах данных поисковиков отсутствует какая-либо систематизация результатов их бесконечного поиска. Они работают по принципу "вали валом — потом разберем". (За тем исключением, что это "потом" никогда не наступит.) Они просто собирают адреса, автоматически формируют описание и набор ключевых слов и "валят" это в свою базу данных. Они могут лишь искать и регистрировать, потому что они — только программы. Способность же анализировать и систематизировать доступна исключительно человеку.<br> <br> Каталоги ссылок базируются совсем на другом принципе. Во-первых, они пополняются не роботами, а людьми; люди заносят в них адреса и описания страниц и наборы ключевых слов для поиска. Во-вторых, ссылки в их базах данных жестко систематизированы и разбиты по разделам и подразделам. В-третьих, в каталог допускаются далеко не все страницы, а только те. которые действительно содержат что-то полезное.<br> <br> Как же выглядит процесс занесения новой ссылки в каталог? Давайте распишем его по шагам.<br> <br> <li> Владелец сайта формирует набор параметров, вносимых в каталог. Это название сайта, его краткое описание, набор ключевых слов, разумеется, интернет-адрес сайта и свой почтовый адрес. Почтовый адрес может понадобиться, например, чтобы уведомить владельца о том, что его сайт внесен в базу данных каталога.<br> </li> <li> Владелец сайта заходит на особую Web-страницу и вводит все эти данные в форму ввода, после чего они сохраняются в базе данных новых поступлений. Заметьте, что эти данные не помещаются сразу в основную базу данных каталога, в которой, собственно, и осуществляется поиск, — это будет выполнено позже.<br> </li> <li> Человек, работающий на администрацию каталога, своего рода цензор или, как говорят опытные интернетчики, модератор каталога, просматривает данные вновь внесенного сайта в базе данных новых поступлений. После этого он заходит на этот сайт и проверяет, соответствует ли он введенным владельцем данным. Если это так, данные о новом сайте переносятся в основную базу данных каталога, а владельцу сайта посылается соответствующее уведомление. В противном случае данные о новом сайте удаляются, о чем его владельцу опять же посылается уведомление.<br> </li> <li> Владелец сайта получает посланное ему уведомление. Если его сайт внесен в базу данных каталога, это уведомление содержит номер, под которым сайт находится в базе данных, и пароль для доступа к его данным. В дальнейшем владелец может изменить данные сайта в базе данных каталога. Если же новый сайт почему-то не попал в каталог, модератор извиняется перед его владельцем и советует наполнить его Web-творение чем-нибудь полезным.<br> </li> Недостатками каталогов являются медленная работа и неполный охват Сети. Люди-модераторы работают значительно медленнее программы, осуществляющей поиск страниц в Сети, поэтому процесс добавления данных о новом сайте в базу каталога может затянуться надолго. К тому же, люди часто ошибаются. Далее, из-за такой достаточно жесткой цензуры новых поступлений может оказаться, что каких-то сайтов или страниц в базе данных каталога нет, т. к. модератор их почему-то забраковал.<br> <br> В настоящее время классические поисковые машины и каталоги в чистом виде очень редко встречаются. Абсолютное большинство современных поисковых машин используют оба этих подхода, т. е. содержат и классический поисковик, и каталог ссылок. Таким образом, они комбинируют достоинства и обходят недостатки этих двух разновидностей поисковых машин.<br> <br> И все же, несмотря на обилие поисковых машин обоих типов поиск в Интернете — задача чрезвычайно сложная. Особенно она осложняется, если вам нужно найти что-то редкое или очень конкретное. Существует даже такая профессия — искатель информации в Интернете, профессия достаточно редкая, требующая, в основном, интуиции и поэтому хорошо оплачиваемая. Это даже не профессия — это призвание, как, например, музыкант или писатель.<br> <br> Ну ладно. Оставим в покое каталоги (с ними все ясно) и подробнее поговорим о классических поисковиках. Точнее, о программах-агентах, осуществляющих поиск новых Web-страниц. Давайте выясним, как они работают.<br><br> <h1>Возможные значения полей ввода Pel и Rev</h1>Таблица 14.2. Возможные значения полей ввода Pel и Rev<br><br> <table border=1> <tr> <td> </td> <td> </td> <td> </td> <td> </td> </tr> <tr> <td> </td> <td> <b>Значение</b><br> <br> </td> <td> <b>Описание</b><br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> Alternate<br> <br> </td> <td> Заменяющая страница<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> Appendix<br> <br> </td> <td> Страница, содержащая приложение к большому многостраничному документу<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> Bookmark<br> <br> </td> <td> Закладка<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> Chapter<br> <br> </td> <td> Страница, содержащая отдельную часть большого многостраничного документа<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> Contents<br> <br> </td> <td> Страница-оглавление<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> Copyright<br> <br> </td> <td> Страница, содержащая сведения об авторских правах<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> Glossary<br> <br> </td> <td> Страница со словарем специальных терминов<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> Help<br> <br> </td> <td> Страница со справочными сведениями<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> Index<br> <br> </td> <td> Страница-оглавление или список всех страниц сайта (так называемая карта сайта)<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> Next<br> <br> </td> <td> Следующая страница в последовательности<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> Prev<br> <br> </td> <td> Предыдущая страница в последовательности<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> Section<br> <br> </td> <td> Страница, содержащая отдельную часть большого многостраничного документа<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> Start<br> <br> </td> <td> Первая страница в последовательности<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> Stylesheet<br> <br> </td> <td> </td></tr></table> <br><br> <h1>Встроенные переменные Webсервера</h1>Таблица 14.3. Встроенные переменные Web-сервера<br><br> <table border=1> <tr> <td> </td> <td> </td> <td> </td> <td> </td> </tr> <tr> <td> </td> <td> <b>Переменная</b><br> <br> </td> <td> <b>Описание</b><br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> DOCUMENT_NAME<br> <br> DOCUMENT_URL<br> <br> <br> DATE LOCAL DATE GMT <br> <br> LAST_MODIFIED<br><br> LAST_MODDATE<br> <br> </td> <td> Возвращает имя файла, содержащего текущую Web-страницу<br> <br> Возвращает путь к файлу, содержащему текущую Web-страницу, относительно корневой папки сайта<br> <br> Возвращает текущую дату для местной временной зоны Возвращает текущую дату по Гринвичу<br> <br> Возвращает дату последнего изменения файла текущей Web-страницы для местной временной зоны<br> <br> Возвращает дату последнего изменения файла текущей Web-страницы по Гринвичу<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> </td> <td> </td> <td> </td> </tr> </table> В частности, именно с помощью данной серверной директивы на страницу помещается текущая дата. Для этого, как вы поняли, нужно использовать директиву:<br> <br> <!— #echo var="DATE_LOCAL" —><br> <br> ИЛИ<br> <br> <!— #echo var="DATE_GMT" —><br> <br> если нужно вывести дату по Гринвичу.<br> <br> Также многие Web-серверы поддерживают другие серверные переменные. Чтобы выяснить их, обратитесь к документации по серверу или к его администратору.<br><br> <h1>Таблица стилей</h1>Таблица стилей<br><br> <td> </td> <tr> <td> </td> <td> Subsection<br> <br> </td> <td> Страница, содержащая отдельную часть большого многостраничного документа, более мелкую, чем Chapter или Section<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> </td> <td> </td> <td> </td> </tr> Вы также можете ввести в поле ввода Rel или Rev несколько значений, разделив их пробелами. Введя все данные, нажмите кнопку ОК для создания метатега или кнопку <b>Cancel </b>— для отказа от этого. Готовый метатег связи отображается в панели заголовка значком, изображенным на Рисунок 14.14, т. е. так же, как и кнопка <b>Link </b>панели объектов.<br> <br> Если выбрать в панели заголовка метатег связи, редактор свойств примет вид, показанный на Рисунок 14.16. В нем вы можете изменить значение адреса связанного файла в поле ввода <b>Href, </b>задать новый тип связи в полях ввода Rel и Rev и изменить параметры <b>ID </b>и <b>Title.</b><br> <br> <p align="center"><br><br> <h1>Каждый тег HTML обязан поддерживать </h1>Внимание<br><br> Каждый тег HTML обязан поддерживать атрибут TITLE, с помощью которого задается название этого тега. Это название высвечивается, если пользователь подведет курсор мыши к соответствующему элементу страницы. Однако мало кто заполняет этот атрибут для каждого тега. Да и поддерживается этот атрибут в полном объеме только Internet Explorer.<br> Вид устанавливаемой связи задается с помощью полей ввода Rel и Rev. Первое из них задает, чем файл, интернет-адрес которого указан в поле ввода Href, является для текущей страницы (например, таблицей стилей). Второе — чем текущая страница является для того файла (например, страницей-оглавлением). Все возможные значения, которые можно вводить в эти поля ввода, перечислены в табл. 14.2.<br> <br> <p align="center"> <br><br> <h1>серверы поддерживают обе разновидности директивы </h1>Внимание<br><br> Не все Web- серверы поддерживают обе разновидности директивы include. Например, Microsoft Internet Information Server поддерживает только форму с атрибутом file.<br><br> <h1>Введение в серверные директивы</h1>Введение в серверные директивы<br><br> Весь HTML-код, из которого состоит Web-страница, пересылаемая по Сети, обрабатывается клиентом. Клиентом практически всегда является Web-обозреватель (существуют и другие программы, обрабатывающие Web-страницы на стороне клиента, но мы не будем их рассматривать). Именно для Web-обозревателя предназначены все эти теги, что мы создаем вручную или в Web-редакторе. Web-сервер же их совсем не понимает.<br> <br> Задача Web-сервера совсем другая: принять запрос от клиента, найти нужный файл на своих дисках и переслать его клиенту для обработки. Ну и, разумеется, он должен устойчиво работать и потреблять как можно меньше системных ресурсов. Обработка HTML-кода в его обязанности не входит.<br> <br> Однако разработчики Web-серверов все же заставили их понимать некоторые команды, с помощью которых можно обработать HTML-код. Как вы уже поняли, эта обработка выполняется на стороне сервера, более того, самим Web-сервером. Конечно, эти команды позволяют выполнить самые простые действия: вставить в содержимое одного файла содержимое другого, поместить в код текущую дату и т. п. Но даже в этом случае они — хорошее подспорье Web-дизайнеру.<br> <br> Эти команды и называются серверными директивами. Несмотря на всю их простоту, они позволяют решить много проблем, неустранимых иными средствами.<br> <br> Помните, как мы пытались поместить на Web-страницу текущую дату? Для этого нам пришлось в свое время писать Web-сценарий. А если Web-обозреватель не поддерживает Web-сценарии? А если компьютер, на котором он работает, настолько маломощен, что пользователь отключил поддержку сценариев? В таком случае сценарий, помещающий на страницу дату, не выполнится.<br> <br> Web-сервер же работает всегда, и серверная директива, осуществляющая вставку в HTML-код текущей даты, выполнится в любом случае. Web-обозреватель же, загрузивший страницу, даже не будет знать, что эта страница была предварительно обработана сервером. (Вообще-то, об этом догадаться может если не Web-обозреватель, то опытный пользователь, имеющий представление о Web-серверах и их настройке.)<br> <br> Так же трудно вставить HTML-код, находящийся в одном файле, в другой файл средствами клиентских Web-сценариев. Web-сервер же с помощью специальной директивы делает это с легкостью. Таким образом, можно создавать Web-страницы, "собираемые" на стороне сервера из множества час-<br> <br> тей: заголовка, полосы навигации, сведений об авторских правах и, разумеется, основного содержимого. Это идеальное решение многих проблем сайтов, созданных на основе табличного дизайна. Далее об этом будет рассказано подробнее.<br> <br> К несчастью, как уже было сказано, серверные директивы никем не стандартизировались. Каждый Web-сервер поддерживает свой набор этих директив, а каких — зависит от доброй воли его создателя. Правда, существует некий набор директив, поддерживаемых большинством серверов, этакий неписаный стандарт "де-факто". Применяя в своих страницах директивы из этого набора, вы можете быть уверены, что они с большой долей вероятности будут поддерживаться сервером, на котором вы собираетесь их (страницы) разместить.<br> <br> А пока что давайте рассмотрим серверные директивы, поддерживаемые подавляющим большинством Web-серверов, за исключением самых уж примитивных. Назовем их стандартным набором серверных директив, хотя их фактически никто не стандартизировал. Но все равно перед тем, как применять серверные директивы, обратитесь к документации на Web-сервер или к его администратору, чтобы выяснить, какие директивы ваш сервер поддерживает.<br><br> <h1> Использование пакета Dreamweaver </h1> <h1>Что такое серверное программирование</h1>Что такое серверное программирование<br><br> Действительно, что это такое и с чем его едят?<br><br> <h1>Как данные передаются по Сети</h1>Как данные передаются по Сети<br><br> Как вы уже знаете, для пересылки данных по Интернету, да и по любой локальной или глобальной компьютерной сети, используется особый набор .правил, называемый протоколом. Протокол определяет, каким образом данные будут шифроваться и упаковываться для последующей передачи по сети. Естественно, что и передающая, и принимающая программы должны поддерживать один и тот же протокол, чтобы "понять" друг друга. (Иначе возникнет так называемая несовместимость по протоколу передачи данных, штука весьма неприятная.) Собственно, уже говорилось об интернет-протоколах и повторяться сейчас нет смысла.<br> <br> Также вы знаете, что для пересылки по Сети Web-страниц и связанных с ними файлов (графических изображений, звуков, архивов и т. п.) используется протокол HTTP. Он же применяется и для передачи данных, причем для этого предусмотрены два метода передачи данных. Оба способа широко используются в интернет-программировании и имеют свои преимущества и недостатки. Давайте их рассмотрим.<br> <br> Первый способ носит название GET по значению соответствующего параметра формы. При его использовании данные передаются как часть интернет-адреса в HTTP-запросе.<br> <br> Как вы помните, Web-обозреватель для того, чтобы получить от Web-сервера нужный ему файл, отправляет этому серверу так называемый HTTP-запрос, включающий в себя интернет-адрес необходимого файла. Так вот, данные могут быть переданы как часть этого адреса.<br> <br> Возьмем, например, такой набор данных, приведенный чуть выше:<br> <br> name1 = Ivan surname = Ivanovich name2 = Ivanov age = 30<br> <br> Теперь подготовим его для пересылки по методу GET (сами данные выделены полужирным шрифтом):<br> <br> <a href="http://www.somesite.ru/bin/program.exe?name1=Ivan">http://www.somesite.ru/bin/program.exe?name1=Ivan</a>&surname2=Ivanovich& name2=Ivanov&age=30<br> <br> Как видите, пересылаемые по методу GET данные помещаются в самый конец интернет-адреса и отделяются от него вопросительным знаком. При этом пары "имя" = "значение" отделяются друг от друга знаком "коммерческое и" ("&"). Все очень просто и наглядно.<br> <br> Такая простота и наглядность представления данных — основное преимущество метода GET. Как говорится, все на виду. Также значительно упрощается отладка Web-страниц: поскольку передаваемый Web-серверу адрес отображается в строке адреса Web-обозревателя, вы всегда сможете увидеть, что именно было передано. (Однако, как вы понимаете, конфиденциальные данные таким методом не передашь — их увидят все, кто стоит за вашей спиной.)<br> <br> Часто создаются Web-сайты, гиперссылки в которых организуется следующим образом:<br> <br> <a href="http://www.mysite.ru/bin/choose.exe?chapter=3">http://www.mysite.ru/bin/choose.exe?chapter=3</a><br> <br> Как видите, фактически это ссылки на серверную программу, содержащие один параметр chapter и его значение. Это значит, что все остальные страницы такого сайта формируются серверной программой динамически, на основании полученных параметров. По такому принципу очень часто строятся сайты-справочники, сайты-каталоги программ, электронные магазины и другие сайты, содержащие большое количество классифицированной информации.<br> <br> К несчастью, метод GET обладает огромным недостатком: с его помощью невозможно передавать большие объемы данных. Это происходит из-за ограничения, накладываемого стандартами на длину интернет-адреса: не более 256 символов. Вычтите отсюда длину собственно адреса серверной программы — и вы получите максимально допустимый размер ваших данных. Второй недостаток метода GET - обратная сторона его достоинства. Данные, пересылаемые им, открыты для всеобщего обозрения и могут быть легко прочитаны в строке адреса Web-обозревателя.<br> <br> Метод GET стоит использовать, если пересылаемые серверной программе данные заведомо невелики и не являются секретными. В частности, он используется для пересылки ключевых слов поисковым машинам, в сайтах, построенных на основе серверной программы (см. выше) и т. п. Если же вам нужно пересылать объемистые либо конфиденциальные данные, используйте второй метод передачи, называемый POST.<br> <br> Метод POST передает данные серверной программе все в том же HTTP-запросе, но уже не частью интернет-адреса, а в виде так называемых дополнительных данных. Поскольку размер дополнительных данных не ограничен (по крайней мере, он может быть очень велик), вы можете передавать все, что угодно, в каких угодно количествах. В частности, именно этим способом Web-серверу могут передаваться даже файлы.<br> <br> Достоинства метода POST: отсутствие ограничения на объем передаваемых данных и "невидимость" их. Недостатки: сложность расшифровки данных и трудность отладки. Методом POST передаются, например, анкетные данные, адреса покупателей в электронных магазинах, литературные произведения на сайты <a href="http://www.stihi.ru">http://www.stihi.ru</a> и <a href="http://www.proza.ru">http://www.proza.ru</a> и т. п. В общем, то, что имеет большие объемы.<br> <br> Как говорят, комитет WWWC намерен вообще со временем отказаться от метода GET и все данные передавать с помощью метода POST. Пока что метод GET просто объявлен не рекомендованным для использования во вновь создаваемых сайтах, реально же он еще поддерживается Web-обозревателями .<br> <br> Вот мы и выяснили все о серверных программах. Ну, может, не все, но пока нам этого достаточно. Теперь поговорим о том, насколько полно все это поддерживается Dreamweaver MX.<br><br> <h1>Как Webобозреватель отправляет введенные данные</h1>Как Web-обозреватель отправляет введенные данные<br><br> В начале этой главы мы говорили о том, что для сбора данных посетителя используются элементы управления, помещаемые на самих Web-страницах. Это обычные элементы управления, знакомые вам по приложениям Windows: поля ввода, кнопки, списки, флажки и пр. Посетитель сайта вводит в них данные и нажимает особую кнопку, запускающую отправку данных Web-серверу, а значит, и серверной программе.<br> <br> Элементы управления, предназначенные для ввода данных посетителя, помещаются в форму. Форма — это особый элемент страницы, выполняющий собственно кодирование данных и пересылку их Web-серверу. (Можно сказать, что форма является родителем для элементов управления.) Сами же элементы управления только принимают данные от посетителя, но не кодируют и не передают их.<br> <br> Каждый элемент управления, находящийся в форме, должен иметь уникальное имя. Эти имена используются Web-обозревателем для того, чтобы представить введенные в форму данные в удобочитаемом для серверной<br> <br> Например:<br> <br> name1 = Ivan surname = Ivanovich name2 = Ivanov age = 30<br> <br> Здесь мы рассмотрели идеальный случай, когда значения каждого элемента управления содержат только допустимые с точки зрения протокола HTTP символы: буквы латинского алфавита, цифры, тире, подчеркивания и некоторые другие знаки. (Как вы помните, HTTP — протокол передачи файлов, используемый Web-сервером.) Если же вы передаете данные, содержащие недопустимые символы, скажем, пробелы или буквы русского алфавита, каждый такой символ будет представлен в виде шестнадцатеричного кода, которому предшествует знак процента, например, так (закодированные символы пробела выделены полужирным шрифтом):<br> <br> fullname=Ivan%20lvanovich%20Ivanov age=30<br> <br> Благодаря такому формату данных написание обрабатывающих их серверных программ становится очень простым. В частности, язык Perl имеет встроенные средства расшифровки для этого формата.<br> <br> Представленные в вышеуказанном виде данные впоследствии кодируются с использованием одного из предопределенных методов кодирования и отправляются по Сети серверной программе. Всем этим фактически занимается форма (но не элементы управления).<br> <br> Сам процесс отправки данных начинается после того, как пользователь нажмет особую кнопку. Эта кнопка носит название <b>Отправить </b>(Submit -в англоязычных программах) и обязательно должна присутствовать в форме. Также в форме может присутствовать кнопка <b>Сброс </b>(Reset), обнуляющая введенные пользователем данные. Как правило, эти кнопки располагаются в самом низу формы.<br> <br> Вы можете считать, что форма — это некое подобие обычного диалогового окна Windows-приложения, принимающего данные от пользователя, кодирующего их определенным образом и отсылающего основному окну. (Диалоговые окна Windows-приложений также обязательно имеют две кнопки: <b>ОК </b>и <b>Отмена </b>(Cancel).) Но если в случае обычного Windows-приложения программист должен явно задать, как будут шифроваться и пересылаться данные, в случае с Web-формой этого делать не нужно. Вам необходимо будет только задать три обязательных параметра:<br> <br> <li> интернет-адрес серверной программы, которая будет обрабатывать данные формы;<br> </li> <li> метод кодирования отправляемых данных; </li> <li> один из двух методов отправки данных.<br> </li> О методах отправки данных мы поговорим чуть позже. А сейчас выясним все о двух других обязательных параметрах формы.<br> <br> Интернет-адрес серверной программы очень похож на интернет-адрес любого другого файла, например Web-страницы. Взгляните сами — так будет выглядеть адрес CGI-программы:<br> <br> http: //www. somesite. ru/bin/program.exe Так — адрес расширения Web-сервера: http: //www.somesite.ru/bin/extension.dll Это — адрес активной серверной страницы:<br> <br> http: //www. somesite . ru/asps/active_page . asp<br> <br> А это — адрес программы-сценария, написанной на языке Perl:<br> <br> http: //www. somesite. ru/scripts/perl_script.pl<br> <br> Как видите, ничего сложного в этом нет. Серверная программа — обычный файл, помещенный на жестких дисках серверного компьютера, и ссылка на него также не представляет ничего особенного.<br> <br> Для кодирования передаваемых по Сети данных обычно используются три наиболее популярных метода: application/x-www-form-urlencoded, multipart/form-data и (значительно реже) text/plain. Возможно применение и других способов кодирования, но в абсолютном большинстве случаев используются три перечисленных. Вдобавок эти три метода кодирования поддерживаются большинством программ Web-обозревателей.<br> <br> Примечание 1 <br>Примечание 1<br><br> <br> Если вы еще помните, что такое тип данных MIME, то, взглянув на приведенные выше названия методов кодирования данных, сразу увидите, что это как раз типы MIME. Именно с их помощью задаются методы кодирования.<br> В подавляющем большинстве случаев используется метод кодирования application/x-www-form-uriencoded. Кстати, именно он применяется по умолчанию, если метод кодирования не задан. Метод кодирования multipart/form-data используется, если вы собираетесь отправить на Web-сервер файлы; он обеспечивает соответствующее такому случаю преобразование двоичных данных. Последний метод — text/plain -- представляет данные в виде обычного текста, что может быть полезно, если данные формы будут отправляться по электронной почте (иногда применяется и такой способ передачи данных).<br> <br> Итак, с кодированием данных разобрались. Остается выяснить, как же эти данные передаются по каналам Сети.<br><br> <h1>Как Webсервер</h1>Как Web-сервер<br><br> <b>обрабатывает данные пользователя</b><br> Итак, каким же образом программа Web-сервера обрабатывает данные, отправленные ей пользователем?<br> <br> Да никак. Web-сервер не приспособлен их обрабатывать. Его задача: прием от Web-обозревателя запроса на файлы (Web-страницы, таблицы стилей, графические изображения, фильмы, звуки, архивы, исполняемые файлы и т. п.), поиск этих самых файлов на жестких дисках серверного компьютера и отправка найденных файлов назад Web-обозревателю. Это его основная задача. Конечно, некоторые особо мощные серверы могут выполнять дополнительные действия над отправляемыми файлами перед собственно их отправкой (в частности, выполнять серверные директивы). Есть и программы-"многостаночники", выполняющие функции не только Web-сервера, но и сервера FTP, почты, новостей UseNet и бог знает чего еще. Но основная функция: простая выдача файлов по требованиям клиентов -и не более того.<br> <br> Секрет в том, что данные посетителя обрабатываются не самим Web-сервером. Для этого применяются специальные программы, работающие вместе с Web-сервером на том же серверном компьютере. Они называются серверными программами, не имеют интерфейса пользователя и "общаются" только с Web-сервером, принимают от него введенные пользователем данные и возвращают ему результат. Этим они коренным образом отличаются от клиентских программ, работающих непосредственно с пользователем. (К клиентским программам относится, в частности, ваш любимый Web-обозреватель.)<br> <br> Из этого следует, что Web-сервер умеет-таки принять данные от пользователя. Да, это входит в его основную задачу: принять данные и перенаправить их серверной программе. В свою очередь серверная программа их обработает и вернет Web-серверу результат.<br> <br> Вот тут-то и начинается самое интересное. Дело в том, что результат, возвращаемый серверной программой Web-серверу, — это не что иное, как обычный HTML-код! Фактически серверная программа возвращает готовую Web-страницу, сформированную на основе данных, введенных посетителем. Такая страница называется динамической, в отличие от статических страниц, написанных Web-дизайнером и сохраненных в файлах на дисках серверного компьютера. А уж эту динамическую страницу Web-сервер и направляет клиенту в качестве ответа на введенные данные.<br> <br> Серверные программы делятся на следующие четыре вида.<br> <br> <li> Исполняемые программы, работающие через интерфейс CGI (Common Gateway Interface — общий интерфейс обмена), так называемые CGI-npoграммы. Эта разновидность серверных программ — самая старая, однако отнюдь не устаревшая.<br> </li> <li> Расширения Web-сервера (приложения формата ISAPI, NSAPI, модули расширения Apache и т. п.). Новый способ, позволяющий встраивать серверные программы в сам Web-сервер, делая их его составными частями. Впервые предложен фирмой Microsoft для их сервера Microsoft Internet Information Server (интерфейс ISAPI) и разработчиками популярного бесплатного Web-сервера Apache.<br> </li> <li> Активные серверные страницы (ASP, JSP и др.). Фактически это обычные статические Web-страницы, сохраненные в файлах, Которые, кроме обычного HTML-кода, включают в себя команды, обрабатываемые либо самим Web-сервером, либо его расширением. Также новый способ, впервые предложенный Microsoft для того же Internet Information Server.<br> </li> <li> Серверные сценарии, написанные на интерпретируемом языке (Perl, Python, VBScript, JavaScript и др.). Обычные сценарии, работающие через интерфейс CGI или ISAPI на стороне сервера.<br> </li> Теперь рассмотрим все это разнообразие подробнее.<br> <br> CGI-программы представляют собой обычные исполняемые файлы, написанные на любом языке программирования и откомпилированные в машинный код процессора. Они не имеют интерфейса пользователя (как и все серверные программы), а работают с Web-сервером, получают от него входные данные и ему же пересылают результаты своей работы. Запускаются они самим Web-сервером, когда в них возникает нужда (когда необходимо обработать полученные от пользователя данные), и работают под управлением операционной системы серверного компьютера. При этом, если Web-серверу поступает одновременно несколько запросов на обработку данных от пользователей, он запускает соответствующее количество копий CGI-программы.<br> <br> К достоинствам CGI-программ можно отнести легкость создания (многие среды разработки программ поддерживают создание таких приложений, в частности популярнейший Borland Delphi, начиная с версии 3) и простоту отладки. Также, поскольку CGI-приложения представляют собой независимые программы, они выполняются отдельно от Web-сервера (как говорят программисты и системные администраторы, выполняются в другом адресном пространстве). Это значит, что при сбое в CGI-программе завершается только она — сам Web-сервер остается "на плаву". А недостаток у CGI-программ всего один: большой расход системных ресурсов, поскольку для обработки каждого набора данных запускается отдельная копия серверной программы. И если Web-серверу поступит слишком много запросов на обработку данных, серверный компьютер может и зависнуть.<br> <br> Расширения Web-сервера — более новая разновидность серверных программ. Они представляют собой обычные библиотеки DLL, в которых реализована вся логика серверной программы. Такие библиотеки как бы встраиваются в программу Web-сервера и работают как ее неотъемлемая часть. Поскольку библиотеки DLL работают только в среде Windows, для того чтобы создавать расширения в иных операционных системах, были придуманы и другие форматы. В частности, модули расширения сервера Apache не являются библиотеками DLL,<br> <br> Именно в виде библиотек DLL создаются расширения Web-серверов Internet Information Server фирмы Microsoft и Netscape Web Server фирмы Netscape. В первом случае расширения имеют формат ISAPI (Internet Server Application Programming Interface — интерфейс программирования приложений интернет-сервера), а во втором — NSAPI (Netscape Server Application Programming Interface — интерфейс программирования приложений сервер^ Netscape). Формат модулей расширения Apache так и называется — модули Apache.<br> <br> Достоинство у расширений Web-сервера одно: бережный расход системных ресурсов. Дело в том, что для обработки всех наборов данных пользователя запускается всего один экземпляр расширения, который отнимает существенно меньше ресурсов, чем уйма запущенных CGI-программ. Однако расширения труднее создавать и отлаживать, к тому же они не так безопасны.<br> Как CGI-программы. Поскольку они работают как часть Web-сервера, любая ошибка в расширении приведет к зависанию сервера.<br> <br> Оба описанных выше вида серверных программ обладают одним огромным недостатком. Прежде чем они смогут работать, они должны быть написаны на языке программирования и откомпилированы в машинные коды процессора, что отнимает много времени, особенно при отладке. Конечно, откомпилированные программы работают быстрее интерпретируемых, т. е. тех, где каждая инструкция читается, расшифровывается и обрабатывается специальной программой-интерпретатором. Но у интерпретируемых программ есть и свои преимущества, главными из которых являются простота и быстрота написания. Две следующие разновидности серверных программ, которые будут описаны, как раз будут интерпретируемыми.<br> <br> Как уже говорилось, активные серверные страницы — это обычные Web-страницы, включающие в себя особые серверные сценарии, выполняемые самим Web-сервером или специальной серверной программой (CGI-приложением или расширением Web-сервера). В частности, ASP (Active Server Pages — активные серверные страницы), поддерживаемые Microsoft Internet Information Server, и JSP (Java Server Pages — серверные страницы, написанные на JavaScript), поддерживаемые рядом других Web-серверов, работают именно таким образом. Серверные страницы ASP пишутся на языках JavaScript и VBScript, a JSP — только на JavaScript.<br> <br> Достоинства активных серверных страниц вы уже знаете: легкость и быстрота написания и простота отладки. Кроме того, поскольку активные серверные страницы -- это обычные Web-страницы с "вкраплениями" программного кода, их написание легко освоят все, кто знаком с HTML. Недостаток: относительная медлительность и повышенные требования к системным ресурсам.<br> <br> Серверные сценарии подобны активным серверным страницам тем, что являются интерпретируемыми, однако представляют собой "чистый" программный код, без HTML-''примесей". Интерпретатор практически всегда представляет собой CGI-программу, однако ничто не мешает разработать его в виде расширения Web-сервера. Сценарии обычно пишутся на языке программирования Perl, специально предназначенном для обработки текста; также используются языки Python, JavaScript, VBScript и даже (как говорят) язык командных файлов MS-DOS. Фактически писать сценарии можно на любом языке программирования, для которого есть интерпретатор.<br> <br> Достоинства и недостатки серверных сценариев те же, что у активных серверных страниц. Однако сценарии потребляют исключительно много системных ресурсов, даже больше, чем CGI-приложения. Ведь для обработки каждого набора данных пользователя запускается своя копия интерпретатора, а интерпретатор, в свою очередь, расходует много ресурсов на обработку сценария. И все же, несмотря на это, сценарии — самый популярный способ создания серверных программ.<br> <br> В табл. 15.1 приведены расширения файлов серверных программ.<br> <br> <p align="center"> <b></b><br><br> <h1>Пример таблицы входящей в базу данных</h1>Рисунок 15.1. Пример таблицы, входящей в базу данных<br><br><div style="text-align:center;"><img src="image/risunok-15-1-primer-tablicy-vhodjashhej-v-bazu_1.gif" alt="Пример таблицы входящей в базу данных"></div><br> Как получить доступ к отдельному полю, вы уже знаете, — по его имени. А как получить доступ к нужной записи?<br> <br> Дело в том, что в один момент времени программа, использующая данные базы, может работать только с одной записью, называемой текущей. Она может извлекать данные из полей этой записи и, возможно, изменять их. Но чтобы получить данные другой записи, программа должна выполнить команду перемещения. При этом процессор баз данных перемещает особый указатель текущей записи на нужную запись, и программа получает возможность работать с ней.<br> <br> Также программа может использовать поиск нужной записи по какому-либо критерию. Очень часто такой поиск выполняется по значению ключевого поля.<br> <br> Также программа имеет возможность добавлять новые и удалять ненужные записи таблицы. Чтобы добавить новую запись, программа выполняет команду добавления записи и заносит в ее поля необходимые данные. Чтобы удалить запись, программа сначала должна сделать ее текущей, а потом выполнить команду удаления.<br> <br> В общем случае, последовательность работы с данными, содержащимися в базе, выглядит так:<br> <br> <li> Программа открывает базу данных, выполняя операцию открытия. Это необходимая операция, без которой невозможно получить доступ к базе.<br> </li> <li> Программа открывает нужную таблицу базы. После этого процессор возвращает ей так называемый набор записей (по-английски -- recordset), с которым и работает программа.<br> </li> <li> Программа выполняет собственно работу с данными.<br> </li> <li> Программа закрывает таблицу, после чего процессор убирает соответствующий этой программе набор записей из памяти.<br> </li> <li> Программа закрывает базу данных, разрывая все связи с ней.<br> </li> Учтите, что две последние операции — закрытие таблицы и базы данных -выполнять так же необходимо, как и открытие. Дело в том, что набор записей и прочие структуры данных, формируемые процессором в памяти для программы, работающей с данными, отнимают много системных ресурсов. Поэтому, как только вы закончили работу с таблицей или базой данных, сразу же закройте ее, чтобы освободить ресурсы для других пользователей.<br> <br> В последнее время большую популярность- приобрели серверы баз данных. Это обычные процессоры данных, но реализованные в виде серверных программ и работающие на серверных компьютерах. Их преимущества перед обычными процессорами данных:<br> <br> <li> они работают на серверном компьютере, который, как правило, мощнее клиентского, поэтому их производительность выше;<br> </li> <li> они обеспечивают большую защищенность данных за счет разграничения доступа и некоторых других механизмов;<br> </li> <li> они просто мощнее, в смысле, поддерживают больше различных нововведений, появившихся в последнее время.<br> </li> Чтобы получить доступ к серверу баз данных и самим данным, клиентская программа посылает ему особые команды. Для составления таких команд был разработан язык описания запросов SQL (Structured Query Language -язык структурированных запросов). С помощью команд, составленных на этом языке, клиентская программа может открыть нужную таблицу, считать данные, добавить, изменить, удалить запись и, в конечном счете, закрыть базу данных, когда нужда в ней отпадет.<br> <br> Серверы баз данных применяются сейчас очень часто, а в Web-программировании — почти повсеместно. К наиболее популярным можно отнести Oracle, Microsoft SQL Server, Sybase, мощнейший IBM DB2, Borland InterBase (в России он продается под названием IBase), набирающий популярность PostgressSQL и бесплатный сервер MySQL, распространяющийся с открытыми исходными текстами. Последний сервер, кстати, очень часто используется в связке с Web-сервером Apache и технологией серверных страниц РНР.<br> <br> На этом рассказ о базах данных и о серверном программировании можно считать законченным.<br><br> <h1>Серверное программирование — подход Dreamweaver</h1>Серверное программирование — подход Dreamweaver<br><br> Трудно ли писать серверные программы? Да, трудно. Вероятно, даже труднее, чем Web-страницы.<br> <br> Однако вспомните, часто ли нам приходилось писать HTML-код вручную? Совсем редко, не правда ли? А все потому, что Dreamweaver заботливо оберегал нас от этого, предоставляя удобный интерфейс для визуального создания страниц. Мы просто писали текст, форматировали его, помещали на страницу изображения, таблицы, применяли к элементам страницы поведения и т. п. Одним словом, чувствовали себя комфортно.<br> <br> И неужели нам теперь придется писать серверные программы вручную?! Нет, совсем не обязательно.<br> <br> Уже упоминалось, что Dreamweaver предоставляет неопытным пользователям и вообще тем, кто не хочет иметь дела с JavaScript-кодом, так называемые поведения. Поведение — это уже готовый сценарий, написанный профессиональными программистами и помещаемый в код Web-страницы самим Dreamweaver после того, как пользователь выберет это поведение в меню поведений панели <b>Behaviors. </b>Пользователю не надо заботиться о том, что в определенное место кода страницы необходимо поместить сценарий, выполняющий то или иное действие, ему не нужно будет проверять этот сценарий на наличие ошибок и согласовывать его с другими сценариями. Все это за него делает Dreamweaver.<br> <br> Но Dreamweaver идет дальше. Он предлагает поведения не только для клиентских, но и для серверных сценариев. Так что вы можете создавать с его помощью не только статические, но и динамические серверные страницы.<br> <br> В самом деле, набор операций, применяемых в серверном программировании, очень невелик. Открыть базу данных, получить из нее какие-то данные, вывести их на странице, записать новые данные — что еще нужно!<br> <br> Конечно, если вы хотите реализовать какие-то хитроумные действия, вам придется писать серверные страницы "врукопашную". Но, согласитесь, такое бывает нечасто.<br> <br> Итак, мы выяснили две вещи. Во-первых, Dreamweaver MX поддерживает создание серверных Web-страниц. Во-вторых, для помещения в них сценариев используются хорошо знакомые вам поведения. Dreamweaver предлагает большой набор поведений для серверных сценариев, которых вам хватит на первых порах.<br> <br> Осталось выяснить, какие именно серверные страницы позволяет создавать Dreamweaver. Точнее, какие технологии создания серверных страниц он позволяет использовать. Таких технологий четыре, и сейчас они будут перечислены.<br> <br> <li> ASP. Эта технология вам уже знакома.<br> </li> <li> ASP.NET. Дальнейшее развитие ASP.<br> </li> <li> PHP. Бесплатная технология, распространяемая с открытыми исходными текстами. Довольно популярна и часто используется с бесплатными же Web-серверами, например Apache.<br> </li> <li> Macromedia ColdFusion. Собственная разработка фирмы Macromedia.<br> </li> Какую же из них выбрать? Ведь нам надо будет создавать примеры Web-страниц.<br> <br> Давайте выберем ASP. И вот почему.<br> <br> Для того чтобы работать с серверными страницами, нам понадобится Web-сервер. Без него серверные страницы просто не будут работать. А, возможно, вы знаете, что со всеми более-менее новыми версиями Windows поставляется небольшой Web-сервер. В системах Windows 95/98/ME это Personal Web Server, а в Windows NT/2000/XP — Internet Information Server. Его возможностей нам вполне хватит для экспериментов с серверным программированием.<br> <br> Так вот, этот Web-сервер полноценно поддерживает технологию ASP. Вы можете писать активные серверные страницы и выполнять их под ним. И вам не придется загружать никаких дополнительных компонентов — все, что вам нужно, уже включено в состав дистрибутивного комплекта Windows. Вот поэтому и был выбран ASP.<br> <br> Технологию ASP.NET пока что не поддерживает практически ни один Web-сервер; фирма Microsoft пока что не выпустила ни один продукт с поддержкой этой технологии. Для работы с PHP-страницами вам придется искать и загружать по Сети довольно большой дистрибутивный комплект, содержащий обработчик РНР, а потом долго его настраивать. Что касается технологии ColdFusion, то вряд ли вы в состоянии выложить за нее несколько тысяч долларов. Так что вариантов у нас практически нет.<br><br> <h1>Расширения файлов серверных программ</h1>Таблица 15.1. Расширения файлов серверных программ<br><br> <table border=1> <tr> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> </tr> <tr> <td> </td> <td> <b>Вид серверных программ</b><br> <br> </td> <td> <b>Подвид</b><br> <br> </td> <td> <b>Расширение</b><br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> CGI-программы<br> <br> </td> <td> —<br> <br> </td> <td> exe<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> Расширения Web-сервера<br> <br> </td> <td> ISAPI и NSAPI Модули Apache<br> <br> </td> <td> dll Нет расширения<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> Активные серверные страницы <br> <br> Серверные сценарии<br> <br> </td> <td> ASP JSP<br> <br> </td> <td> asp jsp<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> Язык Perl JavaScript VBScript Другие языки<br> <br> </td> <td> pl, cgi js, cgi vbs, cgi cgi<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> </tr> </table> Вот мы и рассмотрели, как Web-сервер обрабатывает (точнее, не обрабатывает) данные пользователя. Теперь переместимся в начало цепочки и рассмотрим, как Web-обозреватель отправляет данные пользователя серверной программе.<br><br> <h1>Введение в базы данных</h1>Введение в базы данных<br><br> Последнее, что мы рассмотрим в данной главе, — это базы данных и работу с ними. Поскольку львиная доля серверных программ работает именно с базами данных, нам эти знания очень пригодятся. Конечно, мы не будем рассматривать все технологии баз данных во всех подробностях, а, как и раньше, ограничимся кратким ликбезом. Вы сами можете поискать нужные книги и тексты в Сети, если заинтересуетесь этим.<br> <br> Что такое база данных? Ничего особенного, обычный файл или группа файлов, содержащих данные, организованные особым образом. Если база данных состоит из множества файлов, она все равно остается единым целым. Данные, содержащиеся в базе, обрабатываются при помощи особой программы, называемой процессором баз данных. Процессор баз данных может быть как совершенно отдельной программой, работающей на том же компьютере, что и использующая данные программа, так и входить в ее состав.<br> <br> Базы данных могут быть организованы по-разному. Но подавляющее большинство баз данных, эксплуатируемых в настоящее время, являются реляционными. Данные в таких базах организуются в виде таблиц. Каждая такая база данных может включать в себя одну или большее количество таблиц; сложные базы данных, как правило, имеют много таблиц, связанных между собой.<br> <br> Каждая таблица в свою очередь состоит из набора строк, разделенных на ячейки, причем в каждой ячейке содержатся данные определенного типа: текст, числа, логические величины, даты и т. д. Строки таблиц баз данных называются записями, а ячейки, на которые делится каждая запись, — полями. Как уже говорилось, каждое поле имеет определенный тип и обязательно снабжено именем, по которому программа, работающая с данными, и осуществляет доступ к этому полю.<br> <br> На Рисунок 15.1 приведен пример такой таблицы. Как видите, эта таблица имеет три поля:<br> <br> <li> NAME — название технологии создания серверных страниц, текстовое; </li> <li> PRICE — цена программы-обработчика, числовое;<br> </li> <li> USING — поддерживается ли эта технология в настоящее время, логическое ("да-нет").<br> </li> Кроме того, эта таблица имеет четыре записи, соответствующие технологиям, поддерживаемым Dreamweaver MX: ASP, ASP.NET, PHP и ColdFusion.<br> <br> Очень часто одно из полей таблицы делается ключевым. Значение ключевого поля используется для однозначной идентификации какой-либо записи. Разумеется, ключевые поля всех записей таблицы должны в этом случае содержать уникальные значения. Иногда ключевое поле называется полем счетчика.<br> <br> <p align="center"><br><br> <h1>Зачем нужны серверные программы</h1>Зачем нужны серверные программы<br><br> Вы когда-нибудь посещали интернет-магазин? Например, популярнейший "Озон" <b>(<a href="http://www.ozon.ru)">http://www.ozon.ru)</a>. </b>Помните, как там выполняется заказ товара?<br> <br> Если не помните или вообще не знаете, что такое интернет-магазин, давайте вспомним (или узнаем).<br> <br> Вы заходите на Web-страничку, описывающую нужный вам товар. После долгих мук совести вы все-таки решаетесь на покупку и щелкаете на кнопке <b>Купить. </b>После этого вы получаете несколько Web-страниц, где можете задать свой адрес, способы оплаты и доставки товара и, наконец, подтвердить покупку. Все это вы делаете, щелкая соответствующие кнопки и вводя данные в соответствующие поля ввода, расположенные прямо на страницах.<br> <br> Что происходит при этом? Как обрабатываются введенные вами данные? Неужели самим Web-обозревателем?<br> <br> Отнюдь. Эти данные обрабатываются на Web-сервере.<br> <br> Интернет-магазин — просто один из примеров, пришедших в голову автору, являющемуся поклонником и постоянным клиентом вышеупомянутого "Озона". Точно так же работают серверы электронной почты, основанной на Web, поисковые машины, электронные доски объявлений, форумы, вообще, любые Web-сайты, принимающие от посетителя какие-то данные и обрабатывающие их. Во всех этих случаях Web-обозреватель принимает от посетителя данные и отправляет их Web-серверу, который обрабатывает их и выдает результат обработки в виде автоматически сформированной Web-страницы.<br> <br> Как это происходит на деле? Сейчас мы это выясним. И первым делом ответим на вопрос...<br><br><br> <h1> Использование пакета Dreamweaver </h1> <h1>Дополнительные элементы управления</h1>Дополнительные элементы управления<br><br> Дополнительные элементы управления служат не для ввода данных, а для удобства посетителя страницы. Они поддерживаются только достаточно новыми программами Web-обозревателей, а именно Internet Explorer, начиная с версии 5.0, Navigator, начиная с версии 6.0, и всеми версиями Opera и Mozilla.<br><br> <h1>Флажок</h1>Флажок<br><br> Флажки используются в формах также довольно часто. Для помещения его в форму используется кнопка <b>Checkbox </b>(Рисунок 16.10) панели объектов или пункт <b>Check Box </b>подменю <b>Form Objects </b>меню <b>Insert. </b>Доступные параметры показаны на Рисунок 16.11.<br> <br> <p align="center"><br><br> <h1>Графическая кнопка</h1>Графическая кнопка<br><br> Графическая кнопка — это обычное графическое изображение, "по совместительству" выполняющее функцию кнопки отправки данных, т. е. при щелчке по такому изображению данные, введенные в форму, будут отправлены серверной программе.<br> <br> Для помещения графической кнопки в форму используется кнопка <b>Image Field </b>(Рисунок 16.21) панели объектов или пункт <b>Image Field </b>подменю <b>Form Objects </b>меню <b>Insert. </b>После этого на экране появится диалоговое окно <b>Select File, </b>в котором вы должны будете выбрать файл графического изображения. После нажатия кнопки открытия графическая кнопка будет создана.<br> <br> Доступные параметры графической кнопки показаны на Рисунок 16.22.<br> <br> <p align="center"><br><br> <h1>Группа переключателей</h1>Группа переключателей<br><br> Dreamweaver предоставляет удобные средства создания сразу целой группы переключателей. В самом деле, если переключатели целесообразно использовать только группой, неудобно создавать их по одному.<br> <br> Чтобы создать в форме группу переключателей, нажмите кнопку <b>Radio Group </b>(Рисунок 16.14) панели объектов или выберите пункт <b>Radio Group </b>подменю <b>Form Objects </b>меню <b>Insert. </b>После этого на экране появится диалоговое окно <b>Radio Group </b>(Рисунок 16.15).<br> <br> <p align="center"><br><br> <h1>Группа</h1>Группа<br><br> Группа элементов управления — это простой прямоугольник, объединяющий несколько элементов управления и имеющий текстовую метку.<br> <br> Чтобы объединить несколько элементов управления в группу, выделите их и нажмите кнопку <b>Fieldset </b>(Рисунок 16.27) панели объектов или выберите пункт <b>Fieldset </b>подменю <b>Form Objects </b>меню <b>Insert. </b>После этого Dreamweaver переключится в режим отображения содержимого страницы и ее HTML-кода и выведет небольшое диалоговое окно <b>Fieldset, </b>показанное на Рисунок 16.28. Введите в единственное поле ввода этого окна текст метки и нажмите кнопку <b>ОК.</b><br> <br> <p align="center"><br><br> <h1>Использование таблиц и стилей для создания форм</h1>Использование таблиц и стилей для создания форм<br><br> Первая наша форма получилась не очень привлекательной на вид. Это естественно: ведь нашей задачей было научиться создавать формы, а не осваивать хитрости их форматирования. Но теперь-то мы умеем создавать формы и хотели бы научиться делать их покрасивее. Для этого можно использовать мощнейщие средства — таблицы и стили. Таблицы позволят нам располагать элементы управления в формах так, как нам необходимо, а стили заставят их выглядеть так, как нам нужно.<br> <br> Давайте переделаем нашу форму так, чтобы не стыдно было поместить ее в Сеть. Сохраним предыдущий, "некрасивый" вариант и создадим новую страницу под названием 16.3.htm. Поместим в нее форму и зададим значения ее параметров, как у предыдущей формы, после чего на время оставим ее в покое.<br> <br> Итак, что же мы хотим получить?<br> <br> Давайте сделаем нашу новую форму в виде реальной печатной анкеты. Пусть она будет содержать две колонки: в левой будут помещаться надписи, в правой — элементы управления для ввода соответствующих данных. Такая форма будет неплохо выглядеть. Кроме того, у нас появилась фантазия сделать элементы управления инверсными — светлый текст на темном фоне.<br> <br> Первое реализуется с помощью таблицы. Второе — посредством стилей.<br> <br> Всего у нас шесть элементов управления (группу переключателей будем считать за один элемент управления, так же, как и пару кнопок <b>Отправить </b>(Submit) и <b>Сброс </b>(Reset)). Значит, нам понадобится таблица из шести строк и двух столбцов. Поместим такую таблицу в форму. Сделаем ей невидимую границу, а остальные параметры пока оставим без изменения. Можно также задать для таблицы значение ширины, отличное от 100%, либо убрать его совсем. Полученный результат показан на Рисунок 16.36.<br> <br> Дальше уже совсем просто. В ячейки левого столбца помещаем надписи, а в ячейки правого — соответствующие им элементы управления. Вместо того чтобы создавать все заново, вы можете копировать надписи и элементы управления со страницы 16.2.htm, открыв ее в отдельном окне документа. В последнюю строку поместим кнопки: в левую ячейку — кнопку <b>Отправить, </b>а в правую — <b>Сброс. </b>Чтобы как-то их выделить, можете для последней строки таблицы задать выравнивание по правому краю.<br> <br> Готовая форма будет выглядеть так, как показано на Рисунок 16.37.<br> <br> <p align="center"><br><br> <h1>Элементы управления</h1>Элементы управления<br><br> Элементы управления помещаются на форму с помощью все той же вкладки <b>Forms </b>панели объектов или пунктов подменю <b>Form Objects </b>меню <b>Insert. </b>Ниже мы подробно рассмотрим каждый элемент управления, предлагаемый нам стандартом HTML.<br> <br> Элементы управления вставляются в "поток" текста и ведут себя как обычные элементы страницы. Вы можете разносить их по текстовым абзацам или помещать в одну и ту же строку, разделяя пробелами..Также вы можете вставлять их в ячейки таблицы и свободно позиционируемые элементы. Чтобы удалить ненужный элемент управления, просто выделите его и нажмите клавишу <Del>.<br><br><br> <h1>Кнопка</h1>Кнопка<br><br> Кнопка — второй по популярности элемент управления в Web-формах. Для помещения ее в форму используется кнопка <b>Button </b>(Рисунок 16.8) панели объектов или пункт <b>Button </b>подменю <b>Form Objects </b>меню <b>Insert. </b>Доступные параметры показаны на Рисунок 16.9.<br> <br> <p align="center"><br><br> <h1>Метка</h1>Метка<br><br> Метка — это просто текстовая подпись, добавляемая к обычному элементу управления, например, полю ввода или переключателю.<br> <br> Чтобы привязать метку к элементу управления, выделите его и нажмите кнопку <b>Label </b>(Рисунок 16.26) панели объектов или выберите пункт <b>Label </b>подменю <b>Form Objects </b>меню <b>Insert. </b>После этого Dreamweaver переключится в режим отображения содержимого страницы и ее HTML-кода, и в окне документа вы увидите такой код:<br> <br> <LABEL> ...Код элемента управления... </LABEL><br> <br> <p align="center"><br><br> <h1>Основные принципы разработки форм</h1>Основные принципы разработки форм<br><br> Итак, вы познакомились с формами и элементами управления, выяснили, как эти формы создаются и используются. Настало время завершить разговор о формах некоторыми общими рекомендациями. А касаются эти рекомендации создания привлекательного и удобного интерфейса пользователя. Иначе говоря, привлекательных и удобных Web-форм.<br> <br> Эти рекомендации пригодны не только для Web-форм, но и для обычных Windows-приложений. Фирма Microsoft, разработчик Windows, составила целый набор таких рекомендаций, где все высчитано и вымерено; доступны эти рекомендации на сайте <a href="http://www.microsoft.com"><b>http://www.microsoft.com</b></a><b>. </b>Однако нет смысла приводить их здесь: данные рекомендации слишком объемны, чтобы поместить их все в одну не слишком толстую книгу, вдобавок их без проблем можно найти в Сети. Ограничимся только несколькими замечаниями.<br> <br> И еще раз повторимся: смотрите на реальные формы, реальные Windows-приложения. И учитесь на готовых примерах.<br> <br> <li> Элементы управления в форме должны располагаться на достаточном расстоянии друг от друга, чтобы форма не выглядела скученной. Однако это расстояние не должно быть слишком большим, чтобы форма была компактной.<br> </li> <li> Элементы в форме должны располагаться парами "надпись — элемент управления" по вертикали. (Если форма невелика, можно разместить их и по горизонтали.) Расстояние между этими парами должно быть несколько больше, чем между надписью и элементом управления. Учтите, что группа переключателей считается в этом случае одним элементом управления.<br> </li> <li> Объединяйте элементы управления, задающие однотипные данные, в группы. Например, вы можете выделить в отдельную группу поля ввода имени и фамилии посетителя.<br> </li> <li> Кнопки <b>Отправить </b>(Submit) и <b>Сброс </b>(Reset) должны располагаться отдельно от других элементов управления, чтобы посетитель случайно на них не нажал. Неплохо выделить их визуально, скажем, оформить как отдельную группу. Кроме того, расстояние между этими кнопками должно быть достаточно велико, чтобы посетитель случайно не нажал одну кнопку вместо другой.<br> </li> <li> Сведите количество элементов управления в форме к минимуму. Например, подумайте, нужны ли отдельные поля ввода для задания имени и фамилии посетителя, не обойтись ли одним полем ввода? Нужна ли кнопка <b>Сброс? </b>(Если форма состоит из одного-двух элементов управления, так и не нужна.) Это позволит также уменьшить объем пересылаемых по Сети данных.<br> </li> <li> Форма должна быть визуально отделена от остального содержимого страницы. Задайте для нее особый фон или поместите ее в рамку. Если форма достаточно велика, вынесите ее на отдельную страницу.<br> </li> <li> Сделав форму, попробуйте сами ввести в нее данные. Определите, удобно ли вам. Если неудобно, переделайте. Только после этого публикуйте форму в Интернете.<br> </li> И еще несколько рекомендаций, посвященных выбору элемента управления, наиболее подходящего для ввода каких-либо данных.<br> <br> <li> Поля ввода прекрасно подходят для ввода данных, количество различных вариантов которых бесконечно велико (имени и фамилии, адреса электронной почты, домашние адреса и т. п.).<br> </li> <li> Флажки замечательно подходят для задания признаков, которые либо могут быть, либо нет (классический пример — вопрос, хочет ли посетитель получать по электронной почте сводку новостей сайта или нет).<br> </li> <li> Группы переключателей пригодятся в том случае, если нужно предоставить посетителю возможность выбирать один вариант из нескольких имеющихся, причем он должен видеть все представленные варианты выбора одновременно (пол, социальный статус и т. п.).<br> </li> <li> Используйте списки, если количество вариантов выбора достаточно велико и группа переключателей в этом случае заняла бы слишком много места на форме (любимый телеканал, фирма-производитель принтера и т. п.).<br> </li> <li> Используйте раскрывающиеся списки, если размер формы критичен, а посетителю необязательно видеть все представленные варианты (те же самые случаи).<br> </li> Нет смысла говорить здесь о кнопках, обычных и графических, полях ввода файла и скрытых полях. У них достаточно специфическая область использования, и разговор на эту тему уже был.<br><br> <h1>Переключатели</h1>Переключатели<br><br> Переключатели в Web-формах, как и в обычных Windows-окнах, применяются только группами. В самом деле, в одиночку они абсолютно бесполезны — в таком случае гораздо удобнее использовать флажки.<br> <br> Для помещения в форму переключателя используется кнопка <b>Radio Button </b>(Рисунок 16.12) панели объектов или пункт <b>Radio Button </b>подменю <b>Form Objects </b>меню <b>Insert. </b>Доступные параметры показаны на Рисунок 16.13.<br> <br> <p align="center"><br><br> <h1>Поле ввода имени файла</h1>Поле ввода имени файла<br><br> Поле ввода имени файла позволит вам отправить серверной программе целый файл. Единственное условие: данные должны быть закодированы с использованием кодировки multipart/form-data и отправлены с помощью метода POST.<br> <br> Поле ввода имени файла внешне представляет собой обычное поле ввода. Справа от него расположена кнопка <b>Обзор </b>(Browse), открывающая стандартное диалоговое окно открытия файла Windows. И поле ввода, и кнопка представляют собой один элемент управления.<br> <br> Для помещения в форму поля ввода имени файла используется кнопка <b>File Field </b>(Рисунок 16.19) панели объектов или пункт <b>File Field </b>подменю <b>Form Objects </b>меню <b>Insert. </b>Доступные параметры показаны на Рисунок 16.20.<br> <br> <p align="center"><br><br> <h1>Поле ввода</h1>Поле ввода<br><br> Обычное поле ввода, служащее для ввода текста, самый популярный в формах элемент управления, помещается в форму с помощью кнопки <b>Text Field </b>(Рисунок 16.4) панели объектов или пункта <b>Text Field </b>подменю <b>Form Objects </b>меню <b>Insert.</b><br> <br> <p align="center"><br><br> <h1>Поведения предназначенные для работы с формами</h1>Поведения, предназначенные для работы с формами<br><br> Dreamweaver предусматривает несколько поведений, предназначенных для работы с формами и элементами управления. (Подробнее о поведениях и работе с ними говорилось в главе 13.) Сейчас мы их рассмотрим.<br><br> <h1>Простейшая Webформа</h1>Простейшая Web-форма<br><br> Для примера давайте создадим небольшую форму для опроса посетителей нашего сайта. В нее будут вводиться следующие данные о посетителе:<br> <br> <li> имя;<br> </li> <li> фамилия;<br> </li> <li> пол;<br> </li> <li> год рождения;<br> </li> <li> стаж работы в Интернете (новичок, опытный пользователь, гуру).<br> </li> Для пробной формы этого больше чем достаточно. Формы, имеющиеся в настоящее время в Сети, собирают значительно больше информации (в частности, адрес электронной почты, дату и месяц рождения, иногда — домашний адрес и т. п.), но нам в данном случае важнее научиться работать с формами в Dreamweaver.<br> <br> Конечно, наша форма будет содержать обязательную кнопку <b>Отправить </b>и кнопку <b>Сброс. </b>В последней, правда, особой нужды нет, но все же давайте ее сделаем.<br> <br> В качестве серверной программы зададим program.exe. Отправлять данные будем с использованием метода GET. Думается, 245 символов (256 минус длина слова "program.exe") для этого хватит. Конечно, если вы сомневаетесь в этом, можете воспользоваться методом POST.<br> <br> Какие же элементы управления мы используем в нашей форме? Внимательно посмотрим на список данных, которые мы намереваемся собрать, и хорошенько подумаем. Имя, фамилия и год рождения представляют собой текст, различных вариантов ввода может быть бесконечно много, значит, для них используем поля ввода. Различных полов на этой планете существует всего два, поэтому используем набор из двух переключателей. Что касается стажа работы в Интернете, то здесь также имеет место ограниченный набор вариантов выбора, поэтому можно, в принципе, использовать группу переключателей. Однако, чтобы не "раздувать" размеры нашей формы, применим раскрывающийся список, который значительно компактнее.<br> <br> Решив, что мы хотим получить в результате, приступим к работе.<br> <br> Создайте новую страницу. Если хотите, задайте ее параметры (название, цвета текста и фона). Можете добавить заголовок и какой-нибудь поясняющий текст. И сохраните под именем, например I6.2.htm.<br> <br> Теперь поместим на свежесозданную страницу форму. Для этого воспользуемся кнопкой <b>Form </b>(см. Рисунок 16.1) вкладки <b>Forms </b>панели объектов или пунктом <b>Form </b>меню <b>Insert. </b>Пустая форма выглядит точно так, как показано на Рисунок 16.2. Не очень вдохновляет, правда?<br> <br> Теперь зададим параметры нашей формы. В поле ввода <b>Form Name </b>редактора свойств введите имя формы visitorData. В поле ввода <b>Action </b>задайте имя серверной программы program.exe. В раскрывающемся списке <b>Method </b>выберите пункт GET, а в раскрывающемся списке <b>Enctype </b>— пункт <b>application/x-www-form-urlencoded. </b>Все, наша форма готова. Можно приступать к наполнению ее содержимым.<br> <br> Поставьте текстовый курсор внутрь формы. Наберите строку "Имя" и поставьте после него пробел. После этого текста поместите поле ввода. (Для этого либо нажмите кнопку <b>Text Field </b>панели объектов, либо выберите пункт <b>Text Field </b>подменю <b>Form Objects </b>меню <b>Insert.) </b>У вас должно получиться то же самое, что показано на Рисунок 16.31.<br> <br> <p align="center"><br><br> <h1>Проверка данных введенных в форму (Validate Form)</h1>Проверка данных, введенных в форму (Validate Form)<br><br> Очень часто нужно проверять данные, введенные посетителем страницы в форму, на правильность. Сами понимаете, компьютеры ненадежны, но люди еще ненадежнее (один из законов Мерфи).<br> <br> Для этого Dreamweaver предоставляет поведение validate Form. С его помощью можно проверять введенные данные на правильность: являются ли они адресом электронной почты, числом и введены ли вообще. Это поведение обычно привязывается к событию onsubmit тега <FORM> и срабатывает, когда посетитель страницы нажимает кнопку отправки данных. Но оно может также привязываться и к событиям onBlur или onchange тега <INPUT>, происходящим, когда посетитель переключается на другой элемент управления или изменяет данные в поле ввода, соответственно. В первом случае введенные данные проверяются "скопом", во втором — после ввода каждого значения. На практике применяются оба подхода; сами решайте, какой из них использовать. Если вы хотите привязать поведение к форме, выберите элемент формы, если к полю ввода — нужное поле ввода. Выберите одноименный пункт меню поведений. И не забудьте выбрать необходимое событие в меню колонки <b>Events </b>списка. После этого можно вводить нужные данные в диалоговое окно <b>Validate Form</b>.<br> <br> В списке <b>Named Fields </b>этого диалогового окна перечислены все поля ввода, созданные на странице. Вы можете выбрать любое из них и задать для него нужную проверку.<br> <br> Группа элементов управления <b>Value </b>позволяет задать, должен ли пользователь ввести в выбранное поле ввода значение. В эту группу входит единственный элемент управления — флажок <b>Required. </b>Если он включен, будет выполняться проверка, введено ли в поле ввода значение. Если же он отключен, такая проверка выполняться не будет.<br> <br> С помощью группы переключателей <b>Accept </b>вы можете задать, какого вида значение должно быть введено в поле ввода. Всего переключателей четыре:<br> <br> <li> <b> Anything </b>(включен по умолчанию) — любое значение; </li> <li><b>Email Address </b>— адрес электронной почты; </li> <li><b>Number </b>— любое число;<br> </li> <li> <b> Number from ... to ... </b>— число в заданном диапазоне. Нижнее значение этого диапазона задается в поле ввода <b>from, </b>верхнее — в поле ввода <b>to.</b><br> </li> Если вы выберете любой переключатель в Этой группе, кроме <b>Anything. </b>Dreamweaver создаст Web-сценарий, проверяющий введенные в поле ввода данные на правильность. Если данные такую проверку не пройдут, сценарий выведет окно-предупреждение, предлагающее посетителю страницы исправить ошибку.<br> <br> Если вы привязываете это поведение к форме, вы можете в этом же диалоговом окне задать проверку для нескольких полей ввода. Для этого просто выберите другое поле ввода в списке <b>Named Fields </b>и задайте нужные критерии проверки. Если вы привязываете поведение к полю ввода, вы можете задать проверку только для этого поля ввода.<br> <br> Введя нужные данные, не забудьте нажать кнопку <b>ОК.</b><br><br> <h1>Работа с формами в Dreamweaver</h1>Работа с формами в Dreamweaver<br><br> Создайте в Dreamweaver новую страницу. Мы поместим в нее форму, собирающую анкетные данные пользователя и отсылающую их гипотетической серверной программе program.exe.<br><br> <h1>Раскрывающийся список гиперссылок</h1>Раскрывающийся список гиперссылок<br><br> Теперь поговорим еще об одном элементе управления, напрямую не относящемся к формам. Это так называемый раскрывающийся список гиперссылок — обычный раскрывающийся список, содержащий список гиперссылок, ведущих на разные страницы текущего или других сайтов. При выборе любой страницы Web-обозреватель сразу же ее загружает и отображает. Фактически это обычный набор гиперссылок, только "свернутый" для достижения компактности.<br> <br> Раскрывающийся список гиперссылок внешне ничем не отличается от обычного раскрывающегося списка. Вся его функциональность реализуется с помощью набора особых поведений (фактически — сценариев, написанных на языке JavaScript и помещенных в коде страницы). Эти поведения автоматически формируются самим Dreamweaver.<br> <br> Вряд ли можно заменить раскрывающимся списком гиперссылок обычную полосу навигации на главной странице сайта. Одна из основных задач полосы навигации: представить посетителю список всех разделов сайта, чтобы он сразу выбрал то, что ему нужно. Раскрывающийся список, к сожалению, показывает одновременно только один пункт; чтобы увидеть все пункты списка, его придется развернуть. Поэтому он не может заменить старой доброй полосы навигации.<br> <br> Однако в качестве дополнительного инструмента навигации по сайту раскрывающийся список может очень даже пригодиться, особенно если полоса навигации находится только на главной странице вашего сайта. В этом случае вы можете поместить такой список в углу каждой страницы вашего сайта — он не будет занимать слишком много места и излишне привлекать внимание. А посетитель вашего сайта сможет быстро перейти на любую его страницу, не возвращаясь на главную страницу, а просто воспользовавшись этим списком.<br> <br> Как создается раскрывающийся список гиперссылок? Очень просто, как все в Dreamweaver.<br> <br> Создайте новую Web-страницу. Переключитесь на вкладку <b>Forms </b>панели объектов и щелкните кнопку <b>Jump Menu </b>(Рисунок 16.29). Вы также можете выбрать пункт <b>Jump Menu </b>подменю <b>Form Objects </b>меню <b>Insert. </b>После этого на экране появится диалоговое окно <b>Insert Jump Menu, </b>показанное на Рисунок 16.30.<br> <br> <p align="center"><br><br> <h1>Кнопка Form панели объектов</h1>Рисунок 16.1. Кнопка <b>Form </b>панели объектов<br><br><div style="text-align:center;"><img src="image/risunok-16-1-knopka-form-paneli-obektov_1.gif" alt="Кнопка Form панели объектов"></div><br> Пустая форма показывается в виде узкой полоски, ограниченной красной пунктирной рамкой (Рисунок 16.2). Когда вы поместите что-нибудь в форму, ее размеры соответственно увеличатся.<br> <br> <p align="center"><br><br> <h1>Кнопка Checkbox панели объектов</h1>Рисунок 16.10. Кнопка <b>Checkbox </b>панели объектов<br><br><div style="text-align:center;"><img src="image/risunok-16-10-knopka-checkbox-paneli-obektov_1.gif" alt="Кнопка Checkbox панели объектов"></div><br> В поле ввода <b>CheckBox </b>вводится уникальное имя элемента управления. Dreamweaver автоматически подставит туда сгенерированное им самим имя, но вам сразу же следует его изменить. Вы также можете выбрать пункт <b>Name </b>в контекстном меню флажка и изменить это имя в появившемся на экране диалоговом окне <b>Change Attribute.</b><br> <br> <p align="center"><br><br> <h1>Вид редактора свойств при выделенном флажке</h1>Рисунок 16.11. Вид редактора свойств при выделенном флажке<br><br><div style="text-align:center;"><img src="image/risunok-16-11-vid-redaktora-svojstv-pri-vydelennom_1.gif" alt="Вид редактора свойств при выделенном флажке"></div><br> В поле ввода <b>Checked Value </b>вводится текст, отправляемый серверной программе, если флажок будет включен посетителем, т. е. если флажок будет включен, он отправит такую пару:<br> <br> <Имя флажка>=<3начение <b>Checked Value></b><br> <br> Если же флажок не был включен, отправляемая пара будет, так сказать, "неполной":<br> <br> <Имя флажка>=<br> <br> Вы также можете выбрать пункт <b>Value </b>в контекстном меню флажка и изменить отправляемый текст в появившемся на экране диалоговом окне <b>Change Attribute.</b><br> <br> Группа переключателей <b>Initial State </b>задает начальное состояние флажка. Если включен переключатель <b>Unchecked, </b>флажок будет отключен (значение по умолчанию), а переключатель <b>Checked </b>сделает его изначально включенным.<br> <br> Примечание 1 <br>Примечание 1<br><br> <br> Флажок создается с помощью одинарного тега <INPUT TYPE="checkbox">.<br><br> <h1>Кнопка Radio Button панели объектов</h1>Рисунок 16.12. Кнопка <b>Radio Button </b>панели объектов<br><br><br><div style="text-align:center;"><img src="image/risunok-16-12-knopka-radio-button-paneli-obektov_1.gif" alt="Кнопка Radio Button панели объектов"></div><br> <p align="center"><br><br> <br><br> <h1>Вид редактора свойств</h1>Рисунок 16.13. Вид редактора свойств при выделенном переключателе<br><br><div style="text-align:center;"><img src="image/risunok-16-13-vid-redaktora-svojstv-pri-vydelennom_1.gif" alt="Вид редактора свойств"></div><br> В поле ввода <b>RadioButton </b>вводится уникальное имя группы переключателей. Переключатели, входящие в одну группу, должны иметь одно и то же имя. В данном случае принцип "каждому элементу управления — уникальное имя" нарушается. Уникальное имя должна иметь каждая группа переключателей.<br> <br> Dreamweaver автоматически подставит в поле ввода <b>RadioButton </b>сгенерированное им самим имя, но вам сразу же следует его изменить. Вы также можете выбрать пункт <b>Name </b>в контекстном меню переключателя и изменить это имя в появившемся на экране диалоговом окне <b>Change Attribute.</b><br> <br> В поле ввода <b>Checked Value </b>вводится текст, отправляемый серверной программе, если переключатель будет включен посетителем, т. е. если он будет включен, серверной программе будут отправлены такие данные:<br> <br> <Имя группы переключателей>=<3начение <b>Checked Value></b><br> <br> По значению checked value серверная программа может определить, какой переключатель группы был включен. Если же ни один переключатель в наборе не был включен, отправляемая пара опять же будет "неполной":<br> <br> <Имя группы переключателей>=<br> <br> Вы также можете выбрать пункт <b>Value </b>в контекстном меню переключателя и изменить отправляемый текст в появившемся на экране диалоговом окне <b>Change Attribute.</b><br> <br> Группа переключателей <b>Initial State </b>задает начальное состояние созданного вами переключателя. Если включен переключатель <b>Unchecked, </b>наш переключатель будет отключен (значение по умолчанию), а переключатель <b>Checked </b>сделает его изначально включенным. Но не забудьте, что соглашения фирмы Microsoft о пользовательском интерфейсе Windows-приложений требуют, чтобы один из переключателей в группе обязательно был включен изначально.<br> <br> Примечание 1 <br>Примечание 1<br><br> <br> Переключатель создается с помощью одинарного тега <INPUT TYPE="radio">.<br><br> <h1>Кнопка Radio Group панели объектов</h1>Рисунок 16.14. Кнопка <b>Radio Group </b>панели объектов<br><br><br><div style="text-align:center;"><img src="image/risunok-16-14-knopka-radio-group-paneli-obektov_1.gif" alt="Кнопка Radio Group панели объектов"></div><br> <p align="center"><br><br> <br><br> <h1>Диалоговое окно Radio Group</h1>Рисунок 16.15. Диалоговое окно <b>Radio Group</b><br><br><div style="text-align:center;"><img src="image/risunok-16-15-dialogovoe-okno-radio-group_1.gif" alt="Диалоговое окно Radio Group"></div><br> В поле ввода Name этого окна вводится уникальное имя создаваемой группы переключателей. Dreamweaver автоматически подставит туда сгенерированное им самим имя, но вам сразу же следует его изменить.<br> <br> Все созданные вами переключатели группы отображаются в списке <b>Radio Buttons. </b>Этот список состоит из двух колонок: <b>Label </b>(надпись возле переключателя) и <b>Value </b>(значение, отсылаемое серверной программе, если этот переключатель был включен посетителем). Вы можете выбрать любой пункт этого списка и произвести над ним некоторые манипуляции.<br> <br> Как видите, Dreamweaver уже создал для вас два переключателя; вам остается только задать для них надпись и значение. Для этого выберите нужный пункт списка и щелкните по значению, находящемуся в соответствующей колонке. Вместо значения появится небольшое поле ввода; введите, что хотите, и нажмите клавишу <Enter>.<br> <br> Чтобы добавить еще один переключатель в список, нажмите кнопку со знаком "плюс", находящуюся над списком. В списке появится еще один пункт: задайте для него нужные значения.<br> <br> Чтобы удалить ненужный переключатель, выберите в списке соответствующий ему пункт и нажмите кнопку со знаком "минус".<br> <br> Кнопки вверх и вниз позволят вам переместить выбранный пункт списка на позицию выше и ниже.<br> <br> Группа переключателей <b>Lay Out Using </b>позволяет задать, каким образом переключатели создаваемой группы будут размещаться в форме. Если включен переключатель <b>Line Breaks (<br> Tags), </b>переключатели будут размещены в одном текстовом абзаце и отделены друг от- друга тегом разрыва строки <вк>. Если же включен переключатель <b>Table, </b>Dreamweaver поместит все создаваемые переключатели в таблицу.<br> <br> Задав нужные данные, нажмите кнопку <b>ОК. </b>Если вы передумали создавать группу переключателей, нажмите кнопку <b>Cancel.</b><br> <br> После того как группа переключателей будет создана, вы можете выделить любой из них и изменить его параметры с помощью редактора свойств.<br><br><br> <h1>Кнопка List/Menu панели объектов</h1>Рисунок 16.16. Кнопка <b>List/Menu </b>панели объектов<br><br><br><div style="text-align:center;"><img src="image/risunok-16-16-knopka-list-menu-paneli-obektov_1.gif" alt="Кнопка List/Menu панели объектов"></div><br> <p align="center"><br><br> <br><br> <h1>Вид редактора свойств при выделенном списке</h1>Рисунок 16.17. Вид редактора свойств при выделенном списке<br><br><div style="text-align:center;"><img src="image/risunok-16-17-vid-redaktora-svojstv-pri-vydelennom_1.gif" alt="Вид редактора свойств при выделенном списке"></div><br> В поле ввода <b>List/Menu </b>вводится уникальное имя списка. Dreamweaver автоматически подставит туда сгенерированное им самим имя, но вам сразу же следует его изменить. Вы также можете выбрать пункт <b>Name </b>в контекстном меню списка и изменить это имя в появившемся на экране диалоговом окне <b>Change Attribute.</b><br> <br> С помощью группы переключателей <b>Туре </b>вы можете выбрать между обычным списком (переключатель <b>Menu) </b>и раскрывающимся списком (переключатель <b>List).</b><br> <br> При нажатии на кнопку <b>List Values </b>на экране появляется диалоговое окно <b>List Values. </b>Это окно показано на Рисунок 16.18. В нем вы сможете ввести пункты, которые будут отображаться в создаваемом вами списке. Вызвать это окно можно также, выбрав пункт <b>List Items </b>в контекстном меню списка.<br> <br> <p align="center"><br><br> <h1>Диалоговое окно List Values</h1>Рисунок 16.18. Диалоговое окно <b>List Values</b><br><br><div style="text-align:center;"><img src="image/risunok-16-18-dialogovoe-okno-list-values_1.gif" alt="Диалоговое окно List Values"></div><br> Большую часть этого окна занимает список пунктов. Каждая позиция этого списка состоит из двух полей: поля названия пункта <b>(Item Label), </b>которое отображается в форме, и поля значения <b>(Value), </b>которое будет отправлено серверной программе, если этот пункт будет выбран, т. е. отправлена будет такая пара:<br> <br> <Имя списка>=<3начение пункта><br> <br> Если ни один из пунктов списка не будет выбран, серверная программа получит уже знакомую вам "неполную" пару:<br> <br> <Имя списка>=<br> <br> При щелчке на строке списка в одной из колонок там появится поле ввода, где вы сможете ввести либо название пункта, либо его значение. Нажимая клавишу <Таb>, вы сможете перемещаться по позициям списка, от первой до последней. Если вы нажмете эту клавишу, находясь в колонке <b>Value </b>последней позиции списка, в список будет добавлена новая пустая позиция.<br> <br> Кнопка со знаком "плюс" позволяет добавить в список новую позицию, кнопка со знаком "минус" удаляет выбранную. Кнопки t и I перемещают выбранную позицию списка выше или ниже.<br> <br> Введя все пункты создаваемого списка, нажмите кнопку <b>ОК, </b>после чего список будет заполнен введенными пунктами.<br> <br> В списке <b>Initially Selected </b>вы сможете задать пункт создаваемого на Web-странице списка, который будет выбран в нем изначально.<br> <br> Если в наборе <b>Туре </b>выбран переключатель <b>List </b>(т. е. создается список), становятся доступными поле ввода <b>Height </b>и флажок <b>Allow Multiple.</b><br> <br> В поле ввода Height задается высота списка в пунктах. Вы можете задать высоту либо равной общему количеству пунктов, либо меньше ее. Если вы зададите слишком большое значение, список будет заполнен не полностью, что, собственно, не страшно, но и не очень красиво.<br> <br> Флажок <b>Allow Multiple </b>позволяет включить особый режим работы списка, при котором пользователь может выбрать в нем несколько пунктов. Для этого он должен будет, щелкая мышью на нужных пунктах, удерживать нажатой клавишу <Ctrl>. Он также может выбрать целую группу пунктов, сначала щелкнув на первом пункте, а потом — на последнем, удерживая клавишу <Shift>. В этом случае серверная программа получит следующую пару:<br> <br> <Имя списка>=<3начение пункта 1>, <Значение пункта 2>, ...<br> <br> Примечание 1 <br>Примечание 1<br><br> <br> И обычный, и раскрывающийся списки создаются с помощью одного и того же парного тега <SELECT>. . .</SELECT>, внутри которого помещается набор тегов, определяющих отдельные пункты. Атрибут SIZE задает высоту списка; если его значение равно 1, отображается раскрывающийся список, если же оно больше 1 — обычный. Отдельный же пункт списка создается с помощью парного тега <OPTION>. . .</OPTION>. Название пункта помещается внутрь этого тега, а значение задает атрибут VALUE. Атрибут SELECTED тега <OPTION> позволяет сделать пункт изначально выделенным; этот атрибут не имеет значения — достаточно только его присутствия в теге.<br><br> <h1>Кнопка File Field панели объектов</h1>Рисунок 16.19. Кнопка <b>File Field </b>панели объектов<br><br><div style="text-align:center;"><img src="image/risunok-16-19-knopka-file-field-paneli-obektov_1.gif" alt="Кнопка File Field панели объектов"></div><br> В поле ввода <b>FileField Name </b>вводится уникальное имя элемента управления. Dreamweaver автоматически подставит туда сгенерированное им самим имя, но вам сразу же следует его изменить. Вы также можете выбрать пункт<br> <br> <b>Name </b>в контекстном меню поля ввода и изменить это имя в появившемся на экране диалоговом окне <b>Change Attribute.</b><br> <br> <p align="center"><br><br> <h1>Пустая форма на Webстранице</h1>Рисунок 16.2. Пустая форма на Web-странице<br><br><div style="text-align:center;"><img src="image/risunok-16-2-pustaja-forma-na-web-stranice_1.gif" alt="Пустая форма на Webстранице"></div><br> Вновь созданная форма будет сразу же выделена, чтобы вы смогли установить нужные параметры. К несчастью, это никак не сигнализируется визуально: выделенная форма ничем не отличается от невыделенной. Поэтому, если вы сомневаетесь, выделена ли форма, выделите ее сами. Для этого просто щелкните мышью по ее красной штриховой рамке.<br> <br> Что мржет быть бесполезнее пустой формы! Поэтому мы не будем останавливаться на ней, а поскорее перейдем к элементам управления. Опишем только, какие параметры вы можете задать для формы. А параметров этих очень и очень немного (Рисунок 16.3).<br> <br> <p align="center"><br><br> <h1>Вид редактора свойств</h1>Рисунок 16.20. Вид редактора свойств при выделенном поле ввода имени файла<br><br><div style="text-align:center;"><img src="image/risunok-16-20-vid-redaktora-svojstv-pri-vydelennom_1.gif" alt="Вид редактора свойств"></div><br> В поле ввода <b>Char Width </b>задается ширина поля ввода, т. е. его горизонтальный размер, в символах.<br> <br> В поле ввода <b>Max Chars </b>задается максимальное количество символов, которое может быть введено в данное поле ввода. Это число может быть больше, чем <b>Char Width; </b>тогда содержимое поля ввода будет прокручиваться по горизонтали.' Но ни в коем случае не задавайте <b>Max Chars </b>меньше, чем <b>Char Width.</b><br> <br> Очень странно, но поля ввода <b>Init Val, </b>в котором задается начальное значение имени файла, в этом случае не предусмотрено. Однако вы можете выбрать в контекстном меню поля ввода пункт <b>Value </b>и изменить начальное значение в диалоговом окне <b>Change Attribute.</b><br> <br> Примечание 1 <br>Примечание 1<br><br> <br> Поле ввода имени файла создается с помощью одинарного тега <INPUT TYPE="file">.<br><br><br> <h1>Кнопка Image Field панели объектов</h1>Рисунок 16.21. Кнопка Image Field панели объектов<br><br><br><div style="text-align:center;"><img src="image/risunok-16-21-knopka-image-field-paneli-obektov_1.gif" alt="Кнопка Image Field панели объектов"></div><br> <p align="center"><br><br> <br><br> <h1>Вид редактора свойств</h1>Рисунок 16.22. Вид редактора свойств при выделенной графической кнопке<br><br><div style="text-align:center;"><img src="image/risunok-16-22-vid-redaktora-svojstv-pri-vydelennoj_1.gif" alt="Вид редактора свойств"></div><br> В поле ввода <b>ImageField </b>вводится уникальное имя элемента управления. Dreamweaver автоматически подставит туда сгенерированное им самим имя, но вам сразу же следует его изменить. Вы также можете выбрать пункт <b>Name </b>в контекстном меню графической кнопки и изменить это имя в появившемся на экране диалоговом окне <b>Change Attribute.</b><br> <br> Графическая кнопка отправляет серверной программе целых две пары значений вида:<br> <br> <Имя графической кнопки>.х=Х <Имя графической кнопки>.y=Y<br> <br> где х и Y — координаты точки на графической кнопке, на которой пользователь щелкнул мышью.<br> <br> В полях ввода W и Н вводятся, соответственно, ширина и высота графической кнопки в пикселах. Dreamweaver сам рассчитывает эти величины и помешает их в названные поля. Если вы хотите уменьшить или увеличить графическую кнопку, измените их вручную. Маркеров изменения размеров Dreamweaver в этом случае почему-то не предусматривает.<br> <br> В поле ввода Src задается имя файла графического изображения. Вы также можете щелкнуть значок папки, расположенный справа от поля ввода, и выбрать нужный файл в диалоговом окне <b>Select File. </b>Вызвать это окно вы можете, выбрав пункт <b>Source File </b>в контекстном меню графической кнопки.<br> <br> В поле ввода Alt задается "альтернативный" текст, отображаемый вместо графической кнопки, если она еще не загружена, или если пользователь запретил загрузку графических изображений в настройках Web-обозревателя. Вы также можете выбрать в контекстном меню графической кнопки пункт <b>Alt Text </b>и задать этот текст в появившемся на экране диалоговом окне <b>Change Attribute.</b><br> <br> Раскрывающийся список <b>Align </b>задает, каким образом графическая кнопка будет выравниваться относительно окружающего ее содержимого страницы. Здесь доступны следующие пункты:<br> <br> <li> <b> Тор </b>— верх кнопки выравнивается по верхнему краю окружающего текста;<br> </li> <li> <b> Middle </b>- середина кнопки выравнивается посередине окружающего текста;<br> </li> <li> <b> Left </b>— кнопка прижимается к левому краю страницы. Все остальное содержимое страницы обтекает кнопку;<br> </li> <li> <b> Right </b>— кнопка прижимается к правому краю страницы;<br> </li> <li> <b>Browser Default </b>— выравнивание по умолчанию, как правило, аналогично <b>Bottom.</b><br> </li> Вообще-то, чтобы получить нужный результат, вам придется поэкспериментировать с различными значениями этого параметра.<br> <br> Кнопка <b>Edit Image </b>позволит вам запустить программу графического редактора для того, чтобы отредактировать изображение. При этом будет запущена программа, зарегистрированная для данного типа графических файлов по умолчанию. Вы также можете выбрать пункт <b>Edit With <название программы> </b>контекстного меню графической кнопки.<br> <br> Примечание 1 <br>Примечание 1<br><br> <br> Графическая кнопка создается с помощью одинарного тега <INPUT TYPE= " image ">.<br><br> <h1>Кнопка Hidden Field панели объектов</h1>Рисунок 16.23. Кнопка <b>Hidden Field</b> панели объектов<br><br><br><div style="text-align:center;"><img src="image/risunok-16-23-knopka-hidden-field-paneli-obektov_1.gif" alt="Кнопка Hidden Field панели объектов"></div><br> <p align="center"><br><br> <br><br> <h1>Помещенное на страницу скрытое поле</h1>Рисунок 16.24. Помещенное на страницу скрытое поле<br><br><br><div style="text-align:center;"><img src="image/risunok-16-24-pomeshhennoe-na-stranicu-skrytoe_1.gif" alt="Помещенное на страницу скрытое поле"></div><br> <p align="center"><br><br> <br><br> <h1>Вид редактора свойств</h1>Рисунок 16.25. Вид редактора свойств при выделенном скрытом поле<br><br><div style="text-align:center;"><img src="image/risunok-16-25-vid-redaktora-svojstv-pri-vydelennom_1.gif" alt="Вид редактора свойств"></div><br> В поле ввода <b>HiddenField </b>вводится уникальное имя элемента управления. Dreamweaver автоматически подставит туда сгенерированное им самим имя, но вам сразу же следует его изменить. Вы также можете выбрать пункт <b>Name </b>в контекстном меню скрытого поля и изменить это имя в появившемся на экране диалоговом окне <b>Change Attribute.</b><br> <br> В поле ввода <b>Value </b>задается значение, которое будет отправлено скрытым полем серверной программе. Вы также можете выбрать пункт <b>Value </b>в контекстном меню скрытого поля и задать значение в появившемся на экране диалоговом окне <b>Change Attribute.</b><br> <br> Примечание 1 <br>Примечание 1<br><br> <br> Скрытое поле создается с помощью одинарного тега<INPUT TYPE="hidden">.<br><br> <h1>Кнопка Label панели объектов</h1>Рисунок 16.26. Кнопка <b>Label </b>панели объектов<br><br><div style="text-align:center;"><img src="image/risunok-16-26-knopka-label-paneli-obektov_1.gif" alt="Кнопка Label панели объектов"></div><br> Как видите, метка создается с помощью парного тега <LABEL>. HTML-код элемента управления, к которому привязывается метка, находится внутри этого тега. Текст же метки вводится также внутрь этого тега, перед кодом элемента управления или после него. В первом случае текст метки появится перед элементом управления, а во втором — после него.<br> <br> Например, следующий код поместит на Web-странице метку и -- после нее — поле ввода:<br> <br> <LABEL>Поле ввода <INPUT TYPE="text" NAME="textfield"></LABEL><br> <br> А этот код поместит поле ввода ниже метки:<br> <br> <LABEL>Поле ввода<BR><INPUT TYPE="text" NAME="textfield"></LABEL><br> <br> Можете проверить — оба этих фрагмента кода действительно работают.<br><br> <h1>Кнопка Fieldset панели объектов</h1>Рисунок 16.27. Кнопка <b>Fieldset </b>панели объектов<br><br><br><div style="text-align:center;"><img src="image/risunok-16-27-knopka-fieldset-paneli-obektov_1.gif" alt="Кнопка Fieldset панели объектов"></div><br> <p align="center"><br><br> <br><br> <h1>Диалоговое окно</h1>Рисунок 16.28. Диалоговое окно Fieldset После этого вы увидите такой код в окне документа:<br><br><div style="text-align:center;"><img src="image/risunok-16-28-dialogovoe-okno-fieldset-posle_1.gif" alt="Диалоговое окно"></div><br> <FIELDSET><br> <br> <LEGEND>Teкст метки</LEGEND><br> <br> ...Коды элементов управления... </FIELDSET><br> <br> Да, группа создается с помощью парного тега <FIELDSET>, внутри которого помещается HTML-код всех входящих в группу элементов управления. Текст метки помещается внутри особого парного тега <LEGEND>, находящегося внутри тега <FIELDSET>. В зависимости от места, где находится тег <LEGEND>, метка будет помещена вверху или внизу группы.<br> <br> <br><br> <h1>Кнопка Jump Menu панели объектов</h1>Рисунок 16.29. Кнопка <b>Jump Menu </b>панели объектов<br><br><br><div style="text-align:center;"><img src="image/risunok-16-29-knopka-jump-menu-paneli-obektov_1.gif" alt="Кнопка Jump Menu панели объектов"></div><br> <p align="center"><br><br> <br><br> <h1>Вид редактора свойств при выделенной форме</h1>Рисунок 16.3. Вид редактора свойств при выделенной форме<br><br><div style="text-align:center;"><img src="image/risunok-16-3-vid-redaktora-svojstv-pri-vydelennoj_1.gif" alt="Вид редактора свойств при выделенной форме"></div><br> Сначала о поле ввода <b>Form Name. </b>В нем вводится имя формы. По умолчанию Dreamweaver сам подставляет туда автоматически сгенерированное имя вида forml, form2 и т. д. В подавляющем большинстве случаев автоматически сгенерированного имени будет вполне достаточно; вообще, имя.формы особой роли не играет, в отличие от имен элементов управления. Но если вы любите аккуратность во всем, можете задать для своей формы более вразумительное имя.<br> <br> Имя формы вы также можете задать, выбрав пункт <b>Name </b>в контекстном меню формы (т. е. контекстном меню, появляющемся при щелчке правой кнопкой мыши по форме). После этого на экране появится диалоговое окно <b>Change Attribute. </b>Введите новое значение параметра в поле ввода и нажмите кнопку ОК для его сохранения или <b>Cancel </b>— для отмены.<br> <br> В поле ввода <b>Action </b>вводится интернет-адрес серверной программы, которая будет обрабатывать введенные в форму данные. Вы можете также щелкнуть по значку папки справа от этого поля ввода и выбрать нужный файл в диалоговом окне <b>Select File. </b>Кроме того, вы можете выбрать пункт <b>Action </b>контекстного меню формы, чтобы вызвать на экран все то же диалоговое окно.<br> <br> В комбинированном списке <b>Target </b>задается, как вы помните, цель гиперссылки. Конечно, сейчас у нас нет гиперссылки — в данном случае цель задает, куда будет выводиться Web-страница, сгенерированная серверной программой.<br> <br> Метод пересылки данных задается с помощью раскрывающегося списка <b>Method. </b>В этом списке доступны три пункта: <b>GET, POST и Default. </b>Первые два пункта, как вы поняли, задают метод пересылки, а третий — метод, используемый по умолчанию (как правило, GET). Для аналогичных целей служит подменю <b>Method </b>контекстного меню формы, содержащее все те же три пункта.<br> <br> Кодировка данных формы задается в комбинированом списке <b>Enctype. </b>В этом списке есть два пункта: <b>application/x-www-form-urlencoded и multipart/form-data. </b>Если вы собираетесь использовать другую кодировку, например, text/plain, можете ввести ее название прямо в этот список.<br> <br> Примечание 1 <br>Примечание 1<br><br> <br> Форма создается с помощью парного тега <FORM> ... </FORM>, внутри которого помещается все содержимое формы, т. е. элементы управления. Атрибут ACTION задает адрес серверной программы, ENCTYPE — кодировку, a METHOD — метод отправки данных.<br> <br> Задайте какие-нибудь данные для нашей формы. И сохраните страницу в файле под именем 16.1.htm.<br> <br> Вот и все о форме. Теперь пора наполнить ее содержимым.<br><br> <h1>Диалоговое окно Insert Jump Menu</h1>Рисунок 16.30. Диалоговое окно <b>Insert Jump Menu</b><br><br><div style="text-align:center;"><img src="image/risunok-16-30-dialogovoe-okno-insert-jump-menu_1.gif" alt="Диалоговое окно Insert Jump Menu"></div><br> В списке <b>Menu Items </b>перечислены все пункты раскрывающегося списка, созданные вами. Вы можете добавлять в этот список новые строки, щелкнув кнопку со знаком "плюс", и удалять ненужные, выбрав их и нажав кнопку со знаком "минус". Кнопки t и I позволят переместить выбранную строку вверх или вниз на одну позицию.<br> <br> В поле ввода <b>Text </b>задается название пункта списка, иначе говоря, текст гиперссылки. К несчастью, и в этом случае Dreamweaver демонстрирует свою русофобию, искажая русские, имена. Адрес же гиперссылки вводится в поле ввода <b>When Selected, Go To URL. </b>Вы также можете щелкнуть кнопку <b>Browse, </b>расположенную правее этого поля ввода, и выбрать нужный файл в появившемся на экране диалоговом окне <b>Select File.</b><br> <br> С помощью раскрывающегося списка <b>Open URLs In </b>вы можете задать, где будут отображаться страницы, вызванные с помощью списка гиперссылок, т. е. цель гиперссылки. Пункт <b>Main Window </b>заставит список гиперссылок выводить их в основном окне Web-обозревателя. Если ваш сайт построен с использованием фреймов, в меню <b>Open URLs In </b>будут перечислены также названия всех созданных вами фреймов.<br> <br> В поле ввода <b>Menu Name </b>вводится уникальное имя списка гиперссылок. Автор вам советует сразу же ввести в него какое-нибудь "вразумительное" имя, наподобие JumpMenu.<br> <br> Обычно переход по соответствующей гипёрссылке будет осуществлен сразу же после того, как посетитель сайта выберет соответствующий пункт списка гиперссылок. Однако вы можете добавить справа от списка кнопку <b>Go </b>(Перейти), и для перехода по гиперссылке посетитель после выбора нужной гиперссылки должен будет нажать на эту кнопку. Для этого включите флажок <b>Insert Go Button After Menu, </b>расположенный в группе <b>Options. </b>Правда, после этого вам придется вручную изменить надпись на этой кнопке на "Перейти".<br> <br> Зачем это может понадобиться? Представьте себе такую ситуацию. Посетитель сайта выбрал какую-либо гиперссылку и перешел на соответствующую страницу. После этого он нажимает кнопку <b>Назад (Back) </b>на панели инструментов Web-обозревателя и возвращается обратно, на страницу со списком гиперссылок. Если теперь он снова захочет попасть на ту же самую страницу, у него ничего не получится: в списке гиперссылок будет выбрана та же гиперссылка. Если выбрать ее снова, список гиперссылок не сработает. Вот именно для этого и может пригодиться кнопка <b>Перейти. </b>Посетителю достаточно будет щелкнуть по ней еще раз, чтобы попасть на ту же страницу.<br> <br> Есть еще один способ решения этой проблемы: заставить каждый раз при попадании на страницу со списком гиперссылок делать первую его строку выбранной автоматически. (Часто в этой первой строке помещают небольшую подсказку вида "Выберите гиперссылку...".) Для этого создайте первую строку соответствующего вида и включите флажок <b>Select First Item After URL Change, </b>расположенный все в той же группе <b>Options.</b><br> <br> Закончив, нажмите кнопку <b>ОК. </b>Раскрывающийся список гиперссылок, созданный нами, будет помещен на страницу.<br> <br> Уже было сказано, что список гиперссылок не относится к формам и совсем не обязательно должен находиться в форме. Однако, если вы поместите его не в форме, Dreamweaver все равно создаст форму специально для него. Это служит для того, чтобы список работал в Navigator, нормально воспринимающем элементы управления только в составе форм.<br> <br> Чтобы изменить пункты раскрывающегося списка гиперссылок, можно воспользоваться уже знакомым вам диалоговым окном <b>List Values, </b>показанном на Рисунок 16.18. (Кстати, если вы хотите задать для пунктов списка русские имена, вы можете сделать это в этом же окне.) Чтобы его вызвать, выделите список и нажмите кнопку <b>List Items </b>редактора свойств (см. Рисунок 16.17). Также вы можете выбрать в контекстном меню списка пункт <b>List Items.</b><br><br> <h1>Надпись и поле ввода</h1>Рисунок 16.31. Надпись и поле ввода имени, расположенные в одну строку<br><br><div style="text-align:center;"><img src="image/risunok-16-31-nadpis-i-pole-vvoda-imeni_1.gif" alt="Надпись и поле ввода"></div><br> Не очень красиво... Но мы сейчас это исправим. Поместите текстовый курсор между надписью и полем ввода, уберите пробел и вставьте разрыв строки, нажав клавиши <Shift>+<Enter>. Посмотрите на то, что у нас получилось (Рисунок 16.32).<br> <br> Задайте имя поля ввода Namel, максимальное количество символов 40. Длину поля ввода можете задать любой, следите только, чтобы она не превысила заданного нами максимального количества символов (40).<br> <br> Теперь поставьте текстовый курсор после поля ввода имени и поставьте два разрыва строки, нажав комбинацию клавиш <Shift>+<Enter> дважды. Наберите слово "Фамилия", поставьте разрыв строки и поместите еще одно поле ввода, в которое будет вводиться фамилия. Задайте для него имя Name2 и максимальное количество символов также 40. И поставьте еще два разрыва строки. Результат показан на Рисунок 16.33.<br> <br> <p align="center"><br><br> <h1>Надпись и поле ввода</h1>Рисунок 16.32. Надпись и поле ввода имени, расположенные в две строки<br><br><br><div style="text-align:center;"><img src="image/risunok-16-32-nadpis-i-pole-vvoda-imeni_1.gif" alt="Надпись и поле ввода"></div><br> <p align="center"><br><br> <br><br> <h1>Поля ввода имени и фамилии</h1>Рисунок 16.33. Поля ввода имени и фамилии<br><br><div style="text-align:center;"><img src="image/risunok-16-33-polja-vvoda-imeni-i-familii_1.gif" alt="Поля ввода имени и фамилии"></div><br> Настала пора группы переключателей. Поставьте текстовый курсор после поля ввода фамилии. Наберите слово "Пол", поставьте разрыв строки и поместите на страницу первый переключатель набора. Сразу же после него наберите слово "Муж." (подпись переключателя) и поставьте два или три пробела, чтобы отделить его от другого переключателя. После этого поставьте второй переключатель, наберите слово "Жен." и поставьте два разрыва строки. Вот и все.<br> <br> Выделите первый переключатель и задайте его параметры: имя набора -Gender, значение — м, включен изначально. У второго переключателя будут такие параметры: имя набора то же, что у первого, значение — F. (Вы можете сделать изначально выделенным второй переключатель — это не принципиально.) Результат показан на Рисунок 16.34.<br> <br> Далее поместите в форму поле ввода года рождения. Вы уже знаете, как это делается. Задайте имя этого поля YOB (Year of Birth — год рождения), длина поля и максимальное количество символов 4. Можете также задать значение по умолчанию, например 1970.<br> <br> Настал черед раскрывающегося списка стажа работы в Интернете. Нет смысла подробно рассказывать, как это сделать, — действуйте по аналогии. Задаете имя раскрывающегося списка work, в диалоговое окно <b>List Values </b>введите пункты "новичок", "опытный пользователь" и "гуру" и присвойте им в качестве значений номера от 1 до 3. Изначально выбранным сделайте первый пункт ("Новичок").<br> <br> <p align="center"><br><br> <h1>Группа переключателей задания пола</h1>Рисунок 16.34. Группа переключателей задания пола<br><br><div style="text-align:center;"><img src="image/risunok-16-34-gruppa-perekljuchatelej-zadanija_1.gif" alt="Группа переключателей задания пола"></div><br> Осталось поместить в форму кнопки <b>Отправить </b>(Submit) и <b>Сброс </b>(Reset). Сделайте это. Задайте для них имена submit и Reset и надписи "Отправить" и "Сброс", соответственно.<br> <br> Готовая форма изображена на Рисунок 16.35. Сохраните ее, откройте в Web-обозревателе и попробуйте ввести в нее какие-нибудь данные. Как видите, она работает.<br> <br> <p align="center"><br><br> <h1>Готовая форма в окне Webобозревателя</h1>Рисунок 16.35. Готовая форма в окне Web-обозревателя<br><br><div style="text-align:center;"><img src="image/38.gif" alt="Готовая форма в окне Webобозревателя"></div><br> Единственная проблема — некому обрабатывать введенные нами данные. Ну нет у нас программы program.exe, нет!<br><br> <h1>Готовая форма созданная</h1>Рисунок 16.38. Готовая форма, созданная на основе таблицы и стилей<br><br><br><div style="text-align:center;"><img src="image/41.gif" alt="Готовая форма созданная"></div><br><br> <br><br> <h1>Кнопка Text Field панели </h1>Рисунок 16.4.<br><br><div style="text-align:center;"><img src="image/risunok-16-4_1.gif" alt="Кнопка Text Field панели "></div><br> Кнопка Text Field панели объектов<br> Появившееся на экране вновь созданное поле ввода будет выделено. Об этом сигнализирует тонкая штриховая рамка, окружающая его. Таким образом, вы можете сразу же установить необходимые параметры поля ввода (Рисунок 16.5). Если же поле ввода почему-то не выделено, щелкните по нему мышью.<br> <br> <p align="center"><br><br> <h1>Вид редактора свойств при выделенном поле ввода</h1>Рисунок 16.5. Вид редактора свойств при выделенном поле ввода<br><br><div style="text-align:center;"><img src="image/risunok-16-5-vid-redaktora-svojstv-pri-vydelennom_1.gif" alt="Вид редактора свойств при выделенном поле ввода"></div><br> В поле ввода <b>TextField </b>вводится уникальное имя элемента управления. Dreamweaver автоматически подставит туда сгенерированное им самим имя, но вам сразу же следует его изменить. Вы также можете выбрать пункт <b>Name </b>в контекстном меню поля ввода и изменить это имя в появившемся на экране диалоговом окне <b>Change Attribute.</b><br> <br> В поле ввода <b>Char Width </b>задается ширина поля ввода, т. е. его горизонтальный размер, в символах.<br> <br> В поле ввода <b>Max Chars </b>задается максимальное количество символов, которое может быть введено в созданное на Web-странице поле ввода. Это число может быть больше, чем <b>Char Width; </b>в этом случае содержимое поля ввода будет прокручиваться по горизонтали. Но ни в коем случае не задавайте <b>Max Chars </b>меньше, чем <b>Char Width.</b><br> <br> В поле ввода <b>Init Val </b>задается начальное значение, помещаемое в поле ввода при загрузке формы. Вы также можете выбрать пункт <b>Value </b>в контекстном меню поля ввода и изменить начальное значение в диалоговом окне <b>Change Attribute.</b><br> <br> Группа переключателей <b>Туре </b>задает тип создаваемого поля ввода. Здесь доступны три переключателя:<br> <br> <li> <b> Single line </b>— обычное поле ввода в одну строку;<br> </li> <li> <b> Multi line </b>— многострочное поле ввода, иначе говоря, область редактирования;<br> </li> <li> <b> Password </b>— поле ввода пароля.<br> </li> Поле ввода пароля ничем не отличается от обычного однострочного поля ввода за >тем исключением, что вместо вводимых символов в нем отображаются звездочки. Такие поля ввода широко применяются для ввода паролей или других конфиденциальных данных. Если вы хотите скрыть вводимые данные от любопытных соседей, применяйте поле ввода пароля.<br> <br> Область редактирования вам уже знакома. От обычного поля ввода она отличается тем, что в нее может быть введен многострочный текст. Для области редактирования Dreamweaver предоставляет дополнительные параметры. Вы увидите их, если выберете переключатель <b>Multi line </b>(Рисунок 16.6).<br> <br> <p align="center"><br><br> <h1>Вид редактора свойств</h1>Рисунок 16.6. Вид редактора свойств при выделенной области редактирования<br><br><div style="text-align:center;"><img src="image/risunok-16-6-vid-redaktora-svojstv-pri-vydelennoj_1.gif" alt="Вид редактора свойств"></div><br> Прежде всего, вместо поля ввода <b>Max Chars </b>появится поле <b>Num Lines, </b>в котором задается вертикальный размер области редактирования в строках. Заметьте, что размер текста, который может быть помещен в область редактирования, не ограничен.<br> <br> Вместо поля ввода <b>Init Val </b>появится одноименная область редактирования. В самом деле, для задания начального значения области редактирования обычного поля ввода может быть мало. Обратите внимание, что в этом случае пункт <b>Value </b>из контекстного меню исчезнет.<br> <br> И — самое важное дополнение. С помощью раскрывающегося списка <b>Wrap </b>задается, как область редактирования будет выполнять перенос текста и в каком виде этот текст будет отправлен серверной программе. В этом списке доступны четыре пункта. Рассмотрим их подробнее.<br> <br> Пункт Off отключает перенос строк. В этом случае, если текст не помещается в область редактирования по горизонтали, в ней появляется горизонтальная полоса прокрутки. (При этом пользователь может вставить в текст "жесткий" перевод строки, нажав клавишу <Enter>.)<br> <br> Если выбран пункт <b>Virtual, </b>область редактирования будет выполнять перенос длинных строк, вставляя так называемые "мягкие" переводы строк. При отправке содержимого области редактирования на сервер эти переводы удаляются. (Собственно, никаких "мягких" переводов в текст вообще не помещается — это просто такой термин.)<br> <br> Если же выбран пункт <b>Physical, </b>то перед отправкой данных все "мягкие" переводы строк преобразуются в "жесткие". Фактически в нужных местах текста вставляются символы перевода строк.<br> <br> Последний пункт — <b>Default </b>— задает поведение по умолчанию. Как правило, он аналогичен <b>Off.</b><br> <br> Какой пункт раскрывающегося списка выбрать? Простого ответа на этот вопрос не существует. Точнее, он зависит от того, что вы хотите иметь на Web-странице и что должна будет обрабатывать серверная программа. Перебрав все варианты, автор составил табл. 16.1, которая может вам помочь хотя бы на первых порах работы с формами.<br> <br> <p align="center"> <b></b><br><br> <h1>Кнопка Textarea панели объектов</h1>Рисунок 16.7. Кнопка <b>Textarea </b>панели объектов<br><br><div style="text-align:center;"><img src="image/risunok-16-7-knopka-textarea-paneli-obektov_1.gif" alt="Кнопка Textarea панели объектов"></div><br> Примечание 1 <br>Примечание 1<br><br> <br> Обычное поле ввода создается посредством одинарного тега <INPUT TYPE= "text">. (Обратите внимание на значение атрибута TYPE.) Поле ввода пароля создается с помощью одинарного тега <INPUT TYPE="password">, область редактирования — с помощью парного тега <TEXTAREA>. . .</TEXTAREA>, внутри которого помещается содержимое области редактирования. Значение, введенное в поле ввода или область редактирования, преобразуется к виду <имя поля ввода>=<3начение> и отправляется в таком виде. Имя элемента управления задается атрибутом NAME тегов <INPUT> и <TEXTAREA>.<br><br> <h1>Кнопка Button панели объектов</h1>Рисунок 16.8. Кнопка <b>Button </b>панели объектов<br><br><br><div style="text-align:center;"><img src="image/risunok-16-8-knopka-button-paneli-obektov_1.gif" alt="Кнопка Button панели объектов"></div><br> <p align="center"><br><br> <br><br> <h1>Вид редактора свойств при выделенной кнопке</h1>Рисунок 16.9. Вид редактора свойств при выделенной кнопке<br><br><div style="text-align:center;"><img src="image/risunok-16-9-vid-redaktora-svojstv-pri-vydelennoj_1.gif" alt="Вид редактора свойств при выделенной кнопке"></div><br> В поле ввода <b>Button Name </b>вводится уникальное имя элемента управления. Dreamweaver автоматически подставит туда сгенерированное им самим имя. имеющее вид Submit (для кнопки отправки данных), Reset (для кнопки сброса) или Button (для обычной кнопки). Как правило, этого имени вполне достаточно, но вы, если хотите, можете его изменить. Вы также можете выбрать пункт <b>Name </b>в контекстном меню кнопки и изменить это имя в появившемся на экране диалоговом окне <b>Change Attribute.</b><br> <br> В поле ввода <b>Label </b>вводится текст, который будет отображаться на кнопке, иначе говоря, надпись на кнопке. Dreamweaver сам подставит туда текст Submit (для книпки отправки данных), Reset (для кнопки сброса) или Button (для обычной кнопки). Естественно, его придется менять на аналогичные русские надписи. Вы также можете выбрать пункт <b>Label </b>в контекстном меню кнопки и изменить этот текст в появившемся на экране диалоговом окне <b>Change Attribute.</b><br> <br> С помощью группы переключателей <b>Action </b>задается действие, происходящее при нажатии этой кнопки. Здесь доступны три переключателя:<br> <br> <li><b> Submit form </b>— отправка данных, введенных в форму, серверной программе (кнопка отправки данных);<br> </li> <li> <b> Reset form </b>— сброс данных, введенных в форму (точнее, замена их начальными значениями) (кнопка сброса формы);<br> </li> <li> <b>None</b> — ничего не происходит ("кнопка-бездельник").<br> </li> С первыми двумя действиями мы уже знакомы. Это стандартные действия, выполняемые самим Web-обозревателем. Как мы знаем, каждая форма, отправляющая данные серверной программе, должна включать в себя кнопку отправки данных. (Кнопка сброса не является обязательной; ее ввели для удобства посетителя, но реально от нее нет особой пользы.)<br> <br> Но зачем нужны кнопки, при нажатии на которых ничего не происходит? Собственно, в форме они не нужны. Такие кнопки работают вместе со сценариями; при нажатии на такую кнопку запускается сценарий, выполняющий какое-либо действие над Web-страницей. Так что вы можете привязать к такой кнопке какое-либо поведение (о поведениях см. главу 13).<br> <br> Примечание 1 <br>Примечание 1<br><br> <br> Кнопка отправки данных создается с помощью одинарного тега <INPUT TYPE="submit">, кнопка сброса данных формы — <INPUT TYPE="reset">, "кнопка-бездельник" — <INPUT TYPE="button">. Каждая кнопка формирует данные в виде пары <Имя кнопки>=1 и отсылает их серверной программе, но эти данные практически никогда реально не обрабатываются.<br><br> <h1>Скрытое (невидимое) поле</h1>Скрытое (невидимое) поле<br><br> Скрытое поле — это особый элемент управления, вообще не отображающийся в Web-странице. Значение, изначально присвоенное скрытому полю, не может быть изменено посетителем сайта. Можете считать, что это своего рода "тайные" данные, "спрятанные" в форме и недоступные посетителю.<br> <br> Скрытое поле обычно используется в формах, генерируемых серверными программами. В частности, если покупатель электронного магазина щелкает по некому товару, серверная программа выдаст ему форму оформления заказа, в которую с помощью скрытого поля "внедрено" имя этого покупателя. После того как другая серверная программа получит данные о заказе, она может сразу же выяснить, кем заказан товар. В статических же страницах полезность скрытого поля весьма сомнительна.<br> <br> Для помещения в форму скрытого поля используется кнопка <b>Hidden Field </b>(Рисунок 16.23) панели объектов или пункт <b>Hidden Field </b>подменю <b>Form Objects </b>меню <b>Insert. </b>Помещенное в форму скрытое поле показано на Рисунок 16.24. а очень немногие доступные для него параметры — на Рисунок 16.25.<br> <br> <p align="center"><br><br> <h1>Создание формы</h1>Создание формы<br><br> Чтобы поместить на Web-страницу форму, проще всего воспользоваться панелью объектов. Для этого переключитесь на вкладку <b>Forms, </b>где находятся кнопки, помещающие на Web-страницу форму или один из предусмотренных в HTML элементов управления. Кнопка, помещающая на страницу форму, показана на Рисунок 16.1 и называется <b>Form. </b>Также вы можете выбрать пункт <b>Form </b>в меню <b>Insert.</b><br> <br> <p align="center"><br><br> <h1>Создание кнопки перехода для списка</h1>Создание кнопки перехода для списка гиперссылок (Jump Menu Go)<br><br> Это поведение тоже используется для создания списка гиперссылок, но уже с кнопкой <b>Перейти. </b>Как и в предыдущем случае, вам также обычно не нужно создавать его самим — это сделает за вас Dreamweaver. Другое дело, если вы хотите "приделать" кнопку <b>Перейти </b>к уже существующему списку гиперссылок. В этом случае создайте кнопку, выделите ее и выберите в меню поведений пункт <b>Jump Menu Go. </b>(Список гиперссылок уже должен быть создан.) На экране появится диалоговое окно <b>Jump Menu Go</b>. Все, что вам нужно сделать, — это выбрать в раскрывающемся списке <b>Choose Jump Menu </b>нужный список гиперссылок и нажать кнопку ОК.<br><br> <h1>Создание списка гиперссылок (Jump Menu)</h1>Создание списка гиперссылок (Jump Menu)<br><br> Это поведение используется при создании раскрывающегося списка гиперссылок. Именно оно обеспечивает переход на другую Web-страницу, когда посетитель выбирает соответствующий пункт в этом списке.<br> <br> Когда вы создаете список гиперссылок, Dreamweaver сам создает поведение jump Menu. Но если вы хотите преобразовать в список гиперссылок уже существующий список, вам придется создавать его вручную. Для этого выделите нужный список в окне документа и выберите в меню поведений пункт <b>Jump Menu. </b>После этого на экране появится уже знакомое вам диалоговое окно <b>Insert Jump Menu, </b>в котором вы сможете задать пункты списка гиперссылок.<br><br> <h1>Список</h1>Список<br><br> Для помещения в форму обычного или раскрывающегося списка используется кнопка <b>List/Menu </b>(Рисунок 16.16) панели объектов или пункт <b>List/Menu </b>подменю <b>Form Objects </b>меню <b>Insert. </b>Доступные параметры показаны на Рисунок 16.17.<br> <br> <p align="center"><br><br> <h1>Выбор пункта раскрывающегося списка Wrap</h1>Таблица 16.1. Выбор пункта раскрывающегося списка <b>Wrap</b><br><br> <table border=1> <tr> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> </tr> <tr> <td> </td> <td> <b>Как должны отображаться данные</b><br> <br> </td> <td> <b>Как данные должны получаться серверной программой</b><br> <br> </td> <td> <b>Пункт списка</b><br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> Неизменными<br> <br> </td> <td> Неизменными<br> <br> </td> <td> Off<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> Измененными (с "мягкими" переносами)<br> <br> </td> <td> Неизменными<br> <br> </td> <td> Virtual<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> Измененными (с "мягкими" переносами)<br> <br> </td> <td> Измененными (с "жесткими" переносами строк)<br> <br> </td> <td> Physical<br> <br> </td> <td> </td> </tr> <tr> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> </tr> </table> Если вы в своей форме используете область редактирования, проверьте, задан ли в качестве метода передачи данных POST. Поскольку в область редактирования может быть введен очень большой текст, метод GET не сможет передать его из-за своих ограничений.<br> <br> <br><br> <h1>Готовая форма, созданная на основе </h1>Рисунок 16.37. Готовая форма, созданная на основе таблицы<br><br><div style="text-align:center;"><img src="40.gif" alt="Готовая форма, созданная на основе "></div><br> Как видите, форма, построенная на основе таблицы, получилась значительно компактнее нашей первой формы. В этом проявилось одно из главнейших преимуществ таблиц — они позволяют представить объемные данные в удобном виде на небольшой площади.<br><br> Ну а уж задать "негативное" изображение для элементов управления проще простого! Создадим внутреннюю таблицу стилей и переопределим в ней с помощью специальных стилей теги <INPUT> (поля ввода и переключатели) и <SELEGT> (раскрывающийся список). Как это делается, вы уже знаете.<br><br> Здесь есть одна тонкость. После того как вы переопределите теги <INPUT> и <SELECT>, изображение в окне документа не изменится. Почему-то Dreamweaver не отображает результат применения стилей к этим тегам. Поэтому, чтобы просмотреть окончательный результат, сохраните страницу 16.3.htm и откройте ее в Web-обозревателе. У вас должно получиться нечто, похожее на Рисунок 16.38.<br><br> Вот и все о формах и элементах управления.<br><br> <p align="center"><br><br> <h1>в группу, должны быть окружены </h1>Внимание<br><br> Элементы управления, помещенные в группу, должны быть окружены тонким прямоугольником. Но Dreamweaver не отображает этот прямоугольник. Чтобы увидеть его, откройте страницу в Web-обозревателе.<br><br> <h1>Если вы хотите быстро вставить </h1>Внимание<br><br> Если вы хотите быстро вставить в форму область редактирования, воспользуйтесь кнопкой Textarea (Рисунок 16.7) панели объектов или пунктом Textarea подменю Form Objects меню Insert.<br> <br> <p align="center"><br><br> <h1>Задание нового значения поля ввода (Set Text of Text Field)</h1>Задание нового значения поля ввода (Set Text of Text Field)<br><br> Поведение set Text of Text Field позволяет вам поместить новое значение в любое поле ввода или любую область редактирования из имеющихся на странице. Чтобы создать его, выберите пункт <b>Set Text of Text Field </b>в подменю <b>Set Text </b>меню поведений. На экране появится диалоговое окно <b>Set Text of Text Field</b><br> <br> В раскрывающемся списке <b>Text Field </b>выбирается поле ввода или область редактирования, куда вы хотите поместить новое значение. Само это значение вводится в область редактирования New <b>Text. </b>Задав нужные настройки, нажмите кнопку <b>ОК.</b><br> <br> Вы можете использовать в тексте нового значения любой JavaScript-код, заключив его в фигурные скобки.- Например, чтобы поместить в поле ввода текущую дату, вы можете использовать такой код:<br> <br> Сегодня {new Date()}<br> <br> Если же вам понадобится ввести в текст фигурную скобку, предварите ее обратной косой чертой (/( или /}).<br><br> <h1> Использование пакета Dreamweaver </h1> <h1>Более сложные серверные страницы</h1>Более сложные серверные страницы<br><br> Какой толк в гостевой книге, если посетители сайта не могут просмотреть все записи, добавленные в нее ранее! (Если, конечно, это не "закрытая" книга, только для "своих".) Поэтому давайте сделаем страницу для просмотра этих записей. Создадим новую серверную страницу ASP и сохраним ее под именем Guestbook.asp. И приступим...<br><br> <h1>Быстрое создание серверных страниц</h1>Быстрое создание серверных страниц<br><br> Очень часто бывает просто необходимо быстренько сляпать какую-либо серверную страницу: поместить в нее форму для ввода данных, навигатор, строку статуса и т. п. Специально для таких "пожарных" случаев Dreamweaver предлагает возможность быстрого создания серверных страниц. Воспользовавшись пунктами подменю <b>Application Objects </b>меню <b>Insert </b>или соответствующими им кнопками вкладки <b>Application </b>панели объектов и введя нужные данные в появившихся на экране диалоговых окнах, вы можете быстро создать различные элементы, присущие серверным страницам. Согласитесь — это неплохой выход для малоопытных программистов и торопыг.<br> <br> Вы спросите, почему автор описал эту замечательную возможность в паре абзацев, да вдобавок в самом конце книги? Дело в том, что задача автора: научить вас серверному программированию в среде Dreamweaver. А для этого вам нужно самим "почувствовать" в руках если не сам программный код, то хотя бы поведения Dreamweaver и элементы страниц, к которым они привязаны. Вы должны сами знать, как что работает. Кроме того, настоящий творец все делает своими руками. (Можете считать это шуткой, но это правда.)<br> <br> Хотя не в силах автора запретить вам пользоваться возможностями быстрого создания серверных страниц. Но только если действительно нет времени (или желания) творить.<br><br> <h1>Необязательные области серверной страницы</h1>Необязательные области серверной страницы<br><br> Кроме повторяющихся областей, Dreamweaver поддерживает создание также областей необязательных. Вы, конечно, помните, что говорилось о необязательных областях в главе 9, но на всякий случай давайте повторим это. Необязательная область создается на серверной странице и может присутствовать или не присутствовать в зависимости от выполнения или невыполнения какого-либо условия. Все же вам стоит прочитать еще раз главу 9, где о необязательных областях говорилось более подробно.<br> <br> Чтобы создать необязательную область, сначала выделите элементы ртрани-цы, которые должны стать ее содержимым. После этого выберите в подменю <b>Show Region </b>меню кнопки "плюс" панели <b>Server Behaviors </b>один из пунктов. Всего этих пунктов шесть:<br> <br> <li> <b> Show Region If Recordset Is Empty </b>- создает необязательную область, отображаемую, если набор данных не содержит ни одной записи (пуст);<br> </li> <li> <b> Show Region If Recordset Is Not Empty </b>— создает необязательную область, отображаемую, если набор данных содержит хотя бы одну запись (не пуст);<br> </li> <li> <b> Show Region If First Record </b>— создает необязательную область, отображаемую, если текущей является первая запись набора;<br> </li> <li> <b> Show Region If Not First Record </b>- создает необязательную область, отображаемую, если текущей является не первая запись набора;<br> </li> <li> <b> Show Region If Last Record </b>— создает необязательную область, отображаемую, если текущей является последняя запись набора;<br> </li> <li> <b> Show Region If Not Last Record </b>— создает необязательную область, отображаемую, если текущей является не последняя запись набора.<br> </li> Давайте поместим повторяющуюся область, навигатор и строку статуса набора данных, т. е. все содержимое страницы, в необязательную область, отображаемую, если набор данных содержит записи. Для этого выделим все, что находится на странице, и выберем пункт <b>Show Region If Recordset Is Not Empty. </b>После этого на экране появится диалоговое окно <b>Show Region If Recordset Is Not Empty.</b><br> <br> Единственное, что вам нужно сделать, — это выбрать в раскрывающемся списке <b>Recordset </b>нужный набор данных. И нажать кнопку <b>ОК. </b><br> <br> Теперь можете проверить измененную страницу Guestbook_table.asp. Переключитесь в режим показа "живых" данных или откройте ее в Web-обозревателе. Поскольку набор данных Guestbook содержит данные, содержимое страницы (оно же — содержимое необязательной области) будет отображено.<br> <br> Теперь давайте создадим еще одну необязательную область, но отображаемую, если набор данных не имеет записей. Поместим в эту область текст "Гостевая книга не содержит записей". Это обычная практика в Web-дизайне: предупредить посетителя о том, что какой-то набор данных пуст.<br> <br> Поместим текстовый курсор после созданной ранее необязательной области и нажмем клавишу <Enter>. В новом текстовом абзаце наберем текст "Гостевая книга не содержит записей и выделим его целиком, для чего щелкнем по соответствующей кнопке секции тегов.<br> <br> Далее выберем в подменю <b>Show Region </b>меню кнопки "плюс" панели <b>Server Behaviors </b>пункт <b>Show Region If Recordset Is Empty. </b>На экране появится диалоговое окно <b>Show Region If Recordset Is Empty, </b>аналогичное уже знакомому вам окну <b>Show Region If Recordset Is Not Empty. </b>Выберем в раскрывающемся списке <b>Recordset </b>нужный набор данных и нажмем кнопку <b>ОК.</b><br> <br> Также можно поместить гиперссылки, составляющие навигатор, в необязательные области, отображаемые и скрываемые в зависимости от того, является ли текущая запись первой или последней. Сделайте это сами — это будет хорошей практикой.<br> <br> На этом рассказ о создании простейших серверных страниц можно считать почти законченным. Почти потому, что нам нужно рассмотреть еще одну возможность, предлагаемую Dreamweaver, — быстрое создание серверных страниц.<br><br> <h1>Подготовка</h1>Подготовка<br><br> <b>к созданию серверных приложений</b><br> Давайте еще раз вспомним, что нам нужно для создания серверных приложений (точнее, активных серверных страниц) в среде Dreamweaver.<br> <br> <li> Полностью настроенный Web-сервер. Учтите, что, возможно, вам придется включить в его настройках поддержку серверных страниц. Хотя, если вы пользуетесь одним из Web-серверов фирмы Microsoft, вам не нужно это делать — в их настройках это включено по умолчанию.<br> </li> <li> База данных, если ваше приложение будет работать с данными. Возможно, вам придется заполнить ее какими-то данными, хотя бы для отладки создаваемых вами серверных приложений.<br> </li> <li> Правильно занесенные в Dreamweaver сведения о Web-сайте. Итак, что мы уже имеем?<br> </li> Как говорилось ранее, мы имеем настроенный Web-сервер. (Не будем описывать его установку и настройку. Учитесь читать инструкции — хороший системный администратор просто обязан это уметь.) Он нормально работает со статичными Web-страницами, а большего от него в данный момент и не требуется.<br> <br> Вообще-то Web-сервер для разработки серверных страниц не очень-то и нужен. Чтобы просто "рисовать" страницы, вам будет достаточно только Dreamweaver. Web-сервер понадобится, когда вы начнете тестировать работу ваших страниц, или если вы захотите воспользоваться режимом просмотра "живых" данных Dreamweaver (об этом режиме мы поговорим позже). Так что пока можете особо не торопиться с Web-сервером (хотя и мешкать с его установкой тоже не стоит).<br> <br> Теперь о базах данных. Ими мы займемся потом, чуть позже. Предположим, что вы умеете пользоваться какой-либо СУБД (системой управления базами данных), например Microsoft Access. Именно Access мы и будем пользоваться для создания баз данных, благо это лучшая на сегодняшний момент клиентская СУБД. Впрочем, если вы предпочитаете другую программу, можете пользоваться ей.<br> <br> И, напоследок, о регистрации Web-сайта в Dreamweaver.<br> <br> Когда вы регистрируете сайт, Dreamweaver предполагает, что он не будет содержать активные серверные страницы. Это правильно — в конце концов, не все сайты используют серверные программы в том или ином виде. Поэтому изначально стоит скрыть возможности по их созданию, если Web-дизайнер специально не "попросит".<br> <br> Давайте же "попросим" Dreamweaver разрешить нам использовать в нашем сайте серверные страницы. Точнее, потребуем. Да так, чтобы он не смог отказаться.<br> <br> "Просьба" наша будет заключаться в том, чтобы задать некоторые дополнительные настройки нашего сайта Sample site 1. Выберем его в списке панели <b>Site </b>и вызовем диалоговое окно <b>Site Definition. </b>Как это сделать,' подробно описано в главе 6.<br> <br> Прежде всего, переключимся на вкладку <b>Local Info </b>и запишем в поле ввода <b>HTTP Address </b>интернет-адрес нашего сайта. Поскольку Web-сервер, на котором он будет опубликован, находится на нашем же компьютере, введем в это поле ввода строку http://localhost/. Это обозначение локального Web-сервера, работающего на нашем компьютере.<br> <br> Далее переключимся на вкладку <b>Testing Server. </b>To, что мы увидим, показано на Рисунок 17.1.<br> <br> <p align="center"><br><br> <h1>Получение данных от другой Webстраницы</h1>Получение данных от другой Web-страницы<br><br> Мы выяснили, как передать данные, введенные в форму, в таблицу, создав, таким образом, новую запись. Но не всегда данные, переданные с другой страницы, нужно сохранять в базе. Иногда их необходимо обработать на другой странице, нигде не сохраняя.<br> <br> Давайте сделаем следующее. Создадим небольшую статичную Web-страничку с тремя гиперссылками, направляющими посетителя па страницу Guestbook_table.asp и заставляющими последнюю показать только записи, удовлетворяющие определенному условию. Пусть первая из них будет показывать записи, значения поля sign которых равно 1, вторая — записи с полем sign, равным 2, третья — 3. Назовем эту страницу Selector.htm.<br> <br> Интернет-адрес первой гиперссылки страницы Selector.htm будет таков:<br> <br> Guestbook_table.asp?sign=1<br> <br> Здесь мы передаем методом GET странице Guestbook_table.asp параметр sign, равный 1. (Вспомните главу 15, где описывались оба метода передачи данных.) Соответственно, адреса других гиперссылок будут отличаться от этого только значением параметра sign.<br> <br> А для того чтобы отобрать нужные записи из набора данных Guestbook страницы Guestbook_table.asp, мы используем фильтр, сравнивающий значение поля sign со значением параметра sign, переданного нам от страницы Selector.htm. Как видите, все очень просто и довольно наглядно.<br> <br> Нет смысла подробно описывать, как создается страница Selector.htm — это вы уже знаете. Вместо этого сосредоточимся на странице Guestbook_table.asp и фильтре, отбирающем записи из таблиц в набор. Откройте данную страницу, если вы ее уже закрыли. И переключитесь в панель <b>Bindings.</b><br> <br> Для того чтобы получить данные от другой Web-страницы, нам нужно создать параметр гиперссылки. Этот параметр впоследствии примет значение, переданное от другой страницы методом GET. А уж принятое им значение мы сможем использовать где угодно.<br> <br> Чтобы создать параметр гиперссылки, выберите в меню кнопки "плюс" панели <b>Bindings </b>пункт <b>Request Variable. </b>После этого на экране появится диалоговое окно <b>Request Variable</b>.<br> <br> В раскрывающемся списке <b>Туре </b>выберите пункт <b>Request.QueryString, а в</b><br> <br> поле ввода <b>Name </b>введите имя создаваемого параметра (в нашем случае -sign). Затем нажмите кнопку ОК. После этого в списке панели <b>Bindings </b>появится новая ветвь <b>Request </b>с единственным пунктом <b>QueryString.sign.</b><br> <br> <br><br> <h1>Привязка элементов управления к данным</h1>Привязка элементов управления к данным<br><br> А сейчас мы рассмотрим еще одну очень интересную возможность — привязку элементов управления к данным. Это значит, что вы можете, скажем, заполнять списки значениями, взятыми из записей набора данных, или заимствовать оттуда же начальные значения для полей ввода. Первое, во всяком случае, очень часто бывает нужно.<br> <br> Давайте добавим в нашу гостевую книгу второе поле — тип записи. Тип записи будет показывать, что хотел сказать посетитель сайта: похвалить его разработчика, поругать или сделать нейтральное замечание. Соответственно, это поле может принимать три значения: положительное, нейтральное или отрицательное замечание.<br> <br> Откроем базу данных Guestbook.mdb в Access и добавим в таблицу Guestbook еще одно поле sign. Зададим для него числовой тип. После этого создадим еще одну таблицу под названием signs, содержащую два поля: счетчик ID и текстовое Desc. В поле ID будет помещаться уникальный номер каждой записи, а в поле Desc — описание соответствующей оценки. Сделаем поле ID ключевым. После этого привяжем поле sign таблицы Guestbook к полю <b>ID таблицы Signs.</b><br> <br> Далее откроем таблицу signs и создадим в ней три записи: "Положительно", "Нейтрально" и "Отрицательно". Access автоматически проставит в полях ID уникальные номера этих записей. Теперь осталось открыть таблицу Guestbook и проставить в поле sign для всех записей какое-либо значение, неважно, какое. На этом подготовительные действия можно считать законченными. Закройте Access и вернитесь в Dreamweaver.<br> <br> Откройте страницу AddRecord.asp. Поместите в форму новый элемент управления — раскрывающийся список sign. Вставьте его между полем ввода content и кнопкой отправки данных. И сохраните страницу.<br> <br> Откуда будут браться значения для заполнения нашего списка? Правильно, из набора данных. Страница AddRecord.asp не содержит никаких наборов данных, поэтому нам нужно его создать.<br> <br> Выберите в меню кнопки со знаком "плюс" панели <b>Bindings </b>пункт <b>Recordset (Query). </b>В диалоговом окне <b>Recordset, </b>которое появится на экране после этого, задайте имя создаваемого набора данных signs, выберите базу данных Guestbook и таблицу signs. После нажатия кнопки ОК набор данных будет создан.<br> <br> В раскрывающемся списке <b>Menu </b>выбирается нужный список. Но, поскольку мы его уже выделили на форме, этот список недоступен.<br> <br> В раскрывающемся списке <b>Options From Recordset </b>выбирается набор данных, из которого будут браться значения для заполнения выделенного списка. Пункт None позволит вам "отвязать" список от наборов данных, т. е. создать обычный список с фиксированным набором пунктов. Поле набора данных, из которого будут браться значения для создания пунктов, выбирается в раскрывающемся списке <b>Labels, </b>а поле, из которого будут браться значения этих пунктов, — в списке Values.<br> <br> Выберите в списке <b>Options From Recordset </b>набор данных signs, в списке <b>Labels </b>— поле Desc, а в списке <b>Values </b>— поле ID. И продолжим разговор об окне <b>Dynamic List/Menu.</b><br> <br> Если вы хотите, чтобы при открытии страницы какой-то пункт списка отображался изначально выбранным, воспользуйтесь полем ввода <b>Select Value Equal To. </b>В него вводится значение пункта, который должен быть изначально выбранным. В нашем случае это число 1 — значение поля ID первой записи таблицы signs.<br> <br> Если вы хотите поместить в список свои собственные пункты, не взятые из набора данных (статические), воспользуйтесь списком <b>Static Options. </b>Этот список состоит из двух колонок: <b>Value </b>(значение пункта) и <b>Label </b>(название пункта). Чтобы ввести в этот список новый пункт, нажмите кнопку со знаком "плюс", и пункт будет добавлен. Поочередно щелкните по значениям, находящимся в обеих колонках, введите нужный текст и не забудьте нажать клавишу <Enter>. Точно так же вы можете изменить необходимое значение в колонке любого уже созданного пункта.<br> <br> Если вы хотите удалить ненужный пункт из этого списка, выберите его и нажмите кнопку со знаком "минус". А кнопки вверх и вниз, позволят вам переместить выбранный пункт соответственно выше или ниже на одну позицию.<br> <br> Введя все данные, нажмите кнопку <b>ОК. </b>Вот и все.<br> <br> Точнее, не все. Нам еще нужно изменить параметры поведения insert Record так, чтобы значение выбранного в списке sign пункта помещалось в поле sign таблицы Guestbook. Для этого откройте панель <b>Server Behaviors </b>и дважды щелкните по пункту <b>Insert Record (from "AddRecord"), </b>после чего на экране появится уже знакомое вам диалоговое окно <b>Insert Record. </b>Выберите в описке <b>Form Elements </b>пункт <b>Sign <ignore>, </b>после чего выберите в раскрывающемся списке <b>Column </b>пункт <b>Sign, </b>а в раскрывающемся списке <b>Submit As </b>— пункт <b>Numeric </b>(впрочем, сам Dreamweaver автоматически выберет этот пункт). И, конечно, нажмите кнопку <b>ОК.</b><br> <br> Вот теперь действительно все. Можете проверить страницу в действии.<br><br> <h1>Работа с динамическими атрибутами</h1>Работа с динамическими атрибутами<br><br> Когда мы говорили о шаблонах (см. главу 9), то выяснили, что атрибуты тегов можно сделать изменяемыми. В Web-страницах, созданных на основе шаблона, мы можем задавать значения для этих атрибутов и, таким образом, менять их внешний вид в более широких пределах. Но атрибуты тегов можно сделать и динамическими, т. е. брать их значения из полей набора данных. Здесь мы рассмотрим, как работать с такими атрибутами.<br> <br> Давайте сделаем так, чтобы содержимое разных записей набора данных Guestbook отображалось различным цветом в зависимости от значения, содержащегося в поле sign. Пусть, например, содержимое поля Content отображается темно-синим цветом, если в поле sign содержится единица ("Положительно"), темно-красным — если содержится тройка ("Отрицательно"), черным — в остальных случаях (двойка, "Нейтрально"). Соответствующие коды цветов в этом случае:<br> <br> <li> темно-синий — #000099; </li> <li> темно-красный — #990000;</li> <li> черный — #000000.<br> </li> Откроем базу данных Guestbook.mdb в Access и создадим новое поле в таблице signs. Дадим этому полю имя Color, текстовый тип и установим его длину в 7 символов — этого хватит, чтобы хранить коды цветов. После чего откроем таблицу signs и введем коды цветов в соответствующие записи таблицы. После этого закроем Access.<br> <br> Далее переключимся в Dreamweaver, вызовем диалоговое окно <b>Recordset </b>для набора данных Guestbook и добавим в него вновь созданное поле. Попробуйте сделать это самостоятельно. Если же вы хотите сразу перейти к работе с динамическими атрибутами, просто введите в поле ввода <b>SQL </b>такой код:<br> <br> SELECT Content, Desc, Color FROM Guestbook, Signs WHERE Sign=ID<br> <br> Теперь выделим содержимое повторяющейся области страницы, щелкнув по тексту "{Guestbook.Content}", и зададим для него черный цвет. Для этого воспользуемся хорошо знакомым селектором цвета в редакторе свойств. В результате Dreamweaver поместит содержимое повторяющейся области в тег <FONT> с атрибутом COLOR — как вы помните, именно с их помощью задается цвет текста.<br> <br> Теперь выделите содержимое тега <FONT>, щелкнув по соответствующей кнопке секции тегов. И переключитесь в режим отображения кода. Хотя в интерактивном руководстве и описано, как привязать атрибут к полю набора данных в режиме отображения страницы, но почему-то в данном случае Dreamweaver ведет себя очень странно. В частности, раскрывающийся список <b>Bind To, </b>с помощью которого и выполняется привязка поля набора данных к атрибуту тега, остается недоступным. Поэтому мы поступим иначе.<br> <br> Выделите значение атрибута COLOR тега <FONT>. А теперь просто перетащите на него пункт <b>Color </b>панели <b>Bindings. </b>Значение атрибута COLOR примет такой вид (выделено полужирным шрифтом):<br> <br> <FONT COLOR="<%=(Guestbook.Fields.Item("Color").Value)%>"><br> <br> Код, который Dreamweaver подставил в качестве значения атрибута COLOR, извлекает из поля Color набора данных значение цвета и присваивает его атрибуту COLOR. Как видите, все достаточно просто и, опять же, "прозрачно".<br> <br> Точно таким же образом вы можете создавать другие динамические атрибуты. Главное - "попасть" мышью в нужный фрагмент исходного кода. Но, вероятно, вы с этим справитесь и сами.<br> <br> Вот и все. Теперь можете открыть вашу страницу в Web-обозревателе и посмотреть на получившийся результат.<br><br><br> <h1>Регистрация базы данных в Dreamweaver</h1>Регистрация базы данных в Dreamweaver<br><br> Наш следующий шаг — регистрация базы данных в среде Dreamweaver. Это нужно для того, чтобы Dreamweaver выяснил структуру базы данных, с которой мы будем работать, и смог создать необходимые серверные сценарии.<br> <br> Но сначала давайте создадим нашу первую серверную страницу. Это будет страница AddRecord.asp, служащая для добавления записи в гостевую книгу. Чтобы создать ее, выберите пункт <b>New</b> в меню <b>File</b>, выберите в списке Category диалогового окна New <b>Document </b>пункт <b>Dynamic Page, </b>а в правом списке - пункт <b>ASP JavaScript. </b>После этого нажмите кнопку Create -и активная серверная страница будет создана.<br> <br> Для того чтобы зарегистрировать базу данных в Dreamweaver, вам понадобится панель <b>Databases. </b>Если ее нет на экране, включите пункт-выключатель <b>Databases </b>меню <b>Window </b>или нажмите комбинацию клавиш <Ctrl>+<Shift>+<F10>. Сама эта панель показана на Рисунок 17.5.<br> <br> Большую часть этой панели (как и многих других панелей Dreamweaver) занимает список уже зарегистрированных баз данных. Вы можете выбрать любой пункт этого списка и произвести над соответствующей ему базой данных различные манипуляции...<br> <br> Нет, постойте! Ведь мы еще не зарегистрировали ни одной базы данных! Панель <b>Databases </b>показывает нам текст, описывающий шаги, необходимые для регистрации базы данных в Dreamweaver. Но, поскольку мы эти шаги уже выполнили, перейдем сразу к процессу регистрации.<br> <br> <p align="center"><br><br> <h1>Диалоговое окно Site</h1>Рисунок 17.1. Диалоговое окно <b>Site Definition </b>(вкладка <b>Testing Server)</b><br><br><div style="text-align:center;"><img src="image/risunok-17-1-dialogovoe-okno-site-definition_1.gif" alt="Диалоговое окно Site"></div><br> С помощью раскрывающегося списка <b>Server Model </b>задается используемая нами технология серверных страниц. Здесь доступны следующие пункты:<br> <br> <li> <b> None </b>— технология серверных страниц не используется (значение по умолчанию);<br> </li> <li> <b> ASP JavaScript </b>— используется Microsoft ASP и язык программирования JavaScript;<br> </li> <li> <b> ASP VBScript </b>— используется Microsoft ASP и язык программирования VBScript;<br> </li> <li> <b> ASP.NET C#</b> — используется Microsoft AS P.NET и язык программирования С#;<br> </li> <li> <b> ASP.NET VB </b>— используется Microsoft ASP.NET и язык программирования VBScript;<br> </li> <li> <b> ColdFusion </b>— используется Macromedia ColdFusion; </li> <li><b> JSP</b> — используется Netscape JSP;<br> </li> <li> <b> PHP MySQL </b>— используется PHP совместно с сервером баз данных MySQL.<br> </li> Выберите в этом списке пункт <b>ASP JavaScript.</b><br> <br> Раскрывающийся список <b>This site contains </b>доступен только в случае, если в списке <b>Server Model </b>выбран пункт <b>ColdFusion. </b>Мы не будем его здесь рассматривать.<br> <br> В раскрывающемся списке Access выбирается способ отправки серверных страниц Web-серверу. В нем доступны три пункта:<br> <br> <li> <b> None </b>— серверные страницы не отправляются Web-серверу; </li> <li><b> FTP</b> — отправка страниц по протоколу FTP;<br> </li> <li> <b> Local/Network </b>— отправка страниц по локальной сети. Также выбирается, если Web-сервер работает на клиентском компьютере, как в нашем случае.<br> </li> Выберите пункт <b>Local/Network.</b><br> <br> Остальные элементы управления были описаны в главе 6. Поэтому мы не будем на них останавливаться.<br> <br> Задав нужные параметры, нажмите кнопку <b>ОК. </b>Все, теперь Dreamweaver готов к работе с серверными страницами.<br><br> <h1>Кнопка Dynamic Text панели объектов</h1>Рисунок 17.10. Кнопка <b>Dynamic Text </b>панели объектов<br><br><div style="text-align:center;"><img src="image/risunok-17-10-knopka-dynamic-text-paneli-obektov_1.gif" alt="Кнопка Dynamic Text панели объектов"></div><br> Созданный нами динамический текст выглядит не очень вдохновляюще . Просто какой-то текст, заключенный в фигурные скобки и выделенный голубым цветом. Чтобы познать его скрытую силу, нам нужно наполнить его реальными данными. А для этого необходимо загрузить страницу в Web-обозревателе...<br> <br> <p align="center"><br><br> <h1>Динамический текст</h1>Рисунок 17.11. Динамический текст, отображающий содержимое поля Content таблицы Guestbook<br><br><div style="text-align:center;"><img src="image/risunok-17-11-dinamicheskij-tekst-otobrazhajushhij_1.gif" alt="Динамический текст"></div><br> Но не хочется нам открывать этот Web-обозреватель! Не хочется, и все тут. Ведь Dreamweaver имеет встроенные средства просмотра серверных Web-страниц в том виде, в каком они будут отображены в Web-обозревателе, вместе со всеми данными. Это так называемый режим показа "живых" данных. И сейчас мы выясним, как в него переключиться.<br> <br> А сделать это проще простого. Нажмите кнопку-выключатель <b>Live Data View </b> в инструментарии документа. Если вы убрали этот инструментарий с экрана, включите пункт-выключатель <b>Live Data </b>в меню <b>View </b>или нажмите комбинацию клавиш <Ctrl>+<Shift>+<R>. После этого Dreamweaver запросит данные из базы и выведет открытую в окне документа страницу в своем "настоящем".<br> <br> Тарабарщина, которую вы видите на этом рисунке, — содержимое поля content первой записи таблицы Guestbook. Это отладочные данные, введенные автором, чтобы проверить, как работает серверная страница.<br> <br> Да, но где остальные записи?<br> <br> Дело в том, что динамический текст показывает только cодержимое одной — текущей — записи набора данных. Чтобы увидеть все остальные записи, вам нужно будет переместиться на них. Как это сделать? Сейчас мы узнаем.<br><br> <h1>Готовая страница Guestbook asp с навигатором</h1>Рисунок 17.12. Готовая страница Guestbook.asp с навигатором<br><br><div style="text-align:center;"><img src="image/risunok-17-12-gotovaja-stranica-guestbook-asp-s_1.gif" alt="Готовая страница Guestbook asp с навигатором"></div><br> Сохраните готовую серверную страницу. К сожалению, проверить ее в режиме просмотра "живых" данных у нас не получится: хоть Dreamweaver и заменит динамический текст реальными данными, гиперссылки навигатора работать не будут. Поэтому придется все-таки открыть ее в окне Web-обозревателя. Попробуйте пощелкать по ссылкам и посмотрите, как меняется содержимое динамического текста.<br><br> <h1>Готовая страница</h1>Рисунок 17.13. Готовая страница Guestbook.asp с навигатором и строкой статуса набора данных<br><br><div style="text-align:center;"><img src="image/risunok-17-13-gotovaja-stranica-guestbook-asp-s_1.gif" alt="Готовая страница"></div><br> Готовая страница Guestbook.asp с навигатором и строкой статуса показана на Рисунок 17.13. Сохраните ее и откройте в Web-обозревателе, чтобы проверить работу строки статуса.<br><br><br> <h1>Диалоговое окно Recordset (расширенное)</h1>Рисунок 17.14. Диалоговое окно <b>Recordset </b>(расширенное)<br><br><div style="text-align:center;"><img src="image/risunok-17-14-dialogovoe-okno-recordset_1.gif" alt="Диалоговое окно Recordset (расширенное)"></div><br> В этом диалоговом окне нам понадобятся поле ввода <b>SQL, </b>список <b>Database Items </b>и кнопки <b>SELECT, WHERE и ORDER BY. </b>Многоколоночный список <b>Variables </b>и все относящиеся к нему кнопки мы пока трогать не будем.<br> <br> В поле ввода <b>SQL, </b>как вы поняли, вводится текст SQL-запроса. В настоящее время он таков:<br> <br> SELECT * FROM Guestbook<br> <br> Выше мы уже рассмотрели этот запрос по частям, поэтому не будем здесь повторяться. Напомним только, что этот запрос извлекает все поля всех записей из таблицы Guestbook.<br> <br> Поскольку мы хотим создать новый запрос SQL, то давайте сначала удалим все содержимое поля ввода SQL. И начнем, что называется, с чистого листа.<br> <br> Прежде всего поочередно откроем ветви <b>Tables и Guestbook </b>и выберем пункт <b>Content </b>в списке <b>Database Items. </b>Далее нажмем кнопку <b>SELECT, </b>чтобы поместить в поле ввода <b>SQL </b>ключевое слово SELECT с выбранным нами полем content. В поле ввода SQL появится такой код:<br> <br> SELECT Content FROM Guestbook<br> <br> Затем поместим текстовый курсор после слов "SELECT Content", откроем ветви <b>Tables </b>и <b>Signs </b>и выберем пункт <b>Desc. </b>Опять нажмем кнопку <b>SELECT. </b>Код примет следующий вид:<br> <br> SELECT Content, Desc FROM Guestbook, Signs<br> <br> Как видите, мы извлекаем данные уже из двух таблиц: поле Content из таблицы Guestbook И ПОЛ6 Desc ИЗ Таблицы Signs.<br> <br> Осталось только добавить условие, связывающее запись таблицы Guestbook с записью таблицы signs. Для этого добавим условие выборки записей. Выберем пункт <b>Sign </b>в подветви <b>Guestbook </b>ветви <b>Tables </b>и нажмем кнопку <b>WHERE. </b>Код'в поле ввода SQL опять изменится:<br> <br> SELECT Content, Desc FROM Guestbook, Signs WHERE Sign<br> <br> Поставим текстовый курсор после текста "WHERE Sign", введем знак "=", выберем пункт <b>ID </b>ветви <b>Signs </b>в ветви <b>Tables </b>и опять нажмем кнопку <b>WHERE. </b>Код в поле ввода <b>SQL </b>примет свой окончательный вид:<br> <br> SELECT Content, Desc FROM Guestbook, Signs WHERE Sign=ID<br> <br> Здесь ключевое слово WHERE обозначает условие отбора записей. А код sign=io показывает, что в набор попадут только те записи таблицы Guestbook, значения поля sign которых равно значению поля ID соответствующей записи таблицы signs.<br> <br> Чтобы проверить созданный SQL-запрос, нажмите кнопку <b>Test. </b>Если он правилен, на экране появится диалоговое окно <b>Text SQL Statement, </b>содержащее записи созданного набора данных.<br> <br> Нажмите кнопки <b>ОК </b>обоих диалоговых окон. И на всякий случай сохраните страницу. Сложный набор данных, извлекающий записи из двух таблиц, нами создан. Этот набор содержит два поля: content (содержимое записи гостевой книги), взятое из таблицы Guestbook, и Desc (оценка сайта посетителем), взятое из таблицы signs.<br> <br> Что теперь? Может, создать новый динамический текст и привязать его к полю Desc? Можно, конечно. Но мы поступим по-другому. Как? Сейчас увидите.<br><br><br> <h1>Диалоговое окно Администратор</h1>Рисунок 17.2. Диалоговое окно <b>Администратор источников данных ODBC </b>(вкладка <b>Системный DSN)</b><br><br><div style="text-align:center;"><img src="image/risunok-17-2-dialogovoe-okno-administrator_1.gif" alt="Диалоговое окно Администратор"></div><br> Чтобы добавить новый источник данных, нажмите кнопку <b>Добавить. </b>После этого на экране появится диалоговое окно <b>Создание нового источника данных, </b>показанное на Рисунок 17.3.<br> <br> В списке, занимающем все это окно, выберите драйвер, соответствующий формату вашей базы данных. (Драйвер — это небольшая программа, непосредственно работающая с базой данных. Для каждого формата баз данных существует свой драйвер ODBC, в то время как остальные компоненты ODBC едины для всех форматов.) В нашем случае — это пункт <b>Microsoft Access Driver (*.mdb). </b>Выбрав его, нажмите кнопку Готово.<br> <br> <p align="center"><br><br> <h1>Диалоговое окно Создание</h1>Рисунок 17.3. Диалоговое окно <b>Создание нового источника данных</b><br><br><div style="text-align:center;"><img src="image/risunok-17-3-dialogovoe-okno-sozdanie-novogo_1.gif" alt="Диалоговое окно Создание"></div><br> Диалоговые окна сыплются на нас, как осенние листья. Следующее — это окно <b>Установка драйвера ODBC для Microsoft Access, </b>показанное на Рисунок 17.4. В нем задаются собственно параметры вашей базы данных.<br> <br> <p align="center"><br><br> <h1>Диалоговое окно Установка</h1>Рисунок 17.4. Диалоговое окно <b>Установка драйвера ODBC для Microsoft Access</b><br><br><div style="text-align:center;"><img src="image/risunok-17-4-dialogovoe-okno-ustanovka-drajvera_1.gif" alt="Диалоговое окно Установка"></div><br> В поле ввода <b>Имя источника данных </b>задается уникальное имя источника данных. Оно необходимо для того, чтобы программы, использующие эту базу данных, получили доступ к ее источнику. Введите в него что-нибудь наподобие Guestbook.<br> <br> В поле ввода <b>Описание </b>вы можете ввести развернутое описание создаваемого источника данных. Вообще-то, это необязательно.<br> <br> Осталось только задать путь к файлу базы данных. Нажмите кнопку <b>Выбрать, </b>выберите нужный файл в появившемся на экране диалоговом окне открытия файла Windows и нажмите кнопку открытия.<br> <br> Задав все данные, нажмите кнопку ОК. После этого созданный вами источник данных появится в списке <b>Системные источники данных, </b>занимающем почти всю вкладку <b>Системные DSN </b>(см. Рисунок 17.2). Теперь можно закрыть окно <b>Администратор источников данных ODBC, </b>нажав кнопку ОК.<br> <br> Если вы случайно ввели не те данные, выберите в списке <b>Системные источники данных </b>нужный пункт и нажмите кнопку <b>Настройка. </b>Также вы можете просто дважды щелкнуть по нужному пункту этого списка. На экране появится диалоговое окно <b>Установка драйвера ODBC для Microsoft </b>Access; исправьте данные и нажмите кнопку <b>ОК. </b>Чтобы удалить ненужный источник данных, выберите необходимый пункт в списке и нажмите кнопку <b>Удалить. </b>Далее на экране появится небольшое окно-предупреждение; нажмите кнопку Да.<br> <br> На этом создание источника данных ODBC можно считать законченным.<br><br> <h1>Панель Databases</h1>Рисунок 17.5. Панель <b>Databases</b><br><br><div style="text-align:center;"><img src="image/risunok-17-5-panel-databases_1.gif" alt="Панель Databases"></div><br> Нажмите кнопку со знаком "плюс", расположенную над списком, и выберите в появившемся на экране меню пункт <b>Data Source Name (DSN). </b>На экране появится диалоговое окно <b>Data Source Name (DSN) </b>(Рисунок 17.6).<br> <br> <p align="center"><br><br> <h1>Диалоговое окно Data Source Name (DSN)</h1>Рисунок 17.6. Диалоговое окно <b>Data Source Name (DSN)</b><br><br><div style="text-align:center;"><img src="image/risunok-17-6-dialogovoe-okno-data-source-name-dsn_1.gif" alt="Диалоговое окно Data Source Name (DSN)"></div><br> В поле ввода <b>Connection Name </b>вводится уникальное имя зарегистрированной в Dreamweaver базы данных. Чтобы не ломать голову, введите здесь то же имя, что и у источника данных ODBC.<br> <br> Сам источник данных выбирается в раскрывающемся списке <b>Data Source Name (DSN). </b>Нажав кнопку <b>Define, </b>вы можете вызвать окно <b>Администратор источников данных ODBC </b>и создать его, если не сделали этого ранее.<br> <br> В поля ввода <b>User Name и Password </b>вводятся соответственно имя пользователя и пароль для подключения к серверу баз данных. В нашем случае они не нужны — оставьте эти поля пустыми.<br> <br> Чтобы проверить правильность ввода данных, нажмите кнопку <b>Test. </b>После этого Dreamweaver попытается подключиться к вашей базе данных и выведет соответствующее окно-предупреждение. Если попытка подключения оказалась неудачной, исправьте введенные данные и повторите ее. Возможно, вам придется вызвать окно <b>Администратор источников данных ODBC и</b><br> исправить параметры самого источника данных ODBC.<br> <br> Введя все данные и проверив их на правильность, нажмите кнопку <b>ОК. </b>Если же вы передумали регистрировать базу данных, нажмите кнопку <b>Cancel.</b><br> <br> После этого зарегистрированная вами база данных появится в списке панели <b>Databases </b>в виде ветви иерархического списка (см. Рисунок 17.5). Вы можете развернуть ее и просмотреть ее содержимое. Все созданные вами таблицы находятся в подветви <b>Tables. </b>Также вы можете просмотреть, какие поля содержит та или иная таблица, ведь таблица тоже представляет собой ветвь списка.<br> <br> Чтобы изменить параметры регистрации базы данных, выделите нужную ветвь списка и выберите пункт <b>Edit Connection </b>контекстного меню. На экране появится диалоговое окно <b>Data Source Name (DSN), </b>в котором вы сможете изменить эти параметры.<br> <br> Чтобы удалить ненужную базу данных (в смысле, регистрацию), выделите необходимую ветвь списка и нажмите кнопку со знаком "минус" или выберите пункт <b>Delete Connection </b>контекстного меню. На экране появится окно-предупреждение; нажмите кнопку Да (Yes).<br> <br> Если вы хотите зарегистрировать еще одну базу данных, сведения о которой не сильно отличаются от уже зарегистрированной, выделите уже зарегистрированную базу данных и выберите пункт <b>Duplicate Connection </b>контекстного меню. На экране появится диалоговое окно <b>Data Source Name (DSN), </b>в котором вы сможете задать параметры новой базы данных.<br> <br> Пункт <b>Test Connection </b>позволит вам протестировать подключение к базе данных, аналогично кнопке <b>Test </b>диалогового окна <b>Data Source Name (DSN).</b><br> <br> Чтобы просмотреть данные, содержащиеся в какой-либо таблице зарегистрированной базы данных, выделите ветвь списка, соответствующую этой таблице, и выберите пункт <b>View Data </b>контекстного меню. На экране появится диалоговое окно <b>View Data </b>(Рисунок 17.7), в котором вы и увидите все содержимое этой таблицы. Сами данные отображаются в списке, занимающем почти все это окно. Нажимая кнопки <b>Previous </b>25 и Next 25, вы можете просмотреть соответственно предыдущие или последующие 25 записей таблицы. Чтобы закрыть это окно, нажмите кнопку <b>ОК.</b><br> <br> Примечание 1 <br>Примечание 1<br><br> <br> Dreamweaver создает в папке Connections корневой папки сайта активные серверные страницы, соответствующие каждой зарегистрированной вами базе данных. Эти страницы содержат только серверные сценарии и хранятся в файлах, чьи имена совпадают с именами, данными вам базам данных при регистрации. Не удаляйте их, иначе все зарегистрированные вами базы данных пропадут.<br> <br> Вот, собственно, и все. Мы подключились к базе данных и теперь можем приступить к созданию самой серверной страницы.<br><br> <h1>Панель Server Behaviors</h1>Рисунок 17.7. Панель Server Behaviors<br><br><div style="text-align:center;"><img src="image/risunok-17-7-panel-server-behaviors_1.gif" alt="Панель Server Behaviors"></div><br> Как обычно, большую часть этой панели занимает список уже созданных поведений. Также эта панель имеет кнопки со знаками "плюс" и "минус", соответственно, добавляющую и удаляющую поведения.<br> <br> Чтобы создать новое серверное поведение, нужно щелкнуть кнопку со знаком "плюс" и выбрать необходимый пункт в появившемся на экране меню серверных поведений. Поведение, добавляющее запись в таблицу, создается выбором пункта <b>Insert Record. </b>После выбора этого пункта на экране появляется диалоговое окно <b>Insert Record</b>.<br> <br> В раскрывающемся списке <b>Connection </b>выбирается нужная база данных, а в раскрывающемся списке <b>Insert Into Table </b>— таблица, куда будет добавлена запись.<br> <br> В поле ввода <b>After Inserting, Go To </b>вводится интернет-адрес Web-страницы, на которую будет выполнен переход после успешного добавления записи в таблицу. Вы также можете нажать кнопку <b>Browse </b>и выбрать нужный файл в диалоговом окне <b>Select File.</b><br> <br> В раскрывающемся списке <b>Get Values From </b>выбирается форма, из которой берутся значения для новой записи.<br> <br> В списке <b>From Elements </b>перечислены все элементы управления, находящиеся в выбранной форме. Вы можете выбрать любой из них и задать для него поле таблицы, куда будут помещены содержащиеся в нем данные, и тип отправляемых данных (текст, число, дата и т. п.).<br> <br> Поле таблицы выбирается в раскрывающемся списке <b>Column. </b>Пункт <b><ignore> </b>этого списка позволяет проигнорировать значение этого элемента управления (т. е. оно не будет1 помещено в поле таблицы).<br> <br> Тип отправляемых данных указывается в раскрывающемся списке <b>Submit </b>As. В нем доступны следующие пункты:<br> <br> <li> <b> Text </b>— текстовые данные; </li> <li><b>Numeric </b>— числовые данные; </li> <li><b>Date </b>— значение даты;<br> </li> <li> <b> Date MS </b>Access — значение даты, предназначенное для Microsoft Access;<br> </li> <li> <b> Checkbox Y,N</b> — логическое значение, преобразуемое в символы "Y" ("да") или "N" ("нет");<br> </li> <li> <b> Checkbox 1,0 </b>— логическое значение, преобразуемое в числа 1 ("да") или 0 ("нет");<br> </li> <li> <b> Checkbox -1,0 </b>— логическое значение, преобразуемое в числа -1 ("да") или 0 ("нет");<br> </li> <li> <b> Checkbox MS</b> <b>Access </b>- логическое значение, предназначенное для Microsoft Access.<br> </li> Теперь вы можете проверить созданную Web-страницу в действии. Сохраните ее, запустите Web-сервер, если он еще не запущен, и откройте страницу в Web-обозревателе. <br> <br> Попробуйте ввести в поле ввода какой-нибудь текст и нажать кнопку <b>Добавить. </b>После этого откройте базу данных Guestbook.mdb в Access и посмотрите, что получилось. В таблице Guestbook должна появиться новая запись, введенная вами.<br> <br> Если хотите, можете просмотреть исходный код созданной нами серверной страницы. Видите, сколько сценариев JavaScript добавил в нее умница Dreamweaver, чтобы мы смогли добавить запись в таблицу! Пользуясь им и документацией по языку JavaScript и технологии ASP, вы сможете изучить принципы написания серверных сценариев вручную.<br> <br> Но все это потом. Теперь нам пора сделать следующий шаг к вершинам серверного программирования.<br><br><br> <h1>Кнопка Recordset панели объектов</h1>Рисунок 17.8. Кнопка <b>Recordset </b>панели объектов<br><br><br><div style="text-align:center;"><img src="image/risunok-17-8-knopka-recordset-paneli-obektov_1.gif" alt="Кнопка Recordset панели объектов"></div><br> <p align="center"><br><br> <br><br> <h1>Диалоговое окно Recordset</h1>Рисунок 17.9. Диалоговое окно <b>Recordset</b><br><br><div style="text-align:center;"><img src="image/risunok-17-9-dialogovoe-okno-recordset_1.gif" alt="Диалоговое окно Recordset"></div><br> В поле ввода <b>Name </b>вводится уникальное имя создаваемого набора данных. Введите в него, например, AddRecord. Так будет сразу понятно, зачем нужен этот набор данных.<br> <br> В раскрывающемся списке <b>Connection </b>выберите зарегистрированную базу данных. Вы также можете нажать кнопку <b>Define; </b>на экране появится диалоговое окно <b>Data Source Name (DSN), </b>с помощью которого вы сможете зарегистрировать базу данных, если не сделали это ранее.<br> <br> В раскрывающемся списке <b>Table </b>выберите нужную таблицу зарегистрированной базы данных. Впрочем, она у нас всего одна — Guestbook.<br> <br> Группа переключателей <b>Columns </b>позволит вам извлечь данные из всех полей выбранной таблицы или только из некоторых. Если вы включите переключатель <b>All </b>(вообще-то он включен по умолчанию), данные будут извлечены из всех полей таблицы. Чтобы извлечь данные только из некоторых полей, включите переключатель <b>Selected </b>и выберите нужные поля в списке, расположенном ниже. Чтобы выбрать сразу несколько пунктов, щелкайте по ним, удерживая нажатой клавишу <Ctrl>.<br> <br> Чтобы проверить, правильно ли введены параметры, нажмите кнопку <b>Test. </b>После этого на экране должно появиться диалоговое окно <b>Test SQL Statement, </b>похожее на уже знакомое вам окно <b>View Data. </b>Если параметры набора данных введены неправильно, Dreamweaver выдаст вам соответствующее окно-предупреждение.<br> <br> Элементы управления, расположенные в нижней части окна <b>Recordset </b>и предназначенные для задания фильтров, мы рассмотрим позднее. Сейчас же просто нажмите кнопку <b>ОК.</b><br> <br> После того как вы создадите новый набор данных, он появится в панели <b>Bindings </b>в виде ветви иерархического списка. Эта ветвь будет содержать все поля созданного набора данных, а также некоторые дополнительные поля, которые не берутся из таблицы, а вычисляются самим процессором баз данных. Такие поля называются системными. Давайте их перечислим.<br> <br> <li> <b> [first record index] </b>— номер первой записи набора, показываемой на текущей странице.<br> </li> <li> <b>[last record index] </b>— номер последней записи набора, показываемой на текущей странице.<br> </li> <li> <b> [total records] </b>— количество записей в наборе.<br> </li> Вы можете использовать системные поля на своих страницах наряду с обычными полями таблицы.<br> <br> Если вы хотите исправить параметры какого-либо набора данных, дважды щелкните по нужной строке списка. Учтите, что щелкать надо по начальному пункту ветви. После этого на экране появится диалоговое окно <b>Recordset, </b>в котором вы сможете изменить необходимые параметры.<br> <br> Чтобы удалить ненужный набор данных, выделите соответствующий пункт и нажмите кнопку со знаком "минус".<br> <br> А теперь поговорим о свойствах набора данных. Чтобы увидеть их, вам сначала нужно выделить соответствующий пункт списка панели <b>Bindings. </b>Но обычно этого мало — редактор свойств так же будет отображать параметры страницы, открытой в окне документа. Поэтому дважды щелкните по нужному набору данных в списке, чтобы вызвать диалоговое окно <b>Recordset.</b> и тут же закройте его, щелкнув кнопку <b>Cancel. </b>Только после этого редактор свойств наконец-то покажет параметры набора данных.<br> <br> В поле ввода <b>Recordset </b>вводится имя набора данных.<br> <br> Текстовое поле <b>Connection </b>отображает имя зарегистрированной базы данных, из которой будут извлекаться записи данного набора. Вы можете нажать кнопку <b>Edit; </b>на экране появится диалоговое окно <b>Recordset, </b>в котором вы сможете изменить параметры набора данных.<br> <br> В поле ввода SQL отображается текст запроса на языке SQL, сформированный Dreamweaver. В данный момент там находится следующий текст:<br> <br> SELECT * FROM Guestbook<br> <br> Разберем его пословно:<br> <br> <li> SELECT — ключевое слово, задающее набор полей; </li> <li> * (звездочка) обозначает все поля таблицы; </li> <li>FROM — ключевое слово, задающее таблицу;<br> </li> <li> Guestbook — таблица.<br> </li> Как видите, запросы на языке SQL напоминают фразы английского языка. И, в общем-то, они довольно понятны, "прозрачны", как говорят.<br> <br> Раскрывающийся список <b>Cursor Type </b>служит для задания типа набора данных. В нем доступны четыре пункта:<br> <br> <li> <b> Static </b>— статический набор данных, содержащий только те записи таблицы, которые присутствовали в ней на момент выборки. Доступен только для чтения;<br> </li> <li> <b>Forward Only </b>— однонаправленный статический набор данных, по которому можно перемещаться только по направлению от первой записи к последней, но не обратно. Обеспечивает более высокое быстродействие, чем простой статический набор данных. Этот пункт выбран по умолчанию;<br> </li> <li> <b> Dynamic </b>— динамический набор данных, содержащий все записи таблицы и отражающий все изменения, добавления и удаления, сделанные другими пользователями базы данных. Доступен как для чтения, так и для записи;<br> </li> <li> <b> Keyset </b>— ограниченный динамический набор данных, не отражающий добавления и удаления, сделанные другими пользователями базы данных.<br> </li> Раскрывающийся список <b>Cursor Location </b>задает местонахождение набора данных, в смысле, где он обрабатывается: на стороне клиента (пункт <b>Client) </b>или на стороне сервера (пункт Server). По умолчанию выбран пункт <b>Server, </b>и это правильно — ведь мы создаем серверное приложение.<br> <br> Раскрывающийся список <b>Lock Type </b>задает тип блокировки. Блокировка используется для того, чтобы ограничить доступ к записи, изменяемой каким-либо пользователем базы данных, другим пользователям. Если блокировку не использовать, может произойти конфликт изменения данных, когда одновременно несколько пользователей будут пытаться сохранить изменения, сделанные в одной и той же записи. Здесь доступны четыре пункта:<br> <br> <li><b> Read Only </b>— записи набора доступны только для чтения;<br> </li> <li> <b> Pessimistic </b>— пессимистическая блокировка, когда запись блокируется, как только пользователь начинает изменять значения ее полей. Как только пользователь сохранит изменения, блокировка снимается;<br> </li> <li> <b>Optimistic </b>— оптимистическая блокировка, когда запись блокируется только на момент записи в нее новых значений;<br> </li> <li> <b> Batch Optimistic </b>— разновидность оптимистической блокировки, используемой при операциях изменения сразу нескольких записей.<br> </li> Задайте для нашего набора данных динамический тип (пункт <b>Dynamic </b>раскрывающегося списка <b>Cursor Type) </b>и оптимистическую блокировку (пункт <b>Optimistic </b>раскрывающегося списка <b>Lock Type), </b>т. к. мы будем создавать страницу, добавляющую в таблицу новую запись. Остальные элементы управления пока не трогайте.<br><br> <h1>Создание фильтров</h1>Создание фильтров<br><br> А теперь можно приступить к созданию фильтра, отбирающего записи из таблицы в набор.<br> <br> Помните, как мы создали сложный набор данных? Если не помните, рассмотрим код SQL-запроса, созданного нами:<br> <br> SELECT Content, Desc, Color FROM Guestbook, Signs WHERE Sign=ID<br> <br> Ключевое слово WHERE языка SQL задает условие, согласно которому из таблицы будут извлекаться записи. В приведенном выше примере мы уже фактически создали условие, отбирающее только те записи таблицы Guestbook, для которых в таблице signs имеется "пара". Причем "пары" мы отбирали по значениям поля sign таблицы Guestbook и поля ID таблицы signs. Такие условия называются условиями связи таблиц.<br> <br> Фильтром же называется условие отбора записей. Это условие используется не для связи таблиц, а для отбора записей из таблицы. Например, в приведенном ниже SQL-запросе используется именно условие отбора записей, иначе говоря, фильтр:<br> <br> SELECT Content FROM Guestbook WHERE Sign=2<br> <br> Этот запрос создаст набор данных, включающий только те записи таблицы Guestbook, поля sign которых содержат значение 2 ("Нейтрально").<br> <br> Чтобы создать фильтр, нам придется добавить условие отбора записей к уже существующему условию связи таблиц. Это совсем просто. Вызовите диалоговое окно <b>Recordset </b>для нашего набора данных Guestbook. Если оно отобразилось в обычном виде, щелкните кнопку <b>Advanced, </b>чтобы переключить его в расширенный вид. И посмотрите на содержимое поля ввода <b>SQL.</b><br> <br> Итак, нам нужно добавить в SQL-запрос Новое условие. Мы будем сравнивать значение поля sign и...<br> <br> Но с чем мы его будем сравнивать?<br> <br> Ах, да, с параметром sign, переданным страницей Selector.htm. Но как его сюда ввести?<br> <br> Очень просто. Для этого нам понадобится создать переменную SQL-запроса, представляющую некий параметр, полученный от другой Web-страницы или в результате каких-то вычислений. И в этом нам поможет список <b>Variables </b>диалогового окна <b>Recordset </b>и относящиеся к нему элементы управления.<br> <br> Нажмите кнопку со знаком "плюс". В списке появится новая строка. Щелкните по этой строке в районе колонки <b>Name </b>(имя создаваемой переменной) и введите это имя, в нашем случае — sign. После этого щелкните в районе колонки <b>Default Value </b>(значение переменной по умолчанию, присваиваемое ей изначально) и введите, скажем, 2 (т. е. по умолчанию будут выводиться только "нейтральные" записи). Теперь останется лишь ввести в колонку <b>Run-time Value </b>выражение, задающее истинное значение этой переменной. В нашем случае это будет следующий код:<br> <br> Request.QueryString("sign")<br> <br> Он извлекает из строки запроса, переданной методом GET, параметр sign. Если же вы передаете параметры методом POST, код будет несколько иным:<br> <br> Request.Form("sign")<br> <br> Вот и все. Мы создали переменную SQL-запроса и теперь можем ее использовать.<br> <br> Откройте в списке <b>Database Items </b>ветви <b>Tables</b> <b>и Guestbook </b>и выберите пункт Sign. Поставьте текстовый курсор в поле ввода SQL после текста<br> <br> "WHERE Sign=ID" и нажмите кнопку <b>WHERE.</b> Содержимое поля ввода SQL станет таким:<br> <br> SELECT Content, Desc, Color FROM Guestbook, Signs WHERE Sign= ID AND Sign<br> <br> Поставьте текстовый курсор после текста "AND Sign" и введите вручную текст =sign. Таким образом, окончательный SQL-запрос будет выглядеть так:<br> <br> SELECT Content, Desc, Color FROM Guestbook, Signs WHERE Sign=ID AND Sign=sign<br> <br> Все, наш новый запрос создан. Можете нажать кнопку <b>ОК. </b>Перед этим, однако, лучше нажать кнопку <b>Test, </b>чтобы проверить правильность задания запроса. Так, на всякий случай.<br> <br> Теперь сохраните страницу Guestbook_table.asp и опубликуйте ее на Web-сервере вместе со страницей Selector.htm. После этого откройте в Web-обозревателе страницу Selector.htm, набрав в строке адреса следующее:<br> <br> <a href="http://localhost/HTMLs/Selector.htm">http://localhost/HTMLs/Selector.htm</a><br> <br> Пощелкайте по ссылкам и посмотрите, что из этого получится. Если же серверная страница упорно выдает вам список всех записей гостевой книги, то просто нажмите кнопку обновления вашего Web-обозревателя.<br><br> <h1>Создание источника данных ODBC</h1>Создание источника данных ODBC<br><br> Для доступа к базам данных Web-серверы фирмы Microsoft, да и многие другие программы, используют механизм ODBC (Open DataBase Connectivity — открытое соединение с базой данных). ODBC-- универсальный механизм доступа к базам данных любого формата, встроенный в операционные системы Windows. А раз он встроен, то грех им не воспользоваться, тем более что он предоставляет достаточно мощные средства для извлечения данных и управления ими.<br> <br> Чтобы получить доступ к данным с помощью ODBC, сначала нужно создать так называемый источник данных ODBC — своего рода "пропуск" к базе данных, которым будут пользоваться использующие ее программы. Источник данных ODBC содержит сведения о том, где находится файл или файлы базы данных, и в каком формате она (база данных) хранится. Кроме того, там же содержатся имя и пароль пользователя, используемые для подключения к серверу данных, и некоторые другие необязательные параметры.<br> <br> Сейчас давайте рассмотрим, как создается источник данных ODBC.<br> <br> Само собой, здесь приводится только краткое описание и уж тем более не показаны все параметры, хранящиеся в источнике. Если вы хотите узнать больше о ODBC, поищите соответствующую документацию на сайте <a href="http://msdn.microsoft.com">http://msdn.microsoft.com</a>. А здесь ограничимся только кратким описанием, без которого в данном случае нам не обойтись, и опустим все "излишества".<br> <br> Итак, первым делом нужно вызвать апплет Панели управления Windows под названием <b>Источники данных (ODBC). </b>(В других операционных системах он может называться по-другому, например, <b>ODBC; </b>в любом случае, эта аббревиатура должна присутствовать в его названии.) Просто вызовите окно Панели управления и щелкните по значку с соответствующей надписью.<br> <br> После этого на экране появится окно <b>Администратор источников данных ODBC. </b>Сразу же переключитесь на вкладку <b>Системный DSN </b>(Рисунок 17.2).<br> <br> <p align="center"><br><br> <h1>Создание набора данных</h1>Создание набора данных<br><br> Но прежде чем приступим собственно к дизайну, нам нужно выполнить одно подготовительное действие — создать набор данных. Набор данных — это условие выборки данных с указанием таблиц и полей, из которых будут извлекаться данные. При этом также возможно задание фильтра — условия отбора данных из записей. После создания набора данных уже можно приступать к серверной странице, отображающей данные.<br> <br> Для работы с наборами данных нам понадобится еще одна панель, не рассмотренная ранее, - <b>Bindings</b>. Чтобы вызвать эту панель на экран, включите пункт-выключатель Bindings меню <b>Window </b>или нажмите комбинацию клавиш <Ctrl>+<F10>.<br> <br> Эта панель также состоит, в основном, из списка уже созданных к данному времени наборов данных. Изначально она, однако, содержит только нравоучительный текст, перечисляющий нерадивым Web-программистам шаги, которые они должны пройти перед тем, как смогут создать свой первый набор данных. Но мы-то их уже прошли! Поэтому сразу же перейдем к созданию нашего первого набора данных.<br> <br> Нажмите неизменную кнопку со знаком "плюс", находящуюся в этой панели, и выберите в появившемся на экране меню пункт <b>Recordset (Query). </b>Также вы можете нажать кнопку <b>Recordset </b> вкладки <b>Application </b>панели объектов или выбрать пункт <b>Recordset </b>подменю <b>Application Objects </b>меню <b>Insert. </b>На экране появится диалоговое окно <b>Recordset</b><br> <br> <p align="center"><br><br> <h1>Создание навигатора</h1>Создание навигатора<br><br> Для перемещения по записям набора данных нужен особый элемент Web-страницы, называемый навигатором. Он состоит из набора гиперссылок или кнопок, выполняющих перемещение на первую, предыдущую, последующую и последнюю записи набора. Если вы много работаете в Microsoft Access, вы должны помнить нечто подобное, расположенное в самом низу окна таблицы, а именно — набор из четырех вышеупомянутых кнопок и поля ввода номера записи.<br> <br> Dreamweaver предлагает нам встроенные средства создания навигатора, состоящего из гиперссылок. Давайте воспользуемся ими. Но сначала поставим текстовый курсор в конец созданного нами ранее динамического текста и нажмем клавишу <Enter>.<br> <br> Чтобы создать гиперссылку и серверное поведение, выполняющие переход на первую запись набора, выберите пункт <b>Move To First Record </b>в подменю <b>Recordset Paging </b>меню серверных поведений панели <b>Server Behaviors. </b>На экране появится диалоговое окно <b>Move To First Record</b>.<br> <br> В раскрывающемся списке <b>Recordset </b>выберите нужный набор данных и нажмите кнопку <b>ОК. </b>Dreamweaver создаст в месте, где находится текстовый курсор, гиперссылку с текстом "First". Замените ее текст на что-нибудь русскоязычное (например, "Первая") или более понятное ("<<"). Все, на этом создание гиперссылки, выполняющей переход на первую запись набора, закончено.<br> <br> Поставьте после гиперссылки "<<" два-три неразрывных пробела, нажав нужное количество раз комбинацию клавиш <Сtrl>+<Shift>+<пробел>. Так мы отделим одну гиперссылку навигатора от другой.<br> <br> Чтобы создать поведение, выполняющее переход на предыдущую запись набора, выберите пункт <b>Move To Previous Record </b>в подменю <b>Recordset Paging </b>меню серверных поведений. На экране появится диалоговое окно <b>Move To Previous Record, </b>аналогичное окну <b>Move To First Record. </b>Точно так же выберите в раскрывающемся списке <b>Recordset </b>нужный набор данных, нажмите кнопку ОК и замените текст созданной гиперссылки на "<". Поставьте после второй гиперссылки два-три неразрывных пробела. И продолжим.<br> <br> Поведения, выполняющие переход на последующую и последнюю записи набора, создаются путем выбора пунктов <b>Move To Next</b> <b>Record и Move To Last Record </b>соответственно. Одноименные диалоговые окна полностью схожи с окном <b>Move To First Record. </b>Так что никаких неожиданностей не должно возникнуть.<br> <br> Поведения для навигатора можно создавать и по-другому. Напишите текст, который станет одной из гиперссылок навигатора, выделите его и выберите в меню серверных поведений нужный пункт. После этого введите необходимые параметры в появившееся на экране диалоговое окно и нажмите кнопку ОК. Так даже проще — вам не придется исправлять в конце текст гиперссылки.<br> <br> <p align="center"><br><br> <h1>Создание простейших серверных страниц</h1>Создание простейших серверных страниц<br><br> Итак, мы хотим создать страницу, с помощью которой посетитель сайта может добавить новую запись в гостевую книгу. Для этого нам понадобится форма, состоящая из одного поля ввода, и серверный сценарий, точнее, серверное поведение, добавляющее введенный посетителем текст в поле<br> content таблицы Guestbook. Максимальная длина этого текста составит 50 символов (или какую там длину текстового поля content вы задали).<br> <br> Давайте создадим форму, содержащую одно поле ввода и одну кнопку отправки данных. Назовем поле ввода content, а саму форму — AddRecord. Так мы не запутаемся в многочисленных названиях. Остальные параметры формы мы задавать не будем — это сделает за нас Dreamweaver.<br> <br> Следующий шаг — создание серверного поведения, выполняющего добавление записи в таблицу.<br> <br> Для работы с поведениями нам понадобится панель <b>Server Behaviors </b>(Рисунок 17.7). Чтобы вызвать ее на экран, включите пункт-выключатель <b>Server Behaviors </b>в меню <b>Window </b>или нажмите комбинацию клавиш <Ctrl>+<F9>.<br> <br> <p align="center"><br><br> <h1>Создание сложных наборов данных</h1>Создание сложных наборов данных<br><br> Осталось изменить страницу Guestbook_table.asp так, чтобы она отображала не только содержимое поля content, но и содержимое поля sign. Давайте сделаем это и попутно изучим построение сложных SQL-запросов и создание сложных наборов данных.<br> <br> На первый взгляд, задача, стоящая перед нами, очень проста. В самом деле, мы уже знаем, как создать динамический текст и привязать его к полю набора данных. Мы уже, собственно, выполнили это, когда делали страницы Guestbook.asp и Guestbook_table.asp. Теперь же нам ничего не стоит добавить в повторяющуюся область последней страницы новый динамический текст, привязанный к полю Sign.<br> <br> Давайте так и сделаем. И что получится в результате? А вот что.<br> <br> Когда мы откроем доработанную страницу Guestbook_table.asp в Web-обозревателе, то увидим, что вместо слов "Положительно", "Отрицательно" или "Нейтрально" стоят цифры от 1 до 3. Почему? Да потому, что созданное нами поле sign имеет числовой тип, и именно число, находящееся в нем, отображается на странице. Но мы-то хотим увидеть слова, а не цифры! Что делать?<br> <br> Создать сложный набор данных, извлекающий данные не из одной, а из нескольких таблиц. А для этого нам придется построить сложный SQL-запрос, и сделать это нужно вручную.<br> <br> Откройте страницу Guestbook_table.asp и переключитесь на панель <b>Bindings. </b>Дважды щелкните по пункту <b>Recordset (Guestbook), </b>представляющему созданный нами ранее простой набор данных. (Простым набором данных называется тот, который извлекает данные из одной таблицы.) На экране появится диалоговое окно <b>Recordset. </b>Щелкните по кнопке <b>Advanced </b>— и это окно изменит свой вид (Рисунок 17.14).<br> <br> <p align="center"><br><br> <h1>Создание строки статуса набора данных</h1>Создание строки статуса набора данных<br><br> Вспомните окно таблицы Microsoft Access. Возле навигатора там отображается небольшое текстовое поле с номером текущей записи и общим количеством записей в таблице. Давайте сделаем такое же поле и на нашей серверной страничке, т. е. создадим строку статуса набора данных.<br> <br> А для этого нам понадобятся системные поля этого самого набора данных. Напомним, что это такое. Системным полем набора данных называется поле, не взятое из таблицы, на основе которой создан этот набор, а созданное самим процессором баз данных и отображающее какую-либо служебную информацию. Таких системных полей Dreamweaver предлагает три: [firs-record index] (номер первой записи набора, показываемой на текущей странице), [last record index] (номер последней записи, показываемой на текущей странице) и [total records] (общее количество записей в наборе). И все они отображаются в панели <b>Bindings </b>в виде одноименных пунктов (см. Рисунок 17.13).<br> <br> Итак, поставьте текстовый курсор после самой последней гиперссылки навигатора и нажмите клавишу <Enter>. В новом текстовом абзаце наберите текст "Запись" и поставьте после него неразрывный пробел. Именно здесь мы и создадим новый динамический текст, связанный с системным полем [first record index]. Как это сделать, вы знаете. Впрочем, если вы хотите, можете привязать этот динамический текст к полю [last record index] — все равно на нашей странице отображается только одна запись.<br> <br> Теперь поставьте обычный пробел, введите текст "из", поставьте неразрывный пробел и создайте второй динамический текст, привязанный к системному ПОЛЮ [total records]. Вот И все.<br> <br> <p align="center"> <b></b><br><br> <h1>Создание</h1>Создание<br><br> <b>серверных страниц в Dreamweaver</b><br> Сохраните готовую Web-страницу в файле AddRecord.asp и поместите ее в каталог HTMLs нашего сайта. Вы можете задать для нее те же свойства, что и для других страниц этого же сайта, и поместить в нее какой-либо поясняющий текст. Нет смысла описывать, как это делается — уж что-что, а делать обычные Web-страницы вы уже научились.<br><br> <h1>Страница для одновременного просмотра нескольких записей</h1>Страница для одновременного просмотра нескольких записей<br><br> Ох и хорошая у нас получилась серверная страничка! (Не смотрите, что выглядит она весьма коряво, ведь сейчас наша задача — научиться писать серверные страницы. Впрочем, Web-дизайн мы уже "прошли", так что можете по ходу дела заняться украшательством.) Одно плохо — показывает она только одну запись набора. Конечно, мы создали навигатор и строку статуса набора данных, но толку от них не очень много. Вот как бы нам "запихать" на одну страничку сразу несколько записей!..<br> <br> Что, вы хотите несколько записей на одной странице? Запросто!<br> <br> Создайте новую серверную страницу и сохраните ее в файле Guestbook_table.asp. Именно ее мы и превратим в чудо современного программистского искусства, показывающего несколько записей одновременно.<br> <br> Первым делом создадим набор данных с такими же, как и у страницы Guestbook.asp, параметрами. Назовем его так же — Guestbook. После этого поместим на страницу динамический текст, привязанный к полю content набора данных. И напоследок поставим текстовый курсор в конце этого динамического текста и нажмем клавишу <Enter>. Все это вам уже знакомо.<br> <br> А теперь остановимся. И поговорим.<br> <br> Что мы видим в окне документа? Ничего странного — просто серверная Web-страница, похожая на созданную нами ранее Guestbook.asp. Набор данных, динамический текст -- и все. Если теперь открыть ее в Web-обозревателе, она отобразит нам одну-единственную запись. Мы уже это наблюдали.<br> <br> Да, но нам нужны несколько записей на одной странице!<br> <br> Для этого нам поможет уже знакомая вам возможность, предлагаемая Dreamweaver специально для таких случаев, — повторяющаяся область.<br> <br> Да-да, нашу серверную страничку можно уподобить шаблону! В самом деле, в Dreamweaver мы создали своего рода образец Web-страницы, который в дальнейшем будет наполняться полезным содержимым. Только делать это будет не Web-дизайнер, а серверный сценарий. И данные он будет брать не из своей головы (или головы Web-писателя), а из базы данных.<br> <br> Чтобы создать повторяющуюся область, сначала выделите фрагмент страницы, который станет ее содержимым. В нашем случае — это динамический текст, привязанный к полю Content набора данных. Затем выберите пункт <b>Repeat Region </b>меню серверных поведений панели <b>Server Behaviors. </b>После этого на экране появится диалоговое окно <b>Repeat Region</b>.<br> <br> В раскрывающемся списке <b>Recordset </b>выберите набор данных, из которого будут извлекаться записи.<br> <br> Если вы хотите, чтобы на странице отображались все записи набора данных, включите переключатель <b>All Records </b>группы <b>Show. </b>Это стоит делать тогда, когда вы уверены, что записей в вашем наборе не очень много, или если содержимое их невелико по размеру. В противном случае лучше всего показывать содержимое набора данных по частям; для этого включите верхний переключатель группы <b>Show </b>и введите количество одновременно отображаемых записей в поле ввода <b>Records at a Time.</b><br> <br> Давайте сделаем нашу страничку как можно меньше. Для этого зададим количество одновременно отображаемых записей, равное трем. Это позволит нам не вводить слишком много отладочных записей в таблицу Guestbook базы данных Guestbook.mdb.<br> <br> Введя все данные, нажмите кнопку <b>ОК. </b>Если вы передумали создавать повторяющуюся область, нажмите кнопку <b>Cancel</b>.<br> <br> Теперь осталось добавить к нашей странице навигатор. Конечно, это будет не такой навигатор, который мы создали ранее. В данном случае нам нужно перемещаться не от записи к записи, а от страницы к странице. Но вам не нужно об этом беспокоиться — все хлопоты по отсчету необходимого количества записей возьмет на себя Dreamweaver. Поэтому просто создайте навигатор, как мы делали это раньше.<br> <br> Если хотите, вы можете создать также строку статуса для набора данных. Здесь вам понадобятся оба системных поля, отображающих количество показываемых на странице записей: [first record index] И [last record index]. Как вы помните, первое из них показывает номер первой записи, присутствующей на странице, а вторая — номер последней из показываемых записей.<br> <br> Осталось сказать о параметрах повторяющейся области. Чтобы задать их, выделите нужную повторяющуюся область и посмотрите на редактор свойств.<br> <br> Единственный элемент управления, который стоит здесь рассмотреть, — это поле ввода <b>Repeat Region. </b>В нем задается имя повторяющейся области. Остальные элементы управления знакомы вам по диалоговому окну <b>Repeat Region.</b><br><br> <h1>Страница отображающая данные</h1>Страница, отображающая данные<br><br> Серверную страницу, отображающую данные, создать проще простого. После того как мы создали набор данных, нам остается только перетаскивать в страницу нужные поля из панели <b>Bindings </b>— a Dreamweaver сделает все остальное.<br> <br> Итак, откройте страницу Guestbook.asp, если вы ее еще не открыли. И поместите в нее динамический текст, отображающий содержимое поля таблицы Guestbook. Можете считать, что динамический текст — своего рода изменяемая область шаблона, содержимое которой будет взято из заданного вами поля таблицы.<br> <br> Как это сделать? Как уже было сказано, просто перетащив нужное поле (в нашем случае — <b>Content) </b>из панели <b>Bindings </b>на Web-страницу. Если вы уже закрыли эту панель, то можете щелкнуть кнопку <b>Dynamic Text </b>(Рисунок 17.10) вкладки <b>Application </b>панели объектов или выбрать пункт <b>Dynamic Text </b>подменю <b>Application Objects </b>меню <b>Insert. </b>После этого на экране появится диалоговое окно <b>Dynamic Text. </b> Выберите нужный пункт в иерархическом списке <b>Field </b>и нажмите кнопку <b>ОК.</b><br> <br> <p align="center"><br><br> <h1>Установление соединения с базой данных</h1>Установление соединения с базой данных<br><br> Следующее, что нам нужно сделать, — это установить соединение с базой данных. Это надо для того, чтобы Dreamweaver смог создать необходимые для работы с данными сценарии. (Имейте в виду, что в данном случае речь идет о серверных сценариях.) Процесс соединения с базой данных мы рассмотрим пошагово.<br> <br> Но сначала нам нужно подготовить саму базу данных, где будут храниться записи нашей гостевой книги. Создайте ее в Microsoft Access. Поместите в нее единственную таблицу Guestbook, содержащую единственное текстовое поле content. Сам файл базы данных назовите так же, как таблицу — Guestbook.mdb. Поместите ее в какую-либо папку, но не в папку, где хранятся файлы локальной копии вашего сайта, иначе Dreamweaver опубликует ее на Web-сервере "за компанию" с Web-страницами и прочими файлами.<br> <br> <br><br> <h1>Вы не сможете изменить созданный </h1>Внимание<br><br> Вы не сможете изменить созданный вами параметр гиперссылки, так что вводите данные внимательно. Если вы все же ошиблись, удалите неверно заданный параметр и создайте его заново.<br> <br> Если же вы передаете данные методом POST, вам будет нужно создать параметр формы. Для этого выберите в меню кнопки "плюс" все тот же пункт Request Variable, но в раскрывающемся списке Туре диалогового окна Request Variable выберите пункт Request.Form.<br><br> <h1>Никогда не публикуйте файлы базы </h1>Внимание<br><br> Никогда не публикуйте файлы базы данных на Web-сервере, особенно если она содержит секретные данные! Если вы все же это сделаете, любой достаточно грамотный пользователь Интернета сможет загрузить ее на свой компьютер и прочитать все, что в ней хранится. База данных не должна быть доступна извне!<br> <br> <br><br> <h1>Пользователям операционных систем Windows NT, </h1>Внимание<br><br> Пользователям операционных систем Windows NT, 2000 и ХР. При установке Web-сервер Internet Information Server создает пользователя под именем IUSR_сетевое имя вашего компьютерах Проверьте, имеет ли этот пользователь полные права для доступа к папке, где хранится файл вашей базы данных, иначе при попытке доступа к ней из серверной страницы вы получите сообщение об ошибке. (Учтите — ко всей папке, а не к самому файлу базы данных!) Как дать пользователю права доступа к папке, описано в документации Windows.<br><br> <h1> Использование пакета Dreamweaver </h1> <h1>Административные страницы сайта</h1>Административные страницы сайта<br><br> Первоначально создадим набор Web-страниц, служащих для администрирования нашего сайта. В самом деле, нашу базу данных нужно сначала наполнить содержимым — кому нужна пустая библиотека. А это работа администратора, которому необходимо предоставить соответствующие инструменты.<br><br> <h1>Как администрируются Webсайты</h1>Как администрируются Web-сайты<br><br> Как вы знаете, администратором называется человек, осуществляющий поддержку Web-сайта или какой-либо серверной программы (Web-сервера, сервера базы данных и пр.). Администратор настраивает программное обеспечение, поддерживает в порядке серверный компьютер, а в случае интерактивного Web-сайта также еще и следит за его базами данных. Очень часто администратор сайта является и его разработчиком, хотя это и не правило.<br> <br> Администратор может быть один или работать в составе группы администраторов, отвечающих за различные составные части этого сайта. В последнем случае один администратор может следить за Web-сервером, другой — за базами данных, а третий — за сервером баз данных. Как правило, большие корпоративные сайты так и администрируются — один человек просто не может за всем уследить. Кроме того, большие Web-сайты разрабатываются отдельной командой Web-дизайнеров, Web-художников и Web-программистов, работающих совместно с администраторами. Сами понимаете, корпоративный сайт большой компании, такой как Microsoft, один человек просто не "потянет".<br> <br> Другое дело — маленький сайт, такой как наш. Разрабатывает и поддерживает их один человек — автор, Web-дизайнер, Web-художник и Web-программист в одном лице.<br> <br> Теперь поговорим о том, как администрируются интерактивные Web-сайты. Собственно, для этого могут применяться два способа, которые мы сейчас рассмотрим. Оба этих способа имеют право на существование, и выбор любого из них — дело вашего вкуса.<br> <br> Первый способ заключается в том, что для работы с базой данных сайта — просмотра или изменения хранящихся в ней данных — используются сторонние программы. "Сторонние" в данном случае значит — не относящиеся к Web-серверу, т. е. Web-сервер никак не участвует в администрировании вашего сайта. Административные программы работают отдельно от него и не обращаются к нему для выполнения своих функций.<br> <br> В главе 17, когда мы создавали базу данных для нашей доски объявлений, то применяли как раз такой подход. Поскольку наш сайт использовал базу данных формата Microsoft Access, то мы использовали эту самую СУБД для работы с этой базой. Web-сервер в этом никак не участвовал.<br> <br> Если же вы храните данные в серверной базе, то можете пользоваться любой современной программой СУБД, умеющей "общаться" с вашим сервером данных, в том числе той же самой Access. (Впрочем, получать данные от сервера сейчас могут практически все СУБД.) Самый же простой случай — хранение данных в текстовых файлах; в этом случае вы можете воспользоваться любым текстовым редактором, например Блокнотом.<br> <br> Преимущество первого способа администрирования сайта — снижение нагрузки на Web-сервер. Это преимущество особенно ощутимо, когда сайт администрируется достаточно часто. Недостаток: необходимость наличия дополнительных программ на компьютере администратора.<br> <br> Второй способ администрирования сайта заключается в том, что вместо сторонних программ применяется специальный набор серверных Web-страниц. Эти страницы доступны только для администратора сайта и позволяют работать с данными, хранящимися в базе, без использования других программ. Такие Web-страницы часто называют административными.<br> <br> У этого способа администрирования сайтов есть два достоинства и два недостатка. Достоинства: отсутствие нужды в сторонних программах и возможность разграничения доступа для администраторов сайта, если таких несколько. Недостатки: повышенная нагрузка на Web-сервер и необходимость создания двух разных наборов Web-страниц — административных и общего доступа.<br> <br> Как уже писалось, вы можете использовать любой из этих способов. Просто взвесьте все достоинства и недостатки, предлагаемые обоими этими способами, и сделайте выбор. В принципе, ни один из них не предлагает каких-то неоспоримых достоинств, так что выбор — за вами.<br> <br> Давайте выберем для нашего сайта второй способ администрирования, т. е. с использованием административных Web-страниц. Так мы сможем лучше изучить принципы построения современных интерактивных сайтов и сможем попрактиковаться в создании разных типов серверных страниц. А что до трудоемкости, то сейчас для нас важна любая практика.<br><br> <h1>Принципы создания интерактивных сайтов</h1>Принципы создания интерактивных сайтов<br><br> Перечислим основные принципы разработки интерактивных Web-сайтов.<br> <br> <li> Все или почти все страницы сайта генерируются серверными программами. Статичные страницы хоть и присутствуют, но составляют весьма незначительный процент и содержат данные, не меняющиеся с течением времени, например сведения о владельце сайта или справочные данные о пользовании сайтом.<br> </li> <li> Данные для генерации страниц, как правило, берутся из баз данных, поскольку программирующее человечество пока что не придумало лучшего способа организованно хранить однотипные данные, чем помещение их в реляционные базы, которые вне конкуренции. Базы данных практически всегда работают под управлением сервера и очень часто — на отдельном серверном компьютере. Нередко также используется хранение данных в текстовых файлах, но это справедливо, в основном, для фрагментов Web-страниц (серверные включения).<br> </li> <li> Очень часто используется разграничение доступа к сайту. Разграничение доступа подразумевает, что разные посетители сайта имеют различные права на доступ к тем или иным данным, опубликованным на сайте. Так, обычные посетители могут только просматривать данные, в то время как "опытные" посетители имеют возможность также вносить в них некоторые изменения. Ну, а администраторы сайта, разумеется, могут творить с ними все, что захотят:<br> </li> <li> Если сайт использует разграничение доступа, то он обязательно должен предусматривать возможность входа (по-английски — logon). Чтобы войти на сайт, посетитель должен зайти на особую страницу входа и набрать свои имя и пароль. Если эти имя и пароль занесены в список посетителей сайта, серверная программа разрешает посетителю войти на сайт. В противном случае посетителю предлагается зарегистрироваться на сайте.<br> </li> <li> Сайт, использующий разграничение доступа, должен также предусматривать возможность регистрации посетителя. Если это общедоступный сайт, наподобие интернет-магазина, то посетитель регистрируется на нем, вводя данные о себе на особой странице регистрации, после чего они помещаются в список посетителей сайта. Если же это закрытый сайт, то для регистрации на нем надо будет обратиться к его администратору.<br> </li> <li> Сайт, использующий разграничение доступа, должен также предусматривать возможность выхода с сайта. При этом серверная программа "забывает", что данный посетитель вошел на сайт, очищая память, отведенную для хранения данных в нем, хотя соответствующая запись в списке посетителей, конечно же, сохраняется. Каждый посетитель, вошедший на сайт, обязательно должен с него выйти, чтобы освободить системные ресурсы серверного компьютера для других посетителей. Чтобы выйти с сайта, посетитель обычно должен щелкнуть специальную гиперссылку; реже используется особая страница выхода с сайта.<br> </li> <li> Разумеется, полностью общедоступные сайты типа поисковых машин не предусматривают разграничение доступа.<br> </li> Осталось теперь ввести один термин. Давайте назовем процесс "общения" посетителя с Web-сайтом, начиная от входа на главную страницу и заканчивая "уходом" с него, сессией. В дальнейшем мы будем часто пользоваться этим термином, так что не забывайте его.<br> <br> Вот теперь, кажется, все. Можно приступать к созданию нашего первого интерактивного Web-сайта. Пусть это будет библиотека различных афоризмов, умных, глупых или нейтральных. Причем доступна эта библиотека будет только после регистрации, т. е. она будет поддерживать разграничение доступа. Сами данные библиотеки будут храниться в базе данных Access, a доступ к ним будет производиться через особые серверные страницы. (Такой способ общения с базой данных называется Web-интерфейсом.)<br> <br> Итак, приступим...<br><br> <h1>Реализация поиска высказываний</h1>Реализация поиска высказываний<br><br> Все сайты, публикующие информацию из баз данных, предусматривают возможность поиска записей на основе какого-либо критерия. Давайте и мы сделаем возможность поиска высказываний по введенному посетителем слову.<br> <br> Чтобы посетитель смог ввести слово для поиска, нам нужно создать где-то форму. Давайте поместим ее на странице списка категорий Categories.asp под собственно списком категорий, в новом текстовом абзаце. Назовем форму Search, поле ввода слова для поиска — content и не забудем о кнопке отправки данных.<br> <br> Теперь выделим форму и с помощью редактора свойств введем следующие параметры:<br> <br> <li> <b> Action </b>— имя страницы, отображающей результаты поиска, а именно -Result.asp;<br> </li> <li> <b> Method </b>— метод отправки данных, в нашем случае — GET;<br> </li> <li> <b> Enctype </b>— кодировка отправляемых данных, а именно — appiication/x-www-form-urlencoded.<br> </li> Теперь, если посетитель введет слово и нажмет кнопку отправки данных, это слово будет отправлено странице Result.asp как параметр гиперссылки Content.<br> <br> Далее нужно создать страницу отображения результатов поиска. Создадим ее на основе уже существующей страницы списка высказываний Sen-tences.asp. Для этого откроем ее и сохраним под именем Result.asp в корневой папке сайта. После этого откроем новую страницу.<br> <br> В панели <b>Bindings </b>удалим параметр гиперссылки ID, если он там есть. После этого откроем диалоговое окно <b>Recordset </b>и изменим кое-какие параметры фильтра. В раскрывающемся списке <b>Filter </b>выберем пункт <b>Content </b>(имя поля, по которому мы будем осуществлять поиск) а в раскрывающемся списке, расположенном правее, — пункт <b>contains </b>(поле должно содержать введенное посетителем слово). Далее в списке, расположенном ниже, выберем пункт <b>URL Parameter </b>(параметр, переданный методом GET), а в поле ввода, расположенном ниже и правее, введем имя этого параметра — Content. И нажмем кнопку <b>ОК.</b><br> <br> Сохраним страницу Result.asp и опубликуем сайт на Web-сервере. Войдем на сайт, введем в форму поиска какое-либо слово и нажмем кнопку отправки данных. В результате мы получим страницу со списком найденных высказываний.<br> <br> Все, наш сайт готов!<br> <br> Вы можете расширить его. Например, сделать Web-интерфейс для работы со списками категорий и посетителей. Также вы можете добавить дизайнерские изыски — этим мы не занимались вообще. В общем, поработайте над сайтом, практика пойдет вам на пользу.<br><br> <h1>Реализация выхода с сайта</h1>Реализация выхода с сайта<br><br> Осталось реализовать выход с сайта — и работу над административными страницами можно считать законченной. Как вы помните, каждый посетитель, вошедший на сайт с разграничением доступа, должен по окончании работы с него выйти, чтобы освободить системные ресурсы серверного компьютера. Так что выход с сайта так же важен, как и вход на него.<br> <br> Выход с сайта можно реализовать двумя способами. Во-первых, можно предусмотреть на каждой из страниц, отображающей "закрытые" данные, особую гиперссылку, запускающую процесс выхода. Во-вторых, для этого можно предусмотреть особую серверную Web-страницу, вход на которую автоматически вызовет выполнение действий по выходу с сайта. Вы можете использовать любой из этих способов, мы же выберем первый.<br> <br> Откройте страницу Sentences.asp. Поместите где-либо на ней текст "Выход с сайта". Выделите его и выберите в подменю <b>User Authentication </b>меню серверных поведений панели <b>Server Behaviors </b>пункт <b>Log Out User. </b>На экране появится диалоговое окно <b>Log Out User.</b><br> <br> С помощью набора переключателей <b>Log Out When </b>выбирается момент времени, когда выполняется выход посетителя с сайта. Если вы хотите, чтобы выход выполнился при щелчке по гиперссылке (это как раз наш случай), включите переключатель <b>Link Clicked. </b>Если же вы хотите, чтобы выход выполнился при входе на данную Web-страницу, включите переключатель <b>Page Loads.</b><br> <br> В поле ввода <b>When Done, Go To </b>вводится интернет-адрес страницы, на которую будет осуществлен переход после выполнения процедуры выхода с сайта. Введите в это поле имя страницы входа Login.asp. Вы также можете нажать кнопку <b>Browse </b>и выбрать нужную страницу в диалоговом окне <b>Select File. </b>Введя все данные, нажмите кнопку <b>ОК.</b><br> <br> Проверьте готовую страницу в работе. Для этого опубликуйте сайт на Web-сервере, откройте в Web-обозревателе страницу Sentences.asp, войдите на сайт и тут же выйдите с него.<br> <br> Все, на этом создание административных страниц можно считать законченным. Теперь приступим к созданию страниц общего доступа, предназначенных для обычных посетителей нашего сайта.<br><br><br> <h1>Средства удаления записи</h1>Средства удаления записи<br><br> Осталось создать средства удаления ненужных высказываний из таблицы Sentences. Что ж, и такое иногда приходится проделывать...<br> <br> Чтобы удалить ненужную запись, нам также понадобится серверная страница. Мы поместим на этой странице содержимое удаляемой записи (это хороший тон Web-программирования) и кнопку, запускающую процесс удаления записи. А для перехода на эту страницу мы поместим на странице Sentences.asp еще одну гиперссылку.<br> <br> Откройте страницу Sentences.asp. Поставьте текстовый курсор в четвертую ячейку второй строки таблицы и наберите текст "Удалить". Выделите только что введенное слово и наберите в поле ввода интернет-адреса редактора свойств такой текст:<br> <br> DeleteSentence.asp?ID=<br> <br> Далее переключитесь в режим отображения кода и перетащите из панели <b>Bindings </b>в место, находящееся точно после знака "=", поле ID набора записей. Интернет-адрес гиперссылки примет такой вид:<br> <br> Мы уже знаем, что означает этот код.<br> <br> DeleteSentence.asp?ID=<%=(Sentences.Fields.Item("ID").Value)%><br> <br> Теперь сохраните и закройте страницу Sentences.asp. Создайте новую серверную страницу, введите в нее поясняющий текст и сохраните под именем DeleteSentence.asp в папке Admin. Но не закрывайте только что созданную страницу — мы ей сейчас займемся.<br> <br> Сначала нужно создать набор записей, из которого будет взята запись для отображения на этой странице. Этот набор также должен содержать одну-единственную запись, поэтому нам придется задать фильтр по значению поля счетчика ID таблицы sentences, которое должно равняться значению параметра гиперссылки ID, переданному от страницы Sentences.asp. Кроме того, этот набор записей должен быть сложным, аналогичным тому, что мы создали на странице Sentences.asp. Создайте его, а если у вас возникнут затруднения, обратитесь к спасительной главе 17. Текст SQL-запроса будет таков:<br> <br> SELECT Sentences.ID, Content, Name FROM Sentences, Categories<br> <br> WHERE Sentences.ID = MMColParam AND Sentences.Category=Categories.ID<br> <br> Здесь MMCoiParam — имя параметра SQL-запроса, соответствующего параметру гиперссылки ID. Его значение, соответственно, будет<br> <br> Request.QueryString("ID").<br> <br> Теперь поместим на страницу динамический текст, привязанный к полю Content набора записей. В следующем абзаце наберем слово "Категория", поставим неразрывный пробел и поместим динамический текст, привязанный к полю Name.<br> <br> В следующем абзаце создадим форму и назовем ее Delete. Эта форма нужна нам для того, чтобы поместить кнопку, запускающую процесс удаления записи. Поместим же эту кнопку в форму. И сохраним страницу.<br> <br> Теперь нам нужно создать поведение Delete Record. Для этого выберем одноименный пункт в меню серверных поведений панели <b>Server Behaviors. </b>На экране появится диалоговое окно <b>Delete Record.</b><br> <br> Выберите в раскрывающемся списке <b>Connection </b>базу данных, в списке <b>Delete From Table </b>— таблицу, запись которой будет удалена, а в списке <b>Select Record From </b>— набор записей, из которого будет взята запись для отображения ее содержимого на странице. В нашем случае это будет соответственно Library, sentences и Sentences (таблица и набор записей у нас называются одинаково).<br> <br> В поле ввода <b>Unique Key Column </b>задается поле набора записей, по которому нужная нам запись будет однозначно идентифицироваться. В нашем случае — это ключевое поле ID. Если это числовое поле (а поле ID — числовое), включите флажок <b>Numeric, </b>в противном случае — отключите его.<br> <br> В раскрывающемся списке <b>Delete By Submitting </b>выбирается кнопка, после нажатия которой произойдет удаление записи.<br> <br> В поле ввода <b>After Deleting, Go To </b>вводится интернет-адрес страницы, на которую будет осуществлен переход после успешного удаления записи. Введите в него sentences. asp. Вы также можете щелкнуть кнопку <b>Browse </b>и выбрать нужную страницу в диалоговом окне <b>Select File.</b><br> <br> После ввода всех данных не забудьте нажать кнопку <b>ОК. </b>Сохраните страницу DclcteSentence.asp и проверьте ее. Введите какую-нибудь запись и попробуйте ее удалить. Если она почему-то не удалится, проверьте, все ли вы сделали правильно.<br><br> <h1>Страница добавления записи</h1>Страница добавления записи<br><br> Давайте подумаем, что нам нужно сделать теперь, когда страница списка высказываний готова и работает?<br> <br> <br><br> <h1>Страница изменения записи</h1>Страница изменения записи<br><br> Наряду с добавлением новых записей часто приходится изменять уже существующие. Давайте создадим страницу, с помощью которой можно изменять уже существующие в наборе записи.<br> <br> Создадим новую страницу, введем в нее поясняющий текст и сохраним под именем EditSentence.asp в папке Admin. Здесь мы впоследствии создадим форму с элементами управления, предназначенными для правки значений полей выбранной нами записи. А пока закроем эту страницу — нас ждут другие дела.<br> <br> Сейчас мы добавим на страницу Sentences.asp гиперссылку, ведущую на страницу изменения записи. Откройте страницу, поместите текстовый курсор в третью ячейку второй строки таблицы (теперь вы поняли, зачем она нужна?) и наберите в ней слово "Изменить". Далее выделите это слово и наберите в поле ввода интернет-адреса редактора свойств такой текст:<br> <br> EditSentence.asp?ID=<br> <br> Далее переключитесь в режим отображения кода и перетащите из панели <b>Bindings </b>в место, находящееся точно после знака "=", поле ID набора записей. Интернет-адрес гиперссылки примет такой вид:<br> <br> EditSentence.asp?ID=<%=(Sentences.Fields.Item("ID").Value)%><br> <br> Давайте выясним, что это значит. Код<br> <br> Sentences.Fields.Item("ID").Value<br> <br> извлекает значение поля ID данной записи набора. Далее это значение помещается в гиперссылку, которая принимает вид:<br> <br> EditSentence.аsр?ID=<значение поля ID"><br> <br> и передается странице EditSentences.asp в качестве значения параметра гиперссылки ID. Поскольку значение поля ID уникально для каждой записи набора (поле ID — счетчик записей, как вы помните), страница EditSentences.asp может однозначно идентифицировать запись, которую вы хотите изменить, и заполнить значениями ее полей элементы управления формы, т. е. подготовить запись к правке.<br> <br> Теперь сохраните страницу Sentences.asp и откройте только что созданную нами страницу EditSentence.asp. Пора заняться ей.<br> <br> Для того чтобы отредактировать запись, нам понадобится форма. Создайте ее по аналогии со страницей AddSentence.asp. Никаких особенностей она иметь не будет, поэтому вы можете просто скопировать уже готовую форму со страницы добавления новой записи и вставить ее в страницу EditSentence.asp. Но перед этим создайте на этой странице набор данных categories, также по аналогии со страницей AddSentence.asp.<br> <br> Следующий шаг — создание набора записей, из которого будет взята запись для заполнения элементов управления созданной нами формы. Этот набор должен содержать одну-единственную запись, поэтому нам придется задать фильтр, отбирающий нужную запись. Она будет выбрана по значению поля счетчика ID таблицы Sentences, которое должно равняться значению параметра гиперссылки ID, переданному от страницы Sentences.asp (см. выше).<br> <br> Чтобы создать фильтр, выберите название поля ID в раскрывающемся списке <b>Filter </b>диалогового окна <b>Recordset, </b>а в раскрывающемся списке, расположенном правее, — пункт = (равенство значений поля и фильтра). Далее в списке, расположенном ниже, выберите пункт <b>URL Parameter </b>(параметр, переданный методом GET), а в поле ввода, расположенном ниже и правее, введите имя этого параметра — ID.<br> <br> Далее нам нужно заполнить элементы управления формы соответствующими им значениями. Эти значения, как вы поняли, будут взяты из только что созданного нами набора записей. Для разных элементов управления действия будут различными, и мы их сейчас опишем.<br> <br> Сначала выделите область редактирования и найдите в редакторе свойств кнопку с изображением молнии — она находится правее области редактирования <b>Init Val. </b>Щелкните по этой кнопке. На экране появится диалоговое окно <b>Dynamic Data; </b>выберите в иерархическом списке <b>Field </b>пункт <b>Content, </b>соответствующий одноименному полю, и нажмите кнопку ОК. Все, теперь область редактирования получит значение из поля Content набора записей.<br> <br> С раскрывающимся списком все несколько сложнее. Выделите его и нажмите кнопку <b>Dynamic. </b>В появившемся на экране диалоговом окне <b>Dynamic List/Menu </b>щелкните кнопку с изображением молнии, расположенную правее поля ввода <b>Select Value Equal To. </b>После этого на экране опять же появится диалоговое окно <b>Dynamic Data; </b>выберите в иерархическом списке <b>Field </b>пункт <b>Category, </b>соответствующий одноименному полю, и нажмите кнопку <b>ОК. </b>Теперь остается только нажать кнопку <b>ОК </b>окна <b>Dynamic List/Menu.</b><br> <br> Можно сделать еще проще — перетащить нужное поле из панели <b>Bindings </b>на соответствующий ему элемент управления. Автор рекомендует вам так и поступать в дальнейшем.<br> <br> Теперь нужно создать поведение update Record, которое, собственно, и реализует заполнение формы и обновление значений полей редактируемой записи. Выберите пункт <b>Update Record </b>меню серверных поведений панели <b>Server Behaviors. </b>На экране появится диалоговое окно <b>Update Record</b>.<br> <br> Выберите в раскрывающемся списке <b>Connection </b>базу данных, в списке <b>Table То Update </b>— таблицу, запись которой будет обновляться, а в списке <b>Select Record From </b>— набор записей, из которого будет взята запись для заполнения формы. В нашем случае это будет соответственно Library, Sentences и Sentences (соответственно, одноименные таблица и набор записей).<br> <br> В поле ввода <b>Unique Key Column </b>задается поле набора записей, по которому нужная нам запись будет однозначно идентифицироваться. В нашем случае — это ключевое поле ID. Если это числовое поле (а поле ID — числовое), включите флажок <b>Numeric, </b>в противном случае — отключите его.<br> <br> В поле ввода <b>After Updating, Go To </b>вводится интернет-адрес страницы, на которую будет осуществлен переход после успешного изменения записи. Введите в него sentences. asp. Вы также можете щелкнуть кнопку <b>Browse </b>и выбрать нужную страницу в диалоговом окне <b>Select File.</b><br> <br> В раскрывающемся списке <b>Get Values From </b>выбирается форма, из которой будут взяты значения для обновления записи.<br> <br> В списке <b>From Elements </b>перечислены все элементы управления, находящиеся в выбранной форме. Вы можете выбрать любой из них и задать для него поле таблицы, куда будут помещены содержащиеся в нем данные, и тип отправляемых данных (текст, число, дата и т. п.).<br> <br> Поле таблицы выбирается в раскрывающемся списке <b>Column. </b>Пункт <b><ignore> </b>данного списка позволяет проигнорировать значение этого элемента управления (т. е. оно не будет помещено в поле таблицы).<br> <br> Тип данных указывается в раскрывающемся списке <b>Submit </b>As. В нем доступны следующие пункты: <br> <br> <li> <b> Text </b>— текстовые данные;<br> </li> <li> <b> Numeric </b>— числовые данные;<br> </li> <li> <b> Date </b>— значение даты;<br> </li> <li> <b> Date MS Access </b>— значение даты, предназначенное для Microsoft Access;<br> </li> <li> <b> Checkbox Y,N </b>— логическое значение, преобразуемое в символы "Y" ("да") или "N" ("нет");<br> </li> <li> <b> Checkbox 1,0 </b>— логическое значение, преобразуемое в числа 1 ("да") или 0 ("нет");<br> </li> <li> <b> Checkbox -1,0 </b>— логическое значение, преобразуемое в числа -1 ("да") или 0 ("нет");<br> </li> <li> <b> Checkbox MS Access </b>— логическое значение, предназначенное для Microsoft Access.<br> </li> Задав все нужные данные, не забудьте нажать кнопку <b>ОК.</b><br> <br> Сохраните готовую страницу EditSentence.asp и проверьте ее в действии. Для этого опубликуйте сайт на Web-сервере, откройте страницу Sentences.asp в Web-обозревателе и попробуйте отредактировать какое-либо высказывание. Если страница изменения записи почему-то не работает, проверьте, все ли правильно вы сделали.<br><br> <h1>Страница регистрации посетителя</h1>Страница регистрации посетителя<br><br> Последняя из страниц общего доступа, которую нам нужно создать, — это страница регистрации нового посетителя нашего сайта. В самом деле, если посетитель не сможет зарегистрироваться на нашем сайте, занеся сведения о себе в список посетителей, как же он сможет добраться до содержимого этого сайта?<br> <br> Создайте новую серверную страницу, поместите на ней поясняющий текст и сохраните под именем Register.asp в корневой папке нашего сайта. Поместите в нее форму и назовите User. В этой форме создайте поля ввода Name (имя посетителя) и Password (пароль) и кнопку отправки данных.<br> <br> Для регистрации посетителя в списке используется хорошо вам знакомое поведение insert Record. В самом деле, если список посетителей представляет собой таблицу базы данных, а сведения о каждом посетителе — запись в этой таблице, то именно этим поведением и стоит пользоваться. Создайте же его. Пусть содержимое поля ввода Name заносится в поле Name таблицы Users, а содержимое поля Password — в поле Password. Поле Grants,<br> <br> в котором записываются права посетителя, получит значение по умолчанию "user" (обычный посетитель). А в качестве страницы, на которую будет выполнен переход после успешного добавления новой записи, задайте<br> <br> Categories.asp — в этом случае новоиспеченный посетитель сразу сможет зарегистрироваться и просмотреть плоды нашего ума.<br> <br> Вроде бы все прекрасно. Посетитель заходит на эту страницу, вводит данные о себе и сразу же получает доступ к сайту. Однако это та самая простота, которая хуже воровства. Почему? Сейчас увидим.<br> <br> Предположим, какой-то посетитель успешно зарегистрировался на нашем сайте, получил к нему доступ и успешно же вышел с него. После этого на сайте регистрируется второй посетитель. И вводит то же самое имя, под которым уже зарегистрировался первый посетитель!<br> <br> Если вы не предусмотрите специальных средств для недопущения совпадения имен посетителей (например, не сделаете поле таблицы, где хранится имя, уникальным), это может породить конфликт. А такие конфликты ни к чему хорошему не ведут — они ведут только к плохому!<br> <br> Именно для недопущения таких случаев Dreamweaver предусматривает особое поведение check New username. Это поведение проверяет таблицу списка посетителей на предмет совпадения введенного в форме регистрации имени с уже имеющимися в таблице. Если введенного новым посетителем имени нет в таблице, поведение check New username запускает поведение insert Record, успешно добавляющее в список нового посетителя.<br> <br> Давайте создадим поведение check New username. Но сначала проверим, действительно ли мы создали поведение insert Record.<br> <br> Выберите в подменю <b>User Authentication </b>меню серверных поведений панели <b>Server Behaviors </b>пункт <b>Check New Username. </b>На экране появится диалоговое окно <b>Check New Username.</b><br> <br> В раскрывающемся списке <b>Username Field </b>выберите поле ввода, в котором вводится имя посетителя.<br> <br> В поле ввода <b>If Already Exists, Go To </b>вводится интернет-адрес страницы, на которую будет осуществлен переход, если в списке будет найден посетитель с таким именем. Введите в это поле имя страницы регистрации Register.asp. Вы также можете нажать кнопку <b>Browse </b>и выбрать нужную страницу в диалоговом окне <b>Select File.</b><br> <br> Завершив ввод данных, нажмите кнопку ОК. И сохраните готовую страницу.<br> <br> Осталось сделать совсем немного. А именно — поместить на страницу входа на сайт Login.asp гиперссылку, указывающую на страницу регистрации. Это нужно для того, чтобы новый посетитель сайта смог сразу же после открытия его зарегистрироваться в списке. Сделайте это.<br> <br> Теперь можете проверить готовую страницу в действии. Опубликуйте сайт на Web-сервере, откройте в Web-обозревателе страницу входа Login.asp, зарегистрируйтесь на сайте под другом именем, скажем, "User", и попробуйте войти на сайт.<br><br> <h1>Страница списка категорий</h1>Страница списка категорий<br><br> Давайте сделаем так, чтобы при входе на сайт посетитель мог выбрать категорию высказываний (зря мы их, что ли, вводили!). А для этого нам понадобится создать страницу списка категорий, чем мы сейчас и займемся.<br> <br> Создадим новую серверную страницу ASP и сохраним ее в файле Categories.asp в корневой папке сайта. И остановимся, чтобы немного подумать.<br> <br> Что нам нужно? Правильно, вывести список категорий. А еще? Нам необходимо, чтобы название каждой категории в этом списке представляло собой гиперссылку. Щелкнув по ней, посетитель сайта попадет на другую страницу, на которой будут перечислены все высказывания этой категории.<br> <br> Как это сделать? Очень просто: надо воспользоваться поведением GO TO Detail Page, выполняющим переход на связанную страницу.<br> <br> Создадим новый набор записей под именем categories. Задайте выборку всех записей таблицы categories. После этого задайте сортировку записей по полю Name, для чего выберите это поле в раскрывающемся списке Sort диалогового окна <b>Recordset </b>(см. Рисунок 17.15). Раскрывающийся список, расположенный правее, позволит вам задать порядок сортировки записей: по возрастанию (пункт Ascending) или по убыванию (пункт <b>Descending).</b><br> <br> Напишите на странице Categories.asp какой-либо пояснительный текст, если хотите. После этого создайте текстовый абзац и поместите в него динамический текст, связанный с полем Name набора данных categories. Далее выделите этот текст и создайте "вокруг" 'него повторяющуюся область, привязав ее к созданному нами набору данных categories. Пусть она отображает сразу все записи набора — их не так много, чтобы городить огород с навигатором и строкой статуса.<br> <br> Собственно, на этом создание страницы списка категорий почти закончено. Осталось только добавить поведение, реализующее переход на страницу со списком высказываний, относящихся к выбранной категории.<br> <br> Чтобы нам самим было проще в дальнейшем, давайте введем еще пару терминов. Назовем страницу, отображающую список категорий, первичной, а страницу, отображающую список высказываний, относящихся к выбранной категории, — вторичной. В литературе встречаются другие названия таких страниц, но мы будем использовать эти.<br> <br> Выделите содержимое повторяющейся области, а именно динамический текст. После этого выберите в меню серверных поведений панели <b>Server Behaviors </b>пункт <b>Go To Detail Page. </b>На экране появится диалоговое окно <b>Go То Detail Page.</b><br> <br> В поле ввода <b>Detail Page </b>введите интернет-адрес вторичной страницы, отображающей список высказываний. Вы также можете щелкнуть по кнопке <b>Browse </b>и выбрать нужную страницу в диалоговом окне <b>Select File. </b>Мы создадим эту страницу позднее и назовем ее так же, как уже созданную административную страницу списка высказываний, — Sentences.asp, только сохраним в корневой папке сайта.<br> <br> В поле ввода <b>Pass URL Parameter </b>введите имя параметра, передаваемого из первичной страницы во вторичную. По умолчанию Dreamweaver подставляет в него имя первого поля ввода набора записей, и, если это то поле, которое вам нужно, менять его не стоит.<br> <br> В раскрывающемся списке <b>Recordset </b>выбирается набор записей, чье поле используется для связи первичной и вторичной страниц. Само же это поле выбирается в раскрывающемся списке <b>Column. </b>В нашем случае это набор записей categories и его поле ID.<br> <br> Теперь остается задать метод передачи параметра из первичной страницы во вторичную. Это делается с помощью группы флажков <b>Pass Existing Parameters. </b>Флажок <b>URL Parameters </b>задает использование метода <b>GET</b>, а флажок <b>Form Parameters </b>— метода <b>POST</b>. Нам лучше выбрать метод <b>GET</b>, т. к. объем передаваемых данных очень невелик, а хранить их в секрете необязательно.<br> <br> Введя все данные, нажмите кнопку <b>ОК. </b>После этого Dreamweaver преобразует выделенный фрагмент страницы в гиперссылку, выполняющую переход на вторичную страницу. И, разумеется, создаст поведение GO TO Detail Page.<br> <br> Теперь нужно ограничить доступ к этой странице. Для этого, как вы помните, нужно создать поведение Restrict Access TO Page. Задайте разграничение доступа по имени и паролю (переключатель <b>Username and Password </b>диалогового окна <b>Restrict Access To Page). </b>Таким образом, на эту страницу смогут попасть все зарегистрированные посетители вне зависимости от прав доступа.<br> <br> На этом создание страницы списка категорий можно считать законченным. Наш следующий шаг — создание страницы списка высказываний.<br><br> <h1>Страница списка высказываний</h1>Страница списка высказываний<br><br> В данном случае лучше всего создать страницу списка высказываний "с нуля". Если же мы решим создать ее на основе созданной ранее административной страницы Sentences.asp, нам придется вносить в нее слишком много изменений. Поэтому создадим новую серверную страницу, напишем на ней поясняющий текст и сохраним под именем Sentences.asp в корневой папке сайта.<br> <br> После этого создадим набор записей Sentences, извлекающий данные из только что созданной таблицы. Зададим для него фильтр по полю category. Для этого выберите название этого поля в раскрывающемся списке <b>Filter </b>диалогового окна <b>Recordset, </b>а в раскрывающемся списке, расположенном правее, — пункт = (равенство значений поля и фильтра). Далее в списке, расположенном ниже, выберите пункт <b>URL Parameter </b>(параметр, переданный методом GET), а в поле ввода, расположенном ниже и правее, введите имя этого параметра — ID.<br> <br> Кроме того, мы можем не извлекать из таблицы все поля, а ограничимся только полем Contents. Включим переключатель <b>Selected </b>в группе <b>Column </b>диалогового окна <b>Recordset </b>и выберем в расположенном ниже списке пункт <b>Content, </b>соответствующий одноименному полю таблицы. Поля ID и Category нам в данном случае не нужны, потому что их содержимое никак не отображается на странице. Это позволит нам уменьшить нагрузку на серверный компьютер, который и без того сильно загружен, ведь для хранения содержимого полей таблиц расходуется его оперативная память.<br> <br> Теперь поместите в текстовом абзаце динамический текст, привязанный к полю content набора записей, выделите весь абзац, щелкнув по соответствующей кнопке секции тегов, и создайте "вокруг" него повторяющуюся область. Затем сделайте навигатор и строку статуса набора данных.<br> <br> После этого поместите повторяющуюся область, навигатор и строку статуса внутрь необязательной области, отображающейся только при непустом наборе записей sentences. И создайте еще одну необязательную область, отображающуюся, наоборот, при пустом наборе записей и содержащую текст "Список высказываний пуст". Как видите, мы повторяем шаги, проделанные нами при создании административной страницы Sentences.asp.<br> <br> Последний шаг (его мы тоже проделывали) — это защита страницы от несанкционированного доступа и предоставление возможности выхода с сайта. Создайте соответствующие поведения и гиперссылку для выхода. Когда будете создавать поведение Restrict Access TO Page, задайте разграничение доступа по имени и паролю (переключатель <b>Username and Password </b>диалогового окна <b>Restrict Access To Page). </b>После этого сохраните готовую страницу.<br> <br> Теперь проверьте готовые страницы. Для этого опубликуйте сайт на Web-сервере, откройте в Web-обозревателе страницу Categories.asp, войдите на сайт (под именем "Admin" — других посетителей в списке нет), выберите категорию и просмотрите отобранные серверной программой высказывания. После этого выйдите с сайта. Если вы все сделали правильно, все должно работать.<br><br> <h1>Страница списка высказываний</h1>Страница списка высказываний<br><br> Итак, приступим!<br> <br> Давайте сначала подумаем над структурой нашей базы данных. Ведь если мы этого не сделаем, то ее (структуру) придется придумывать по ходу дела. А так никто не делает — вспомните, ведь строители перед тем, как начать строить что-либо, всегда сверяются с планом.<br> <br> Пусть все высказывания, хранящиеся в нашей библиотеке, делятся на три категории: умные, глупые и нейтральные, (Возможно, потом появятся другие категории, но сейчас нам вполне хватит этих трех.) Таким образом, мы позволим посетителю нашего будущего сайта сразу же при входе выбрать то, что ему нужно, т. е. когда посетитель зайдет на наш сайт, он сразу же получит возможность выбрать на особой странице одну из категорий, после чего перейдет на другую страницу, где будут перечислены высказывания выбранной им категории.<br> <br> Сейчас же мы не будем делить высказывания на категории, а выведем их в одном списке вперемешку. Не стоит слишком усложнять наш первый сайт, иначе мы толком ничему не научимся.<br> <br> Вы спросите, а как же разграничение доступа? Где страница входа на сайт? Это успеется. Сначала сделаем основные страницы, отображающие и изменяющие информацию, хранящуюся в нашей базе, а потом займемся безопасностью. На данном этапе ей можно пренебречь.<br> <br> Откроем Access и создадим базу данных под названием Library.mdb. В ней создадим таблицу categories с полями ID (счетчик) и Name (текстовое, 30 знаков). Первое поле послужит нам ключевым, а во втором, как вы уже поняли, будут храниться имена категорий. После этого введем в эту таблицу три записи: "Умные", "Нейтральные" и "Глупые".<br> <br> Далее создадим таблицу, где будут храниться наши высказывания. Эта таблица будет содержать следующие поля:<br> <br> <li> ID — счетчик;<br> </li> <li> Content — текст высказывания (Memo-поле);<br> </li> <li> category — категория высказывания (длинное целое, связанное с полем ID таблицы Categories).<br> </li> Назовем эту таблицу sentences. Введем какую-нибудь запись для отладочных целей, не обязательно осмысленную. И закроем Access — больше он нам не понадобится.<br> <br> Вы уже знаете, как создается источник данных ODBC. Если не знаете, обратитесь к главе 17, где это подробно описано. Наш новый источник данных будет называться Library и предоставлять доступ к базе данных Library.mdb.<br> <br> После этого создадим новую папку Sample4. В ней будут находиться файлы нашего нового сайта Sample site 4. В папке Sample4 создадим вложенную папку Admin, в которой будут храниться административные страницы сайта. Зарегистрируем наш новый сайт в Dreamweaver, задав те же данные, что и для сайта Sample site 1 в главе 17. Зарегистрируем базу данных Library.mdb в Dreamweaver, воспользовавшись только что созданным источником Library. На этом подготовительные действия закончились.<br> <br> Создав таблицу, приступим к созданию серверной страницы. Назовем ее так же, как таблицу, — Sentences.asp. Введем какой-нибудь пояснительный текст, если вдруг у нас появится такое желание. И сохраним ее в папке Admin, вложенной в корневую папку нашего сайта.<br> <br> После этого создадим набор записей sentences, извлекающий данные из только что созданной таблицы. Причем этот набор будет сложным: он свяжет вместе таблицы sentences и Categories, "заимствуя" из первой таблицы поля ID и Content, а из второй — поле Name. Связь будет осуществляться по полю Category таблицы Sentences И ПОЛЮ ID табЛИЦЫ Categories. Создайте этот набор записей, а в случае затруднений справьтесь в главе 17. Не задавайте для этого набора ни фильтра, ни сортировки. Текст SQL-запроса должен быть таким:<br> <br> SELECT Sentences.ID, Content, Name FROM Sentences, Categories WHERE Sentences.Category=Categories.ID<br> <br> Запись вида "Sentences.ID" означает, что мы выбираем значения поля ID таблицы Sentences.<br> <br> Поскольку мы будем отображать одновременно два значения, будет лучше создать для этого таблицу. Эта таблица должна содержать две строки и четыре столбца. В первой строке будет находиться "шапка", а во второй -собственно содержимое. (Как вы поняли, вторую строку придется поместить в повторяющуюся область.) В первом столбце таблицы будет отображаться содержание высказывания, а во втором — категория (в смысле, название категории), а последние два столбца мы пока оставим пустыми. Создайте такую таблицу и отформатируйте, как хотите.<br> <br> Теперь поместите в первую ячейку второй строки этой таблицы динамический текст, привязанный к полю Content набора записей, а во вторую ячейку — динамический текст, привязанный к полю Name. Далее выделите всю вторую строку, щелкнув по соответствующей кнопке секции тегов, и создайте "вокруг" нее повторяющуюся область, связанную с набором данных sentences. Задайте количество одновременно отображаемых записей равным двадцати.<br> <br> Поскольку мы создали повторяющуюся область, отображающую за раз фиксированное количество записей, нам нужно также создать навигатор и строку статуса. Сделайте это, сверяясь с главой 17, где создание навигатора и строки статуса было подробно описано, и поместите их под таблицей.<br> <br> Теперь остается только создать "вокруг" таблицы, навигатора и строки статуса необязательную область, показываемую только тогда, когда в наборе sentences есть записи. И поместить на странице еще одну необязательную область, отображаемую при отсутствии записей в наборе и содержащую текст, говорящий об этом. Создайте эти области.<br> <br> Вот и все. Наша страница готова. Можете проверить ее, переключив Dreamweaver в режим показа "живых" данных или загрузив страницу в Web-обозревателе.<br> <br> К несчастью, в таблице Sentences находится только одна запись. Но мы сейчас это исправим.<br><br><br> <h1>Страница входа на сайт</h1>Страница входа на сайт<br><br> Поскольку наш сайт будет поддерживать разграничение доступа, нам нужно обязательно сделать страницу входа на сайт. А, кроме того, нам необходимо создать в базе данных Library.asp таблицу, которая будет хранить список зарегистрированных посетителей.<br> <br> Первым делом нужно, разумеется, создать таблицу, чтобы нам было с чего начинать создание страницы входа. Эта таблица будет содержать следующие поля:<br> <br> <li> Name — имя посетителя (текстовое, 20 символов, ключевое); </li> <li> Password — пароль посетителя (текстовое, 20 символов); </li> <li> Grants — права посетителя (текстовое, 20 символов).<br> </li> <li> первыми двумя полями все ясно. Поговорим о третьем поле — Grants. Dreamweaver, точнее, его поведения, "отвечающие" за разграничение доступа, принимают текстовые значения, говорящие о правах посетителя. Таких значений может быть, как минимум, три:<br> </li> <li> "Administrator" — администратор сайта, полный доступ ко всем данным сайта;<br> </li> <li> "user" - посетитель, доступ к открытым данным сайта, предназначенным для "обычных" посетителей сайта;<br> </li> <li> "Guest" — "гость" сайта, минимальный доступ к данным сайта.<br> </li> Основываясь на этих значениях, поведения Dreamweaver принимают решение, допускать ли посетителя до какой-либо страницы сайта. Конечно, вы можете задать свои значения, но эта троица присутствует практически во всех списках доступа.<br> <br> Чтобы не усложнять чрезмерно наш сайт, давайте ограничимся двумя типами прав посетителей: администратором (значение "Administrator" поля Grants) и обычным посетителем (значение "user"). Администратор будет один и может править любые данные, сохраненные в базе Library.asp, a обычный посетитель сможет только их просматривать.<br> <br> Итак, мы создали новую таблицу. Но подождите ее сохранять. Задайте для поля Grants значение по умолчанию "user", чтобы вновь зарегистрировавшиеся посетители сразу же получили соответствующие права доступа. Вот теперь можете закрывать и сохранять новую таблицу. Назовите ее Users.<br> <br> После этого откройте только что созданную таблицу и введите в нее одну запись. Значения ее полей будут такими:<br> <br> <li> <b> поле </b>Name — "Admin";<br> </li> <li> поле Password — "Admin" (не будем заботиться о секретности пароля — все равно наш сайт учебный);<br> </li> <li> поле Grants — "Administrator".<br> </li> Теперь можно приступать к созданию страницы входа на сайт. Введите в нее поясняющий текст и назовите Login.asp. Причем сохраните ее в корневой папке сайта, а не в папке Admin, — мы используем ее для входа на сайт и администраторов, и обычных посетителей.<br> <br> Теперь нам нужно создать форму с двумя полями ввода — соответственно, для ввода имени и пароля. Ну и, конечно, понадобится кнопка отправки данных. Создайте форму и назовите ее Login. Поля ввода назовите соответственно Name и Password. He забудьте текстовые подписи, иначе посетитель вашего сайта не поймет, что куда нужно вводить. После этого сохраните страницу.<br> <br> Теперь создадим поведение Log in user. Для этого выберите одноименный пункт в подменю <b>User Authentication </b>меню серверных поведений панели <b>Server Behaviors. </b>На экране появится диалоговое окно <b>Log In User</b>.<br> <br> В раскрывающемся списке <b>Get Input From Form </b>выбирается форма, из которой будут взяты введенные посетителем имя и пароль. Поле ввода имени выбирается в раскрывающемся списке <b>Username Field, </b>а поле ввода пароля—в списке <b>Password Field.</b><br> <br> В раскрывающемся списке <b>Validate Using Connection </b>выбирается база данных, зарегистрированная в Dreamweaver. В списке <b>Table </b>выбирается таблица, содержащая список посетителей, в списке <b>Username Column </b>— поле, в котором хранятся имена посетителей, а в списке <b>Password Column </b>— поле, в котором хранятся пароли.<br> <br> Очень часто на главной странице сайта делается гиперссылка на страницу входа (а иногда сама страница входа делается главной). В этом случае посетитель после успешного входа перенаправляется на страницу с "закрытыми" данными. В поле ввода <b>If Login Succeeds, Go To </b>как раз и вводится интернет-адрес страницы, на которую будет осуществлен переход, если посетитель успешно войдет на сайт. Введите в это поле имя страницы списка высказываний Admin/Sentences.asp. Вы также можете нажать кнопку <b>Browse </b>и выбрать нужную страницу в диалоговом окне <b>Select File.</b><br> <br> Иногда система разграничения доступа функционирует следующим образом. При попытке захода на не доступную "посторонним" страницу посетитель автоматически перенаправляется на страницу входа на сайт. После ввода имени и пароля, если этот посетитель занесен в список, он возвращается на страницу, на которую хотел войти изначально. Для такого случая предусмотрен флажок <b>Go To Previous URL (if it exists). </b>Включите его, если хотите, чтобы система разграничения доступа работала таким образом.<br> <br> В поле ввода <b>If Login Fails, Go To </b>вводится интернет-адрес страницы, на которую будет осуществлен переход, если посетителю не удалось войти на сайт. (Такое может быть, например, из-за того, что посетитель не внесен в список или неправильно набрал имя или пароль.) Введите в это поле имя страницы входа Login.asp; таким образом, после неудачного входа посетитель окажется на той же странице. Вы также можете нажать кнопку <b>Browse </b>и выбрать нужную страницу в диалоговом окне <b>Select File.</b><br> <br> С помощью группы переключателей <b>Restrict Access Based On </b>вы можете задать, на основе чего производится разграничение доступа к Web-страницам. Если включен переключатель <b>Username and Password, </b>разграничение доступа производится на основе имени и пароля. Если же вы хотите "вовлечь" в этот процесс еще и права доступа посетителя, включите переключатель <b>Username,</b> <b>Password, and Access Level. </b>В этом случае становится доступным раскрывающийся список <b>Get Level From, </b>в котором вы сможете выбрать поле таблицы, выбранной в списке <b>Table, </b>откуда будут взяты права посетителя. В нашем случае — это поле Grants.<br> <br> Введя все данные, нажмите кнопку <b>ОК.</b><br> <br> Вы, наверно, подумали, что сейчас мы будем проверять вновь созданную страницу в работе. Но делать это пока еще рано. Нам нужно защитить остальные страницы от несанкционированного доступа, т. е. попытки войти на них, миновав страницу входа на сайт. Без этого наши старания по защите сайта от "случайных людей" пойдут насмарку.<br><br> <h1>Страницы общего доступа</h1>Страницы общего доступа<br><br> Страницы общего доступа предназначены для обычных посетителей сайта. Как правило, они создаются после административных страниц; в этом случае вы можете использовать последние как образцы для создания "обычных" страниц. В самом деле, "обычные" страницы часто в общих чертах повторяют административные, и вам остается только удалить некоторые возможности, не нужные обычным посетителям. Так мы и сделаем.<br><br> <h1>Таблица sentences как вы уже заметили</h1>Таблица sentences, как вы уже заметили, девственно-пуста. (Отладочная запись, введенная нами в Access, не считается.) Нужно заполнить ее данными. А для этого нам необходимо создать страницу добавления записи.<br><br> Создайте новую серверную страницу, введите в нее поясняющий текст и сохраните опять же в папке Admin под именем AddSentence.asp. Создайте в этой странице форму и назовите ее sentence. Внутри формы создайте область редактирования и назовите ее content, не забудьте также о кнопке отправки данных.<br> <br> Что-то мы забыли... Ах, да! Нужно еще поместить в форму раскрывающийся список category и привязать его к набору записей categories. Но перед этим необходимо создать сам набор записей Categories, из которого будут взяты пункты списка Category. Задайте выборку всех записей таблицы categories. После этого задайте сортировку записей по полю Name, для чего выберите это поле в раскрывающемся списке <b>Sort </b>диалогового окна <b>Recordset </b>(см. Рисунок 17.15). А раскрывающийся список, расположенный правее, позволит вам задать порядок сортировки записей: по возрастанию (пункт <b>Ascending) </b>или по убыванию (пункт <b>Descending). </b>Задав параметры набора данных, нажмите кнопку <b>ОК.</b><br> <br> Теперь можно создать поведение insert Record. (Как это делается, было описано в главе 17.) Привяжите область редактирования content к полю<br> <br> Content <b>таблицы </b>Sentences,а список<b> </b>Category — к полю Category. В качестве страницы, на которую будет осуществлен переход после добавления записи, задайте Sentences.asp.<br> <br> Сохраните готовую страницу AddSentence.asp. После этого откройте страницу Sentences.asp и поместите в нее гиперссылку, указывающую на страницу AddSentence.asp. Вот и все.<br> <br> Теперь можете проверить созданную нами страницу добавления записи. Опубликуйте сайт на Web-сервере, откройте страницу Sentences.asp в Web-обозревателе и щелкните по гиперссылке "Добавить". Внесите в таблицу sentences несколько записей. Они нам пригодятся для отладки.<br><br> <h1>Защита страниц от несанкционированного доступа</h1>Защита страниц от несанкционированного доступа<br><br> В нашем случае стоит защитить только страницу Sentences.asp, т. к. лишь на ней отображаются какие-то данные. Остальные страницы (AddSentence.asp, EditSentence.asp и DeleteSentence.asp) выполняют вспомогательные функции и без страницы Sentences.asp работать не будут.<br> <br> Итак, откроем страницу Sentences.asp. Чтобы защитить ее от непрошенных посетителей, создадим поведение Restrict Access TO Page. Выберем одноименный пункт в подменю <b>User Authentication </b>меню серверных поведений панели <b>Server Behaviors. </b>На экране появится диалоговое окно <b>Restrict Access То Page.</b><br> <br> С помощью группы переключателей <b>Restrict Based On </b>вы можете задать, на основе чего производится разграничение доступа к данной странице. Если включен переключатель <b>Username and Password, </b>разграничение доступа производится на основе только имени и пароля. Если же вы хотите "вовлечь" в этот процесс еще и права доступа посетителя, включите переключатель <b>Username, Password, and Access Level. </b>В этом случае становится доступным список <b>Select Level(s), </b>в котором вы сможете выбрать права для посетителей, которые смогут увидеть эту страницу.<br> <br> Изначально список <b>Select Level(s) </b>пуст. Поэтому нам придется его заполнить. Щелкните кнопку <b>Define, </b>и на экране появится диалоговое окно <b>Define Access Levels.</b><br> <br> Большую часть этого окна занимает список уже созданных вами прав. Чтобы добавить в него новый пункт, введите его имя в поле ввода <b>Name </b>и нажмите кнопку со знаком "плюс". Чтобы изменить пункт, выберите соответствующее имя в списке, измените его в поле ввода <b>Name </b>и переключитесь на любой другой пункт списка. Если же вам требуется удалить ненужный пункт, выберите соответствующее имя и нажмите кнопку со знаком "минус". К сожалению, эту операцию вам придется выполнять почти всегда: Dreamweaver почему-то часто добавляет в список пустой пункт. Введя все права посетителей, нажмите кнопку <b>ОК.</b><br> <br> Введя в список <b>Select Level(s) </b>права посетителей, вы можете их выбрать, щелкнув мышью по нужному пункту. В нашем случае, выберите пункт <b>Administrator. </b>Если вам необходимо выбрать сразу несколько пунктов, щелкните по первому из них, а потом щелкайте по остальным, удерживая нажатой клавишу <Ctrl>.<br> <br> В поле ввода <b>If Access Denied, Go To </b>вводится интернет-адрес страницы, на которую будет осуществлен переход, если посетителю запрещено входить на эту страницу или если посетитель не выполнил процедуру входа на сайт. Введите в это поле имя страницы входа Login.asp. Вы также можете нажать кнопку <b>Browse </b>и выбрать Нужную страницу в диалоговом окне <b>Select File.</b><br> <br> Введя все данные, нажмите кнопку <b>ОК.</b><br> <br> Вот теперь можете проверить созданную нами систему разграничения доступа. Опубликуйте сайт на Web-сервере и попробуйте открыть страницу Sentences.asp. Если она все же откроется, выполните ее перезагрузку в окне Web-обозревателя. После этого вы уж точно окажетесь на странице входа на сайте Login.asp.<br><br>  <br> <a name="34"><h1>  <img src="/8.gif">  Бизнес в интернете: Сайты - Софт - Языки - Дизайн</h1> <ul> <li><a href="/390-1/index.htm">Киберсантинг</a><br> <li><a href="/391-1/index.htm">Киберсантинг как бизнес</a><br> <li><a href="/392-1/index.htm">Виды Киберсантинга</a><br> <li><a href="/691-1/index.htm">Создание игр</a><br> <li><a href="/393-1/index.htm">Дизайн как бизнес</a><br> <br> <li><a href="/394-1/index.htm">Dreamweaver</a><br> <li><a href="/395-1/index.htm">PHP</a><br> <li><a href="/396-1/index.htm">Homesite</a><br> <li><a href="/397-1/index.htm">Frontpage</a><br> <li><a href="/398-1/index.htm">Studio MX</a><br> <br> <li><a href="/432-1/index.htm">Сайтостроительство</a><br> <li><a href="/433-1/index.htm">Citrix MetaFrame</a><br> <li><a href="/434-1/index.htm">Стили сайта</a><br> <li><a href="/435-1/index.htm">ActiveX на сайте</a><br> <li><a href="/436-1/index.htm">HTML как основа сайта</a><br> <br> <li><a href="/437-1/index.htm">Adobe GoLive</a><br> <li><a href="/438-1/index.htm">Что такое WEB</a><br> <li><a href="/439-1/index.htm">Мобильные WAP сайты</a><br> <li><a href="/440-1/index.htm">3D графика на сайтах</a><br> <li><a href="/442-1/index.htm">3DS MAX графические решения</a><br> <br> <li><a href="/443-1/index.htm">Графика в 3D Studio MAX и на сайте</a><br> </ul> <br> </div></div> </body> </html> <br>