Вебмастер, обновляющий страницы сайта вручную (не имеет значения каким
редактором — ФронтПейджем или Блокнотом), напоминает Папу Карло,
скрючившегося в своей каморке и строгающего тысячного Буратино. При
добавлении нового материала на сайт ему нужно отформатировать текст в
HTML, открыть файл с оглавлением раздела, найти нужный кусок кода,
отредактировать его; открыть файл страницы «Новости», найти нужный
кусок кода, отредактировать его; открыть файл главной страницы, найти
нужный кусок кода, отредактировать его… И все это — только при самой
простой структуре сайта. В сложном проекте публикация нового материала
может потребовать гораздо более сложных манипуляций.
Потребность изменить структуру сайта ставит под угрозу само его
существование. При более-менее сложном проекте бывает легче полностью
переделать сайт заново, чем долго и занудно копаться в его
«внутренностях». Рано или поздно
такая ситуация надоедает. Хочется, чтобы обновление сайта было простой
операцией, а не напоминало по своим масштабам запуск «шаттла». Хочется,
чтобы при изменении структуры сайта все его страницы автоматически
менялись точно так же, как обновляются формулы в Exсel'е у тети Зины из
бухгалтерии, когда она меняет курс доллара в одной ячейке. В конце
концов, хочется вообще забыть про веб-редакторы и публиковать на сайте
обычный текст, не заботясь о том, каким образом он превратится в HTML.
Единственный эффективный путь решения проблемы — применение «движка»,
обеспечивающего легкое и непринужденное обновление сайта.
Основной принцип работы такого программного механизма — это, во-первых,
разделение структуры сайта, его контента (содержания) и оформления, а
во-вторых, организация взаимосвязи между ними. В этом случае легко
добиться того, чтобы при изменении какого-то элемента сайта все
остальные элементы также менялись. Если же дизайн сайта и его
содержание свалены в кучу (а так и бывает, если страницы создаются
вручную в веб-редакторе), а структура вообще не зафиксирована где-либо
(то есть просто на диске веб-сервера вебмастером созданы
соответствующие каталоги и в них записаны файлы), то создать надежно
работающий программный «движок», который мог бы четко «понять», как
именно нужно переделать сайт в связи с изменением одного из элементов,
попросту невозможно. Кто-то из
читателей, возможно скажет: «Так ведь можно сделать так: «шапка» и
«подвал» страниц хранятся в отдельных файлах и просто вставляются в
страницы с помощью SSI-инструкций. Таким образом, получается, что
дизайн и содержание отделены друг от друга без всяких движков!»
Все не так просто. Во-первых, полного разделения дизайна и контента в
данном случае не происходит: текст материалов все равно форматируется с
помощью HTML. Можно, конечно, форматировать текст с помощью
SSI-инструкций, но тогда писать текст будет слишком утомительно
(помните, запуск «шаттла»?). Во-вторых, не происходит фиксации
структуры сайта: файлы веб-страниц по-прежнему лежат в созданных для
них каталогах, и для добавления нового материала нужно создать новый
файл, прописать в него SSI-инструкции, а затем править файлы index.html
для разделов сайта и главной страницы — в общем, все те же игры в Папу
Карло. Итак, если попытаться построить обобщенный «портрет» «движка» для веб-сайта, то получится такая картина.
Структура сайта (список разделов и список содержащихся в них
материалов), шаблоны дизайна и текст материалов сайта содержатся в базе
данных, размещенной на веб-сервере. Файлы изображений и другие двоичные
файлы могут также храниться в базе данных, а могут размещаться просто в
отдельных каталогах на диске сервера.
Для изменения структуры сайта и его содержания обычно предусматривается
специальный веб-интерфейс. С помощью него, например, можно добавлять
новые разделы и изменять или удалять уже существующие. Для добавления
нового материала нужно ввести в поля формы его название, выбрать раздел
сайта, к которому он будет относиться, и сделать copy+paste текста
нового материала в форму. Веб-интерфейсы некоторых «движков» позволяют,
помимо ввода текста, просто загрузить соответствующий текстовый файл на
сервер и затем уже сами извлекают из него всю нужную информацию.
После того, как в базе данных произведены изменения (например,
отредактирована структура сайта или добавлен новый материал), вебмастер
нажимает соответствующую кнопку, запускающую программу (скрипт)
обновления, перегенерирующую страницы сайта. Как вариант, программа
обновления может запускаться веб-сервером автоматически, через
определенные промежутки времени. Это может быть полезно, если
содержание сайта обновляется постоянно, и не только веб-мастером
проекта, но и посетителями (например, всевозможные каталоги — ссылок,
программ, вакансий, объявлений и т.п.).
Скрипт обновления читает информацию из базы данных, анализирует
структуру сайта, создает на диске сервера каталоги (если они не были
созданы ранее) для разделов и генерирует в них страницы, собранные из
текста материалов и шаблонов дизайна, хранящихся в базе данных. В
некоторых «движках» скрипт не создает файлы на диске, а генерирует
страницы «на лету» по запросам посетителей: в этих случаях URL'ы
страниц выглядят не как www.site.ru/razdel/material.html, а примерно
как www.site.ru/index.php3?section=razdel&page=material. Не слишком
«красиво», но это уж как решат разработчики и их заказчики.
Хранение структуры, шаблонов дизайна и текстов в базе данных позволяет
легко оснастить сайт функцией поиска, картой разделов (так называемая
«карта сайта»), а также, например, дает возможность нагенерировать
сколько угодно версий сайта: различного оформления — текстовую, для
тех, кто смотрит сайт на экране сотового телефона, стандартную,
flash-версию; различной ширины — стопроцентной, фиксированной;
оптимизированные под разные браузеры — последнюю бета-версию Microsoft
Internet Explorer, Netscape Navigator 1.0 и т.д. Без проблем решается
вопрос альтернативного представления информации, например, в виде
«версий для печати». В базе данных можно хранить не только текст
материалов сайта, но и записи гостевых книг и форумов, результаты
опросов, статистику посещений и т.п., легко интегрируя их в
информационное наполнение сайта.
В следующей заметке я расскажу о двух совершенно разных практических
реализациях «движков» для веб-сайтов: универсальной и очень мощной
разработке профессиональной дизайн-студии и простом, но эффективном
механизме для небольших контент-проектов. |