Как работает Drupal
С концептуальной точки зрения стек Drupal выглядит, как показано на рис. 1.5. Drupal – это своего рода промежуточный уровень между внутренней реализацией (обеспечивающей работу Интернета) и интерфейсом (который видят посетители в окне веб-броузера).
На нижних уровнях находятся операционная система, веб-сервер, база данных и PHP. Операционная система обеспечивает работоспособность веб-сайта: здесь решаются такие низкоуровневые задачи, как обработка сетевых подключений, файлов и разграничение прав доступа к файлам. Веб-сервер обеспечивает доступность вашего компьютера в Интернете и служит для предоставления требуемой информации, когда посетитель выполняет переход по адресу http://www.example.com. База данных хранит данные: все содержимое веб-сайта, учетные записи пользователей и параметры настройки – в одном месте. А PHP – это язык программирования, который динамически генерирует страницы и перемещает информацию от базы данных к веб-серверу.
Сама система Drupal также состоит из множества слоев. На самом нижнем уровне она реализует дополнительные возможности поверх PHP, добавляя некоторые подсистемы, такие как обработка сеансов пользователей и механизм аутентификации, фильтр подсистемы безопасности и подсистема шаблонов отображения. Над этим слоем находится уровень дополнительных функциональных возможностей, называемых модулями, которые будут обсуждаться в следующем разделе этой главы. Модули расширяют возможности Drupal и могут воспроизводить содержимое любой страницы. Но, прежде чем страница появится перед пользователем, она пройдет через систему тем оформления, которая позволяет модифицировать оформление страниц и способна удовлетворить запросы самых взыскательных дизайнеров. Подробнее о системе тем оформления рассказывается в главе 11.
Система тем выводит содержимое страницы, обычно в формате XHTML, хотя поддерживаются и другие форматы. Для управления расположением элементов, цветом и шрифтами для заданной страницы используются каскадные таблицы стилей, а работоспособность динамических элементов интерфейса, таких как сворачиваемые наборы полей в формах и буксируемые строки таблиц в административном интерфейсе Drupal, обеспечивается с помощью JavaScript.
Мы рассказали вам о «старом» способе создания веб-сайтов с использованием статических файлов HTML, о переходе к использованию коллекций сценариев и о «новом» способе: создании полнофункциональных веб-приложений, которые управляют целыми веб-сайтами. Этот третий способ, реализованный системой Drupal, требует использовать новую концепцию строительных блоков. Они будут использоваться любым веб-сайтом, построенным на основе системы Drupal!
CSS JavaScript
HTML
Система тем
Дополнительные модули
(Fivestar, Organic Groups, Calendar…) Drupal
Базовые модули (User, Node, Block…) Базовые подсистемы
PHP База данных
(MySQL, PostgreSQL)
Веб сервер (Apache, Light, IIS…) Операционная система (Linux, Windows, Mac..)
Рис. 1.5. Расположение концептуальных уровней системы Drupal относительно других уровней веб-сайта
Модули
Практически все в системе Drupal вращается вокруг понятия модуля, который является файлом с программным кодом на языке PHP, реализующим функциональные возможности, с которыми система Drupal умеет работать. Все функциональные возможности Drupal, доступные администратору или конечному пользователю, от фундаментальных особенностей, таких как возможность выполнять вход в систему, до-
бавлять новое содержимое в динамические фотогалереи и сложные системы голосования, – все они реализованы в виде модулей. Примерами модулей могут служить: модуль Contact, который реализует форму с контактной информацией, и модуль User, который реализует процедуру аутентификации пользователя и проверку прав доступа. В других системах управления содержимым модули также называются дополнениями или расширениями.
Существует два типа модулей: «базовые» модули, которые включены непосредственно в состав системы Drupal, и «сторонние» модули, которые создаются сообществом Drupal и могут загружаться и устанавливаться по отдельности. Кроме нескольких обязательных базовых модулей все остальные модули могут подключаться и отключаться, в зависимости от потребностей веб-сайта.
Несмотря на то, что существуют модули c функциональностью «под ключ», тем не менее разработчики из сообщества Drupal обычно отдают предпочтение разработке модулей, которые выполняют единственную функцию, но делают это хорошо и при этом допускают возможность комбинирования с другими модулями. Это означает, что у вас имеется практически неограниченный контроль над внешним видом и поведением вашего веб-сайта. Возможности вашей галереи изображений не ограничены представлениями разработчика о том, как она должна выглядеть и как действовать. Вы можете добавить систему рейтингов или возможность оставлять комментарии, при желании – сортировать изображения по типу фотокамеры, а не по дате. Однако для достижения этой гибкости вам придется «построить» функциональность в системе Drupal, объединив несколько различных модулей и выполнив настройку их параметров, а не просто щелкнуть на флажке «галерея изображений» и оставить его отмеченным. Мощь системы Drupal порождает сложность ее изучения, с которой вы не столкнетесь в других пакетах CMS, а изобилие доступных модулей может отпугнуть при попытке определить, чем же стоит воспользоваться в конкретном случае. В приложении B приводятся советы и рекомендации, которые помогут оценить качество модуля и его необходимость для вашего проекта.
Пользователи
Следующий строительный блок веб-сайта на базе системы Drupal – это понятие пользователя. В случае простого веб-сайта брошюрного типа, который будет сопровождаться единственным администратором и посещаться только потенциальными клиентами, можно создать единственную учетную запись пользователя – для самого администратора. При создании сайтов, подразумевающих общение членов сообщества, вам придется настроить систему Drupal, чтобы позволить всем желающим пользоваться сайтом регистрироваться на нем и создавать свои учетные записи.
Первый пользователь, который создается при построении нового сайта на базе Drupal, пользователь №1, – это специальный пользователь. Подобно пользователю root на сервере UNIX, пользователь №1 обладает правом выполнять любые действия на сайте Drupal. Поскольку для этого пользователя не выполняются обычные проверки безопасности, он легко может по неосторожности уничтожить информационное наполнение или как-то иначе нарушить работу сайта, если позволить использовать эту учетную запись в повседневной работе. Поэтому лучше использовать эту учетную запись для выполнения специальных административных задач и настройки, а для работы с содержимым создать дополнительную учетную запись.
Каждому добавляемому пользователю может быть присвоена настраиваемая роль, такая как «редактор», «платный клиент» или «важная персона». Каждой роли могут быть присвоены права на выполнение различных действий на веб-сайте: посещение определенных страниц, просмотр содержимого определенного вида, разрешение оставлять комментарии к существующему содержимому, заполнять профиль пользователя и даже создавать новые учетные записи и управлять их правами доступа. По умолчанию в системе Drupal имеются две предопределенные роли: зарегистрированный пользователь и анонимный пользователь. Любой создаваемой учетной записи на сайте автоматически присваивается роль «зарегистрированный пользователь», а любому посетителю, для которого еще не создана учетная запись (или который еще не прошел процедуру аутентификации со своим именем пользователя и паролем), присваивается роль «анонимный пользователь».
Содержимое (узлы)
Узлы – это следующий строительный блок в системе Drupal, причем один из самых важных. Одна из важнейших составляющих проектирования любого сайта на базе Drupal заключается в выяснении, с какими конкретными видами содержимого (которые в Drupal называются «типами содержимого») вам предстоит работать. Практически в каждом конкретном случае будут присутствовать узлы различных видов.
Все узлы независимо от типов содержимого, хранящегося в них, обладают несколькими общими базовыми свойствами:
• Автор (пользователь сайта, создавший содержимое)
• Дата создания
• Заголовок
• Тело содержимого
Вам требуется создать страницу с конфиденциальными сведениями о вашей компании? Это узел. Вам требуется дать пользователям возможность оставлять сообщения в блоге? Каждое такое сообщение – это
узел. Пользователи будут оставлять ссылки на интересные материалы, размещенные где-то в Интернете? Каждая такая ссылка, как и следовало ожидать, будет храниться как узел.
В дополнение к общим базовым свойствам все узлы могут обладать определенными особенностями, встроенными в систему Drupal, такими как флаги, указывающие, будут ли публиковаться данные узлы, и настройки, управляющие способом отображения узлов каждого типа. Права на создание и редактирование содержимого узлов каждого типа также могут быть присвоены различным пользовательским ролям, например пользователи с ролью «blogger» могли бы создавать содержимое с типом «Blog entry» (Сообщение в блоге), но только пользователи с ролями «administrator» (администратор) или «editor» (редактор) могли бы создавать узлы с типом «News» (Новости).
Узлы могут также хранить информацию о ревизиях, описывающих каждое изменение, внесенное с момента создания узла. Если вы допустили ошибку (например, удалив важный параграф на странице «About Us» (о компании)), это позволит легко восстановить предыдущую версию узла.
В состав системы Drupal входят два предопределенных типа узлов:
«Page» (Страница) и «Story» (Статья). Они не играют какую-то специальную роль – они просто предлагают стандартный набор особенностей для всех узлов и ничего больше. Единственное отличие между этими двумя типами узлов заключается в параметрах настройки по умолчанию. Узлы «Page» не отображают информации об авторе или дате создания. Они отлично подходят для размещения такого содержимого, как «About Us» (О компании) и «Terms of Service» (Условия обслуживания), у которого не может быть определенного автора. Узлы типа Story отображают эту информацию, а кроме того, настроены так, чтобы появляться на главной странице сайта в случае их публикации. Результатом является блог-подобный список последних статей на сайте.
Посредством административных инструментов Drupal управления содержимым можно создавать другие «простые» типы узлов. Многие администраторы создают типы «news» (новости) или «announcement» (объявление) – для публикации официальных объявлений, тогда как другие пользователи могут публиковать узлы, содержащие статьи. Однако как быть, если вам потребуется хранить больше информации об узле, чем его заголовок и тело? Дополнительные модули могут привносить в систему содержимого Drupal новые виды узлов, обладающих более широкими возможностями. Одним из таких модулей (поставляемым в составе Drupal) является модуль «Poll». Когда пользователь создает новый узел типа «Poll», вместо обычного «тела содержимого» он создает список вопросов для голосования. Узлы типа «Poll» при отображении выглядят как форма для голосования и автоматически отображают число голосов по каждому пункту.
Узел Заголовок Тело
Автор
Дата создания
. . .
Голосование Варианты Результаты
Комментарии
Статья
Авторские права
Комментарии
Присоединенные файлы
Модуль Comment
Модуль Upload
Рис. 1.6. Все узлы в системе обладают набором общих базовых свойств; узлы могут определять дополнительные поля, а модули могут придавать узлам дополнительные функциональные возможности
Кроме того, другие модули могут реализовывать новые свойства узлов, такие как комментарии, рейтинги, поля выгрузки файлов и другие. Из панели управления вы можете определить, узлы каких типов будут обладать этими особенностями. Эта концепция иллюстрируется на рис. 1.6.
Возможность добавления новых свойств с помощью новых модулей поверх существующей системы узлов означает, что все виды содержимого в системе Drupal относятся к одной базовой платформе, которая является одной из самых сильных сторон Drupal. Такие возможности, как поиск, рейтинг и комментарии, являются готовыми к использованию компонентами в любых новых типах узлов, которые вы только сможете определить, потому что за кулисами система Drupal всегда знает, как обращаться с базовыми элементами этих компонентов – узлами.
Использование дополнительных модулей для добавления новых типов узлов или для добавления новых полей к существующим типам является распространенной задачей в Drupal. Продвигаясь по книге, мы рассмотрим некоторые из имеющихся сотен дополнительных модулей, и вы узнаете, как создавать сложные типы содержимого, используя базовые инструменты.
Способы организации содержимого
Еще одним важным строительным блоком является весь комплекс инструментов и приемов организации узлов, составляющих информаци-
онное наполнение сайта. Веб-сайты первого поколения группировали страницы с помощью папок и каталогов. Сайты второго поколения для отображения содержимого различных типов использовали отдельные сценарии. В свою очередь, система Drupal практически все содержимое представляет как набор узлов. Как можно разбить сайт на отдельные разделы по темам, на блоги конкретных пользователей или реализовать некоторую иную организационную схему?
Во-первых, каждый отдельный узел на сайте получает свой собственный адрес URL. По умолчанию этот адрес URL выглядит примерно так: http://www.example.com/node/1. Эти адреса URL можно преобразовать в более дружественный для пользователя вид, например: http:// www.example.com/about, с помощью модуля Path, встроенного в систему Drupal. В организационных целях все эти узлы интерпретируются как единый «пул» содержимого. Любые другие страницы на сайте – тематические обзоры, последние новости и другие – создаются посредством извлечения списков узлов, соответствующих определенным критериям, и отображаются различными способами. Ниже приводится несколько примеров:
Главная страница
По умолчанию главная страница сайта, построенного на базе Drupal, представляет собой обзор 10 самых последних статей. Для его создания Drupal отыскивает в пуле содержимого узлы с флагами «Published» (Опубликовано) и «Promote to front page» (Представить на главной странице), установленными в значение true. Кроме того, этот список сортируется так, чтобы узлы с флагом «Sticky» (Закреплен) всегда находились на самом верху; эта возможность особенно удобна для публикации горячих новостей или важных объявлений, которые должны быть видны каждому пользователю.
Модуль Taxonomy
Выше упоминалось, что модули могут добавлять к узлам новые элементы информации; именно это и делает модуль Taxonomy. Он позволяет администратору сайта определять категории тем, с которыми могут быть связаны узлы при их создании, а также ключевые слова для облака тегов в стиле блогов. Этот модуль можно использовать для создания предопределенного набора «Regions» (Регионы), представленного в виде поля в новостях или поля «Tags» (Теги) для блогеров, которое они будут заполнять вручную при отправке сообщений. Все это в терминах модуля Taxonomy называется «рубриками» и позволяет отнести страницу к той или иной рубрике на сайте. Когда посетитель просматривает одну из таких страниц, система Drupal извлекает список всех узлов, отнесенных к этой рубрике.
Модуль Blog
Модуль Blog, встроенный в систему Drupal, реализует многопользовательскую систему блогов, делая всего три вещи. Во-первых, он добавляет новый тип узлов, который называется «Blog post» (Сообщение в блоге). Во-вторых, с адресом http://www.example.com/blog он ассоциирует страницу со списком, в котором отображаются узлы типа
«Blog» (Блог), для которых флаг «Published» (Опубликовано) установлен в значение true. (Если сообщение в блоге имеет флаг «Published to front page» (Публиковать на главной странице) со значением true, оно будет также отображаться на главной странице; система Drupal никогда не скрывает содержимое одной страницы только потому, что оно отображается на другой.) В-третьих, для каждого пользователя сайта он предоставляет отдельную страницу, где отображаются сообщения блога, принадлежащие только этому пользователю. Например, на странице http://www.example.com/blog/1 будут отображаться все узлы с записями в блоге, которые были созданы и опубликованы пользователем 1, то есть администратором.
В составе системы Drupal поставляется ряд других модулей, которые обеспечивают возможность организации узлов различными способами, а кроме того, существуют сотни дополнительных, доступных для загрузки, модулей, позволяющие организовать сайт разными способами. Важно запомнить, что практически все «страницы» в Drupal представляют собой одну из двух вещей: определенный узел содержимого или список узлов, обладающих определенным общим набором свойств.
Типы содержимого поддержки
Помимо содержимого и списков содержимого существуют также различные способы дополнения содержимого страницы. Двумя такими способами поддержки содержимого, включенными в ядро Drupal, являются комментарии и блоки.
Комментарии – это обычные отклики пользователей на некоторые фрагменты содержимого, они существуют только в привязке к этому содержимому. Пользователи могут отправлять комментарии, чтобы представить свои мысли относительно темы узла, как это часто делается, когда в сообщении блога или на форуме поднимается спорная тема. Подобно узлам, хотя и в меньшей степени, комментарии могут с помощью сторонних модулей расширяться дополнительными свойствами, такими как рейтинги или выгружаемые файлы.
Комментарии имеют большое число параметров настройки: комментарии могут отображаться в виде древовидной структуры или в виде плоского списка; комментарии могут сортироваться по дате и времени создания как в прямом, так и в обратном порядке; анонимным пользова-
телям может быть предоставлена возможность оставлять комментарии, причем в последнем случае можно сделать предоставление контактной информации обязательным.
Блоки – это виджеты, которые присутствуют в таких областях страницы, как боковые меню, нижние колонтитулы и заголовки. Обычно они используются для отображения полезных ссылок или динамических списков, таких как «Most popular content» (Наиболее читаемые статьи), «Latest comments» (Последние комментарии), и похожих элементов. Блок пользователей управляет доступностью информации для посетителей вашего сайта; узлы отвечают за отображение содержимого; а блоки помогают встроить отдельный элемент содержимого в контекст структуры вашего сайта.
В большинстве случаев блоки отображают различное содержимое для разных зарегистрировавшихся пользователей: например, блок «Comments by your buddies» (Комментарии ваших друзей) будет отображать список сообщений, оставленных теми пользователями, которых текущий пользователь добавил в список своих друзей. Обычно все пользователи, выполнившие вход, видят различные списки. Кроме того, блоки можно настроить так, что они будут появляться только на определенных страницах или, наоборот, будут скрыты только на определенных страницах.
Источник: Байрон А., Берри Э., Хог Н., Итон Дж., Уокер Дж., Роббинс Дж. Drupal: создание и управление сайтом. – Пер. с англ. – СПб.: Символ-Плюс, 2010. – 576 с., ил.