Что нужно. Организация структуры
При разработке сайта программисту в первую очередь нужно грамотно организовать структуру сайта. Если оснастка сервера позволяет, то количество данных на сайте можно уменьшить. Коротко о трех основных способах разделения рабочей и смысловой частей сайта было рассказано в части книги о проектировании.
Самый простой способ — использование директив включения файла — оказывается на поверку наименее удобным. С помощью SSI-директивы
<!--#іпс1^е virtual="header. shtml" -->
Файл header. shtml действительно будет включен в открытый файл (на Рег1
Что нужно. Организация структуры |
4. |
И ASP это выглядит примерно так же; на PHP — <?=require "header. php"?>,наJSP — <%@ include file="header. jsp" %> или <jsp: include page="/header. jsp" flush="true"/> и т. п.). Это удобно, потому что при изменении включенного файла изменения (для посетителя сайта) произойдут сразу на всех страницах сайта. Но может возникнуть ситуация, когда включаемый файл придется переместить либо (по каким-то причинам) переименовать. В этом случае нужно будет переписать инструкцию включения во всех файлах (а их могут быть сотни) и снова загрузить их на сервер, что не настраивает на оптимизм. Логичнее вообще исключить указание на рабочие моменты из смысловых файлов. Если есть возможность, то собирать страницы из конструктора лучше на стороне. Например, при использовании сервера Apache это можно делать при помощи файла. htaccess. В нем достаточно написать две строчки, чтобы до и после каждого вызываемого файла в страницу включались нужные файлы. Так, чтобы перед смысловым файлом обязательно включался файл header. htm, а после него footer. htm (расширения файлов могут быть любыми, т. к. все внутренние директивы будут обрабатываться только после включения в файл), содержимое файла. htaccess должно быть таким: Php value auto prepend file header. htm Php value auto append file footer. htm Естественно, сами файлы header. htm и footer. htm не обязаны лежать в корневой директории сайта (там обязан лежать только файл. htaccess. Кстати, если в дочернюю директорию положить еще один. htaccess, но с указанием других файлов, то они также будут включаться в смысловые файлы — что не отменяет действия «корневого» .htaccess). В этом случае достигается корректное разделение формы и содержимого. И если особых требований к адресам страниц нет, то этот вариант оптимален. Во-первых, стилевое единообразие сайта достигается тремя файлами, во-вторых, в два файла можно записать все от первого тэга страницы до стандартных элементов оформления (меню, логотип, форма поиска, необходимые сведения, адрес, комментарии, дата обновления сайта, e-mail, авторские права). Недостаток только один: метод недостаточно гибкий. То есть при работе мы жестко привязаны к тому количеству смысловых файлов, которые есть на сервере. И тут на помощь приходит логика обратного включения. То есть включения, при котором не вспомогательные файлы помещаются в смысловые, а наоборот: есть один или несколько рабочих (системных) файлов, в которые передаются данные о том, что именно нужно включить в качестве смысловой части. При этом совершенно неважно, что будет анализироваться в качестве входных данных: записи из базы данных или файлы. Рассмотрим основные возможности такого подхода. |
Несомненно, чаще всего входным параметром для загрузки нужных фрагментов изображения будет являться строка запроса, считываемая через переменную (например, $QUERY_STRING в языке PHP; далее в этой главе будут приводиться примеры из этого языка). Обычно строка запроса оформляется в адресной строке следующим образом: domain. ru/?sometext, или domain. ru/?sometext=17, или domain. ru/index. html? sometext=17. Во всех примерах domain. ru — условное имя домена, на котором расположен сайт, а собственно строка запроса следует сразу после вопросительного знака. Строка запроса может следовать либо после имени файла, либо сразу после имени домена (или имени какой-либо директории), если данные строки запроса передаются в файл, который открывается по умолчанию (а таким чаще всего бывают index. html, index. htm, index. shtml, index. php, index. asp, но могут быть и любые другие). Однако с помощью нехитрых серверных преобразований можно добиться того, чтобы строка запроса выглядела как обычный путь к файлам и директориям, например, так: domain. ru/sometext/17/ (если следовать логике приведенных примеров). В частности, в оснастку сервера Apache обычно включается модуль mod_rewrite для преобразования адресов (он использует технологию регулярных выражений). Добавив в файл. htaccess в корневой директории следующие строки:
TOC o "1-5" h z RewriteEngine on
RewriteBase /
RewriteRule Л(.*[Л/])$ $1/
RewriteRule (A$|A[-/ a-zA-Z0-9]*/$) index. php? query=$1 [QSA]
Мы получаем такой результат: все, что следует после имени домена, записывается в переменную $query (так как именно ее имя указано в адресной строке) и передается сценарию, содержащемуся в файле index. php (разумеется, и имя переменной, и имя файла со сценарием можно изменить). А уже сценарий берет полученную переменную $query, которая в нашем примере равна строке sometext/17/, анализирует ее (разбивает на составляющие, выполняет дальнейшие преобразования) и на основе этого загружает нужный фрагмент данных. (Важно, чтобы значение переменной не могло включать в себя префикс протокола, иначе говоря, чтобы в корневой сценарий нельзя было включить файл с другого сервера: это чревато тем, что злоумышленник может в качестве включаемого файла указать в адресной строке файл со своего сервера с именем этого сервера, а уже с помощью этого файла произвольно редактировать взламываемый сайт.)
Если же нужно, чтобы часть адресов не преобразовывалась в подобный вид (например, адреса изображений, хранящихся в директории
Что нужно. Организация структуры |
|
/images, и адреса архивов, хранящихся в директории /arch), то запись в файле. htaccess будет слегка модифицирована: RewriteEngine on RewriteBase / RewriteCond %{REQUEST URI} !A/images.* RewriteCond %{REQUEST URI} !A/arch.* RewriteRule Л(.*[Л/])$ $1/ RewriteCond %{REQUEST URI} !A/images.* RewriteCond %{REQUEST URI} !A/arch.* RewriteRule (A$|A[-/ a-zA-Z0-9]*/$) index. php? query=$1 [QSA] В этом случае изображение, на которое будет стоять ссылка Http://Domain.Ru/Images/Logotype.Jpg, будет доступно по этому (фактическому адресу); если же адрес будет звучать как Http://Domain.Ru/Abc/Images/Logotype.Jpg, то сервер обратится к файлу Http://Domain.Ru/Index.Php и передаст ему в переменной Squery строку abc/images/logotype. jpg/ (я еще не придумал, для каких целей это можно использовать, но что можно, знаю точно). Почему при обычной древовидной структуре нужно искать «дополнительные сложности»? Во-первых, потому что легкие пути нам не нужны, а во-вторых — потому что в этом случае приобретается особая гибкость в работе с файлами и базами данных. Если говорить о файлах, то возможен такой подход: все файлы и вложенные директории (допустим, кроме изображений и архивов) собираются для удобства в отдельной директории (к примеру, /files), и тогда сценарию только остается включить файл, находящийся по адресу: /files/sometext/17/ (прибавить расширение файлу, убрать при необходимости завершающий слэш и проверить наличие этого файла вы сможете сами). Наконец, теперь при адресе domain. ru/webdesign/links/2006/ (допустим, по этому адресу будут расположены ссылки на лучшие веб-дизайнерские работы за 2006 год) серверу не обязательно искать нужный файл по адресу /files/webdesign/links/2006/ — дело в том, что при помощи анализирующего сценария можно проверять, нет ли в переменной $query заранее определенных слов, и при их наличии давать значения еще некоторым переменным. К примеру, сценарий проверяет, нет ли в переменной $query подстроки webdesign/links/число, и если такая подстрока находится, то управление передается сценарию по адресу /files/webdesign/links. php, которому в качестве значения переменной $year («год») передается значение «2006». А уже этот сценарий выбирает из базы данных либо из файлов информацию о ссылках за 2006 год. Преимущество — в динамическом формировании страницы, в сокращении количества физически существующих файлов, в легкости преоб- |
Разования и внесения изменений в большое количество страниц. Есть и еще мелкие удобства. Например, ваше портфолио по логике сайта располагается по адресу domain. ru/webdesign/personal/portfolio, но вам хочется, чтобы клиентам было удобнее запоминать этот адрес (пусть они находят его по адресу domain. ru/portfolio). Физически повторять или перемещать все файлы неудобно, да и перекрестное обращение к данным может быть нарушено. В этом случае стоит сделать такую операцию: с помощью небольшого кода делать проверку переменной, отвечающей за адрес запрашиваемого файла (в нашем примере $query), и если он совпадает со строкой «portfolio», то этой переменной присваивается новое значение («webdesign/personal/portfolio»):
<?php
If(@$query == "portfolio") {
$query = "webdesign/personal/portfolio";
}
?>
И посетитель, набрав адрес domain. ru/portfolio, на самом деле открывает адрес domain. ru/webdesign/personal/portfolio, даже не подозревая об этом. Таких преобразований можно сделать несколько для разных популярных страниц. При этом по прежним, полным адресам страницы тоже будут доступны (если вы не захотите это запретить, например, так:
<?php
If(@$query == "webdesign/personal/portfolio") {
$query = "error4 04";
}
?>).
При условии же работы не с файлами, а с базой данных строка запроса, выглядящая как путь к файлу в древовидной структуре директорий и файлов на сайте, передается сценарию. Сценарий выполняет запрос к базе данных, используя полученные данные (которые могут трактоваться как названия нужных полей и их значения), и выводит нужную информацию. Реинтерпретируем приведенный пример. Сервер получает адрес domain. ru/webdesign/links/2006/, с помощью файла. htaccess присваивает переменной $query значение webdesign/links/2006/, с помощью файла index. php убирает лишний слэш на конце, открывает таблицу «webdesign» в базе данных и, выбирая те строки, у которых значение поля «links» равно «2006», выдает их сценарию по адресу /files/webdesign. php, который, если переменная $links не пуста, или, говоря человеческим языком, if(@$links!=false) , сортирует полу-
Что нужно. Организация структуры |
|
Ченные значения и выводит список ссылок с аннотациями и иллюстрациями (все, что получено из БД) в браузер. И это лишь один из примерных сценариев развития событий. Рассмотрим пару возможностей организации данных на сайте. (В скобках отмечу, что организация данных на сайте — процесс очень творческий. Если сайт не сделан раз и навсегда для вечного и неизменного использования, то рано или поздно часть данных нужно будет удалить, часть — переместить, немного добавить, часть переименовать. В этом случае разработчик просто вынужден делать структуру сайта динамической. А уже как это реализовать — зависит от вкуса, опыта, желания, добросовестности и наличия фантазии. И самое главное — от поставленных задач.) Итак, возможность первая — использование БД, непосвященными называемой базой данных. При упоминании этой возможности в голову приходит как минимум три способа реализации: максимально абстрактная единственная таблица в БД; максимально конкретные различные таблицы в одной БД; текстовые БД. Кардинальное различие между первым и вторым подходом в том, что в первом случае одни и те же поля могут в разных случая соответствовать разной семантике, а в случае с несколькими таблицами в каждой таблице поля строго семантически ориентированы. Второй подход по смыслу похож на третий, где вместо БД используются текстовые файлы, где набор значений или строк разделяется текстовыми разделителями вроде |. Базы данных очевидно удобнее использовать тогда, когда количество страниц и разделов постоянно увеличивается (например, это интернет-аналог газеты), но при этом структура уже сформирована, и добавление страницы сводится к добавлению записи в БД и отнесению ее к определенному классу (рубрика, раздел и т. п.). Текстовые файлы удобнее использовать при небольших массивах разнородной информации: в серверных языках программирования достаточно средств, чтобы работать с текстовыми файлами как с базами данных. При помощи БД с единственной таблицей достаточно просто сделать абстрактную модель, из которой данные будут выбираться сценарием в зависимости от меток. «Горизонтально» таблица делится на несколько полей, из которых часть несет конкретную семантику (идентификационный номер записи, от которого никуда не денешься; заголовок записи или материала — для <Ы> и <^^е>; сам материал; дата добавления записи; другие необходимые поля, например, автор записи или ключевые слова; здесь же можно сделать поле, которое будет отвечать за англоязычное название страницы, запрашиваемой пользователем, хотя это необязательно), а часть — абстрактную. Учитывая, что глубина вложенности директорий (разделов) на сайтах редко составляет число, большее пяти, создаем пять абстрактных полей от «аЬБ^1» до «аЬБ^5». В первое поле для каждого материала вносит- |
Ся запись о разделе, в который будет отнесен этот материал (например, «webdesign»). Во второе — подраздел (при необходимости), например, «links» или «portfolio». В остальные поля — подразделы большей глубины вложенности, они будут использоваться намного реже. Соотнесение названий разделов, которые будут имитировать названия директорий, с русскими названиями разделов можно легко сделать при помощи текстового файла размером в 1 или 2 Кб. И простенький запрос:
SELECT * FROM имя_таблицы WHERE abstr1='websesign' AND abstr2=,links' AND abstr3='2006' ORDER BY header
Предоставляет нам доступ ко всем материалам по теме, которые мы уже можем оформить согласно собственным предпочтениям.
Представим также, что разделы (указанные в abstrl) оформляются по-разному. Это значит, что параллельно нам нужно запускать сценарий, который выбирает шаблон оформления в зависимости от названия раздела и вставляет туда данные из базы. Технические подробности уже не слишком важны.
Второй путь — несколько таблиц — более удобен, если не хочется смешивать данные в кучу и если у разных разделов очень сильно различается тот набор параметров, которые логично разносить в разные поля таблиц в базе данных. К примеру, в разделе «Иллюстрации» будет фиксированный вид адреса: /illustrations/name/, где name — название файла иллюстрации без указания формата файла. В простом случае тут можно обойтись вообще без базы данных; если же на страницу, кроме иллюстрации, должна выводиться еще и справочная информация, то названия файлов соотносятся с полями имени автора и комментария к иллюстрации. В разделе же «Сайты» полей в таблице БД может быть несколько больше: название работы, ее адрес, ссылка на архивное изображение сайта (на тот случай, если сайт перестанет поддерживаться), даты начала и окончания работ, имя руководителя, дизайнера, кодера, программиста, менеджера, использованные технологии, шрифты и т. п.
Наконец, третий путь — текстовые БД — пригоден в двух случаях: если хостер не предоставляет доступ к базе данных (по причине дешевизны или недобросовестности) или если БД должна содержать настолько малое количество информации, что заводить полноценную базу просто нерентабельно. К примеру, небольшая коллекция ссылок может быть представлена в таком виде в файле links. txt.
Www. yandex. ru | Яндекс | Отечественная поисковая система
Www. google. com | Google | Крупнейшая поисковая система
Что нужно. Организация структуры |
|
Www. altavista. ru | AltaVista | Моя первая поисковая система C помощью нехитрого сценария разбиваем файл на строки; игнорируем пустые строки; каждую непустую строку заносим в массив; каждый элемент массива преобразуем во вложенный массив с тремя элементами (адрес, название сайта, комментарий). Затем на выводе с помощью циклов форматируем массивы в пригодном для нас виде: <? $allfile = File("links. txt"); Foreach($allfile as $value) { If($value!=false) { List($lnk, $nm, $dscr) = explode("|", $value); // Удаление из адреса фрагмента http://, который и так будет подставлен сценарием $lnk = str replace("http://", "", $lnk); $lnk = str replace("HTTP://", "", $lnk); // При отсутствии названия в его роли будет адрес сайта $nm = ($nm=="") ? $lnk : $nm; Echo '<p><a href="http://'.$lnk.'" target=" blank"><b>'.$nm.'</b></a>'; echo '<br />'.$lnk; Echo '<br />'.nl2br($dscr).'</p>'; } } ?> Разумеется, этот сценарий можно поместить в том файле, который будет обрабатывать все файлы; тогда логичнее заключить его в функцию с именем файла текстовой БД в качестве входного параметра. Более того, сценарий можно модифицировать и убрать привязку к конкретному количеству параметров. Безусловно, наибольшую логику в применении баз данных можно найти в создании электронных магазинов, каталогов и прочих сайтов, где в единообразном виде выводится большое количество однотипных данных, где требуется разнообразная сортировка по различным признакам, где понятия «запрос» и «отчет» не теряют своего первоначального смысла. В прочих случаях можно рекомендовать использовать построение сайта на файлах либо «смешанную технику», когда БД и тексто- |
Вые файлы делят между собой работу на сайте, сообразуясь со здравым смыслом, а не с традициями и привычками.
Базы данных, как и языки серверного программирования, — общее понятие, а ведь каждая из БД имеет особенности в работе. Например, MySQL достаточна быстра, ее поддержка есть практически на любом хостинге, где есть поддержка PHP. База данных SQLite является файловой; она более быстра в чтении, но более медленна в записи из-за режимов блокировки. Поддерживается PHP 5 либо (при наличии определенного модуля) PHP 4. Достаточно популярной и мощной является PostgreSQL (с максимальным объемом таблицы в 32 терабайта и максимальной длиной записи в 400 гигабайтов), используются также Oracle (поддерживает все типы данных, включая аудио, видео, XML, электронную почту и прочие типы), MSSQL от Microsoft, Firebird (на основе InterBase) с двумя режимами — файловым и серверным.
Веб-архитектуры, основанные на файлах, дают возможность более гибкой работы в том смысле, что каждая страница может быть сама себе шаблоном. Возможно, принцип разделения формы и содержания проводится не столь последовательно, но эта уступка идеологии дает возможность не ограничивать себя заданными структурами. Файлы представляют собой одновременно и хранилища сценариев, и строительный материал для дизайна, и массивы данных. Кстати, массивы однотипных данных можно хранить не только в базах данных, но и в обычных текстовых файлах (см. выше пример с текстовой БД ссылок на поисковые системы), и в формате XML (полном или упрощенном — вида
<links>
<item>
<link>www. yandex. ru</link>
<пате>Яндекс</пате>
<description>Российская поисковая система </description>
</item>
<item>
<link>www. google. com</link>
<name>Google</name>
<description>Крупнейшая поисковая система </description>
</item>
</links>).
Продолжая мысль о том, что количество страниц, видимых пользователю, далеко не всегда равно количеству реально существующих файлов, приведем один пример. Допустим, нам нужно организовать галерею рисунков одного автора на сайте. На каждой странице будет ил-
Что нужно. Организация структуры |
|
Люстрация и ссылки на страницы со следующей и предыдущей иллюстрациями. На некоторых страницах под иллюстрациями должны быть комментарии, но не на всех. Поступаем творчески: 1. Собираем все иллюстрации в одну директорию. 2. Пишем файл, содержащий только ассоциативный массив, где ключами являются названия файлов иллюстраций, к которым есть комментарии (тексты комментариев — значения элементов массива). 3. Пишем сценарий, который, во-первых, «читает» директорию, содержащую изображения, записывает их имена в массив, выстраивает в порядке хронологии добавления файлов в директорию (для построения навигации: ссылок на предыдущее и следующее изображения), а во-вторых, принимает входной параметр из адресной строки, и если в строке запроса находится подстрока, совпадающая с именем файла какого-либо из существующих в этой папке изображений, то данное изображение выводится в браузер (перед этим с помощью сценария высчитываются его ширина и высота). Если та же подстрока является ключом какого-либо из элементов массива в файле с комментариями, то значение данного элемента выводится как комментарий к иллюстрации. Файл сценария занимает чуть больше одного килобайта (примерно как этот абзац). Возможен вариант: чтобы ускорить работу сценария, который, в общем-то, даже при сотне-другой файлов изображений работает очень быстро, список файлов можно поместить в отдельный файл, обновляющийся вручную или сценарием, допустим, раз в сутки или при добавлении новой иллюстрации. В итоге получается, что вместо 150 картинок со 150 файлами «альбома» мы имеем 150 картинок с двумя-тремя файлами «альбома». Для чего здесь понадобилась бы база данных, сложно представить. Рационализаторская мысль торжествует. В принципе, можно организовать структуру сайта так, что все данные будут в одном файле, при этом страниц на нем будет не меньше трех десятков. Другой вопрос — нужно ли это, удобно ли и стоит ли игра свеч? Гораздо чаще удобно бывает сделать так, чтобы одна страница собиралась из трех-четырех файлов (хотя при этом число файлов на сервере все же меньше, чем кажется пользователю): ядерный сценарий, включаемый файл с основным содержанием страницы, файл с шаблоном оформления раздела, стилевой файл. Одной только структурой сайта программирование не ограничивается. Следующий уровень — написание локальной поисковой системы. Даже если сделать структуру сайта очень логичной, все равно найдутся люди с логикой, отличной от вашей. Либо некоторые разделы |
4 |
Программирование |
По каким-то соображениям захочется запрятать поглубже и не выносить на главную страницу. Либо посетителю потребуется поискать на вашем сайте нечто, что он забыл, как называется, но на букву «щ». В любом случае, поиск по сайту — очень нужная вещь. При разработке поисковой системы по сайту используется два подхода: поиск по заранее созданной и регулярно обновляемой базе данных и поиск «на лету». Смысл первого подхода в том, что сценарий периодически обходит все страницы сайта и собирает информацию о них: адрес страницы, заголовок, ключевые слова (если указаны), статистически самые частотные слова (кроме служебных), даты создания и последнего обновления, размера и т. п. Иногда вместо ключевых слов в базу заносится целый текст страницы (нередко — предварительно обработанный, т. е. без служебных слов, без мультимедийной информации, без тэгов). В процессе сбора информация заносится в таблицу базы данных или в текстовые файлы, по которым и производится поиск. Плюс такого подхода — в большой скорости поиска, а также в том, что поисковую базу можно использовать не только для собственно поиска, но и для разнообразного учета, для предоставления информации о страницах и проч. Минус — в недостаточной своевременности обновления поисковой базы: обычно переиндексация производится, допустим, раз в сутки, и только что опубликованную информацию подчас невозможно найти через поисковую систему (с другой стороны, система управления сайтом в состоянии вызывать переиндекса - цию при любом изменении на сайте, но если такие изменения происходят достаточно часто, то это не очень удобно). Далее, если в базе хранятся не копии страниц, а ключевые слова, то я не смогу найти какой-то текст, в котором я помню случайную фразу из середины. Поиск «на лету» перебирает страницы в режиме реального времени и, расценивая каждую страницу как строку, ищет в ней подстроку совпадения с поисковым запросом и в случае нахождения таковой выдает результат. При добавлении свежей информации на сайте она становится доступной поисковой системе мгновенно (и доступна по любому слову, содержащемуся в тексте). Однако поиск, особенно при нескольких тысячах страниц на сайте, производится медленнее, чем при поиске по базе. В любом случае типичные требования к поисковой системе таковы: учет морфологии (если человек ввел слово «девушка», то ему нужно найти и «девушек»), ранжирование результатов (ближе к началу должны располагаться результаты, наиболее точно отвечающие запросу либо наиболее свежие), возможность настраивать систему поиска, указание контекста встретившихся искомых слова или фразы и наличие дополнительной информации о странице. С разработкой структуры сайта и поисковой системы тесно связана разработка системы управления содержанием сайта (CMS, от Content |
|
268 |
Что нужно. Организация структуры |
|
Management System). Каждая такая система ориентирована на определенную веб-архитектуру. Достаточно сложно создать CMS, с помощью которой можно было бы редактировать сайты, разработанные заранее по специфической схеме (особенно на основе смешанной техники БД с файлами). Системы управления сайтом бывают двух типов: встроенные (работают как раздел сайта) и программные. Программные CMS — это целые пакеты приложений, которые необходимо устанавливать на компьютер. Если работа по обновлению и поддержке сайта ведется централизованно, например, с одного рабочего места, это удобно и достаточно безопасно. С другой стороны, оперативно внести изменения на сайт, если до офиса еще далеко, невозможно. В этом плюс встроенных CMS: на любом компьютере с доступом в интернет можно открыть раздел администрирования, ввести пароль и тут же обновить сайт. С другой стороны, встроенная система управления — потенциальная «дыра» в безопасности сайта. Ссылок на страницу администрирования делать не нужно ни на какой-либо другой странице; следует исключить этот раздел из области индексации поисковой системы; назвать раздел стоит не логичным именем (вроде /admin, /adminka, /cms, /edit, /red и т. п.), а таким, чтобы его было трудно подобрать логически (/coffecup, /arsenal, /deepforest, /717296_r и все буйство вашей фантазии). Основные требования, предъявляемые к CMS разного типа, таковы: возможность создания, изменения (редактирования), переименования, перемещения и удаления разделов и отдельных страниц в них; возможность подключения и отключения модулей (новостной блок, средство отправки почты без почтового сервера, поиск по сайту, фотогалереи, системы голосования, книга отзывов, форум, чат, блог, электронный магазин, каталог ссылок и другие); доступ к статистике; файл- менеджер (особенно полезно для загрузки пользовательских файлов); средства форматирования текстов; выбор шаблонов оформления страниц; система помощи в работе с CMS. Из дополнительных возможностей стоит отметить поддержку версий страниц, возможность неполного удаления (временного скрытия) страниц и создания черновиков страниц; разделы для внутреннего пользования (календарь событий, записной файл); визуальное редактирование и т. п. Написание удобной CMS, пригодной для использования в походных условиях, не требующей изучения как самостоятельной программы, корректно обрабатывающей ошибки пользователя, — дело сложное, но увлекательное. Полноценную систему обновления содержимым можно уместить в файл размером от 20 до 50 Кб. С другой стороны, существует большое количество готовых систем управления сайтом. Ими можно воспользоваться, если бюджет проекта или время исполнения не предполагают создание собственной системы управления сайтом либо (при некоммерческих проектах) если |
4 |
Программирование |
Требования к сайту не превышают стандартных. Условно их можно разделить на три группы по степени доступности использования (что не отменяет разделения на встроенные и программные). Первая группа — это «фирменные» CMS, которые поставляются организацией (или веб-мастером) вместе с готовым сайтом для управления им. Такие системы управления разрабатываются самой студией и, как следствие, максимально совместимы с теми сайтами, которые производит студия. Например, Студия Лебедева (Www.Artlebedev.Ru) поставляет со своими сайтами систему «Imprimatur II», студия «Defa» (Www.Defa.Ru) — систему управления контентом «DeFormer», студия «Кубик» (Www.Kubic.Ru) — CMS «Медиабокс», студия «Атилект» (Www.Atilekt.Ru) — систему «Back Office Atilekt» («boAtilekt»), а автор этой книги (Www.Erlang.Com.Ru) разработал для создаваемых им сайтов систему управления «Umaster». Такие CMS не распространяются бесплатно и даже не продаются. Вторая группа систем управления содержимым разрабатывается как раз на продажу. Это либо самостоятельные программы, либо (чаще всего) набор сложных сценариев, которые необходимо загрузить на сервер, запустить инсталляцию (установку как программы) и настраивать по своему вкусу. После этого с помощью заданного набора шаблонов страниц, а также формируя собственные шаблоны оформления, можно создавать веб-страницы, редактировать их, публиковать на сервере и совершать другие обыденные действия. В качестве примеров таких CMS можно назвать системы «InDynamic», «a-cms. net», «Amiro. CMS», «UMI CMS», «HostCMS Infinity», «ABO. CMS», «Битрикс» и множество других. Некоторые из разработчиков предоставляют бесплатные версии своих систем с очень ограниченной функциональностью (например, объем сайта ограничен десятью страницами). Стоимость коммерческих систем управления сайтами в среднем колеблется в пределах от 1OOO рублей до 1OOO евро. Третья группа — бесплатные или условно-бесплатные (бесплатно предоставляется ограниченная функциональность, за плату — техническая поддержка и неограниченные возможности использования) системы. Установочные файлы систем такого рода можно загрузить с сайтов разработчиков (и не только разработчиков) или купить на диске, содержащем свободно распространяемые программы (в этом случае в цену входит только стоимость диска и записи на диск), и пользоваться без существенных ограничений. Одним из давних лидеров является система «Drupal», поддерживаемая разработчиками со всего мира. Постоянно выходят не только новые версии этой системы, но и новые модули, позволяющие расширять систему практически до бесконечности. «Drupal» является встроенной системой, написанной на языке PHP, работает на сервере Apache или функционально сходном и в качестве хранилища информации использует базу данных (MySQL, PostgreSQL |
|
27O |
Что нужно. Организация структуры |
|
И некоторые другие), таким образом представляя собой почти универсальное решение, так как большинство хостинг-провайдеров предоставляют для размещения сайтов на виртуальном хостинге именно эти возможности. Как гласит описание системы на русскоязычном сайте, «Drupal является свободным программным обеспечением, распространяемым под лицензией GNU GPL. Это означает, что используя Drupal вы получаете полные исходные тексты на которых он построен и можете вносить в них собственные изменения. Вы можете беспрепятственно использовать Drupal в коммерческих проектах, соблюдая условия лицензии GNU GPL, которой защищены исходные тексты Drupal» (пунктуация сохранена). Среди популярных систем управления стоит также отметить «eZ publish» (поддержка нескольких сайтов из одной системы управления, система триггеров — установка действий на событие или дату; 9 Мб), «Joomla» и «Mambo» (первый проект в свое время отделился от второго; большое количество дополнительных модулей, удобный веб-интерфейс; 2 Мб), «PHP Nuke» (целое семейство систем с разным функционалом, огрехи в безопасности; 6 Мб), «WebGUI» (на языке Perl, принцип «все в одном»; 3,5 Мб), «Typo3» (на этой системе, к примеру, работают сайты компаний «Epson» и «Philips»; 7 Мб), «Xoops» (расширяемая система с поддержкой различных языков; 1,1 Мб), «Xaraya» (для сайтов средних размеров на основе XML; 3,8 Мб), «Twilight CMS» (полнофункциональная программная система; 7,5 Мб). Часть систем управления рассчитана исключительно на создание блогов: «WordPress» (один из самых компактных при достаточной функциональности; 0,5 Мб), «MovableType» (на языке Perl; 1,9 Мб), «b2evolution» (поддержка нескольких блогов; 2 Мб), «Textpattern» (возможность подключения модулей; 300 Кб). В случае с блогами это не только CMS, но и веб-архитектуры, то есть так называемые «движки», правда, не универсальные. В зависимости от версий CMS размеры установочных файлов, естественно, варьируются; в скобках указаны размеры установочных файлов наиболее популярных версий систем на момент подготовки книги. Наконец, особую подгруппу составляют так называемые Wiki-системы со специфическим синтаксисом оформления материалов, с многопользовательским (и иногда даже свободным) доступом к редактированию сайта, с поддержкой версионности страниц. Даже если вы не будете использовать эти системы управления, то нелишним будет ознакомиться с ними на предмет сравнения организации и защиты данных, возможностей и построения интерфейсов. Предоставив посетителям море ценной информации, неплохо бы отследить, как они ее оценивают. Статистика на сайте — вещь не первостепенной важности, но полезная. Общее количество посещений говорит о популярности ресурса. Количество уникальных посетителей (оно всегда меньше общего количества посещенных страниц) нужно для того, чтобы выяснить, сколько |
4 |
Программирование |
Страниц на сайте в среднем посещает 1 человек за время визита. Желательно установить такую статистику не только для целого сайта, но и для всех (либо для самых важных) его страниц. В этом случае удастся, например, отследить некоторые стратегически важные моменты: вы возлагали большие надежды на посещение какого-либо раздела, а оказывается, что он совсем непопулярен. В этом случае, возможно, стоит сделать более заметной ссылку на этот раздел на главной странице. Идеальная статистика учитывает: количество посетителей сайта вообще, а также в среднем (и максимум с минимумом) в минуту, в час, в день, в неделю, в месяц и в год, составляет графики изменения динамики посещений, считает, сколько посещает страниц пользователь в среднем, максимум и минимум за один сеанс (за одно посещение сайта в целом), на какой странице сколько времени проводит, сколько щелчков мышкой производит и сколько водит по странице мышью, чем смотрит сайт (браузер, язык программного обеспечения, ОС, какое разрешение экрана, используется ли javasсriрt), фиксирует, в какой день и во сколько точно произошло, допустим, тысячное или миллионное посещение и т. п. Можно учитывать также регион, откуда сам пользователь будет, а также сайт, с которого он перешел на данный. И куда он уходит. И числовую статистику: сколько пользователей пришло с поисковиков, сколько по ссылкам с других сайтов, а сколько людей просто набирали «www...» в адресной строке. И представить все это не только в абсолютных величинах, но и в процентных. Безусловно, для такой подробной статистики требуется использование базы данных, тогда как для простой статистики (количество посещений) достаточно одного или двух текстовых файлов. Статистика на сайте — это, как правило, сбор информации без ведома самих посетителей (он зашел, а сайт его посчитал, да еще отследил его перемещения по сайту). Но подобный сбор доступен и при участии посетителей: это различного рода голосования, когда посетитель читает вопрос, отмечает один из вариантов и нажимает кнопку «Проголосовать». Как правило, такой метод сбора информации дает менее объективные результаты («Интернетом пользуются сто процентов населения России. Таковы результаты опроса, проведенного в интернете»), поскольку не каждый посетитель заметит форму для голосования, а если и заметит, то не всегда пожелает затратить усилия на нажатие кнопки, которые прямо сейчас ему ничего не дадут. Поэтому нужно продумать, что сделать, чтобы кнопка была нажата хотя бы несколькими процентами посетителей: что-то пообещать полезное (и не обмануть ожиданий), сделать так, чтобы страница не перезагружалась при голосовании (посетитель не любит просто так расходовать трафик), оформить опрос необычно. Наконец, программисту очень важно решить вопрос безопасности работы сайта. |
|
272 |