Вебмастер, обновляющий страницы сайта вручную (не
имеет значения каким редактором — ФронтПейджем или Блокнотом),
напоминает Папу Карло, скрючившегося в своей каморке и строгающего
тысячного Буратино. При добавлении нового материала на сайт ему
нужно отформатировать текст в 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 и
т.д. Без проблем решается вопрос альтернативного представления
информации, например, в виде «версий для печати». В базе данных
можно хранить не только текст материалов сайта, но и записи гостевых
книг и форумов, результаты опросов, статистику посещений и т.п.,
легко интегрируя их в информационное наполнение сайта.
В следующей заметке я расскажу о двух совершенно разных
практических реализациях «движков» для веб-сайтов: универсальной и
очень мощной разработке профессиональной дизайн-студии и простом, но
эффективном механизме для небольших контент-проектов.