- RUS
Социальная сеть на Drupal
Автор: Роман Архаров
Описание: В статье рассматриваются основные положения создания социальной сети на Drupal.
Источник: Статья на сайте журнала PC Magazine
Социальная сеть на Drupal
Постановка задачи. Создаем ресурс со свободной регистрацией и возможностью для зарегистрированных пользователей публиковать материалы в собственном и коллективных блогах (блогах, посвященных определенной теме, в которые могут писать несколько авторов). Для авторизованных пользователей нужна возможность оценивать чужие материалы и комментарии к ним. Эти оценки должны влиять на «карму» авторов. Пользователи, набравшие определенный уровень «кармы», должны получать некоторые привилегии перед обычными — например, возможность создавать новые коллективные блоги. Материалы, набравшие определенный рейтинг, должны выводиться на главной странице. Кроме того, необходимо реализовать возможности, позволяющие пользователям вести списки друзей и загружать фотографии.Решение. Задача решается при помощи стандартных модулей Drupal Blog и Path, а также дополнительных Organic Groups, Views, VotingAPI, Vote Up/Down, User Karma, CCK, ImageAPI, ImageCahce, Filefield, Imagefield, Lightbox2.
Реализация. Первым делом перейдем в меню Administer — Modules (admin/build/modules) и активируем необходимые модули:
- Для этой сборки из группы модулей CCK, кроме модуля Content, нам понадобится модуль Text, позволяющий добавлять к документам текстовые поля, и Filefield, Imagefield , с помощью которых к документу можно присоединить неограниченное количество изображений.
- Из модулей ядра активируем модуль Blog, позволяющий пользователям вести персональные блоги, и Path, с помощью которого создаются «человекопонятные» адреса документов.
- В группе модулей ImageCache отметим галочками ImageCache, ImageCacheUI, ImageAPI и ImageAPI GD2 (или ImageAPI ImageMagick вместо последнего).
- В группе модулей Organic Groups находятся модули, реализующие функционал коллективных блогов. Нам понадобятся Organic Groups и Organic Groups Views Integration.
- Из модулей в группе Others отметим служебные модули Token и Pathauto, а также модуль Lightbox2, с помощью которого прикрепленные к документу изображения можно выводить в виде красивого слайд-шоу.
- Группа модулей UserKarma изменяет карму (рейтинг) авторов, если посетители сайта голосуют за их материалы, а также позволяет переводить пользователей из одной группы в другую (и присваивая им новые права доступа) в зависимости от значения кармы. Нам понадобятся все модули этой группы.
- Чтобы пользователи могли создавать списки друзей, в группе модулей User Relationships отметим модули UR-API, UR-Blocks, UR-UI, UR-Views.
- На нашем сайте будет два основных списка материалов. В первом будут отображаться все опубликованные документы, а во втором, который станет также главной страницей сайта, — материалы, набравшие определенный рейтинг. Создавать списки мы будем с помощью модулей Views и ViewsUI.
- Оценивать материалы наши пользователи смогут с помощью кнопок «за» и «против». Материалы, набравшие определенный положительный рейтинг, будут выводиться на главной странице сайта. Оценки материалов реализуются модулями VitingAPI и Vote up/down.
В качестве «Записи» для коллективного блога подойдет уже существующий тип контента Blog entry, который создается автоматически стандартным модулем Blog. Материал типа «Коллективный блог» нужно создать самостоятельно. Для этого перейдем в меню Administer — Content types (admin/content/types) на вкладку Add и создадим тип материала с именем «Коллективный блог» и машинным наименованием group. Теперь перейдем в настройки модуля Organic Groups (admin/og/og) и укажем, что материал типа Blog entry — это запись в коллективный блог (Standard group post), а материал типа Коллективный блог, как это ни странно, коллективный блог (Group node).
К записям в блогах по нашей задумке пользователи смогут присоединять неограниченное количество изображений, которые будут выводиться в виде уменьшенных копий внизу сообщения. При этом щелчок по изображению должен открывать слайд-шоу, сопровождаемое небольшим количеством спецэффектов. В нем будут выводиться копии изображений размером 800x600 пиксел. Чтобы из загружаемых изображений автоматически создавались уменьшенные копии, нужно в модуле ImageCache создать два набора настроек, выполняющих необходимые действия. После этого нужно перейти в свойства материала типа Blog entry (Administer — Content types, а затем Manage fields соответствующего типа материалов) и добавить к нему поле типа Image. Чтобы убрать ограничение на количество загружаемых изображений, в свойствах созданного поля параметру Number of values нужно установить значение Unlimited. В свойствах отображения полей (Display field) нужно указать, что картинка должна выводиться в виде миниатюры 100x100, а клик по ней должен открывать слайд-шоу с картинками размером 800x600. В данном случае этот параметр имеет имя Lightbox2: preview-100x-100->width-800.
Пришло время распределить права доступа пользователей к различным возможностям сайта. Мы решили сделать так, чтобы пользователи с определенным уровнем «кармы» имели больше возможностей, чем обычные пользователи, поэтому нам нужно создать новую роль «Продвинутые пользователи» (делается это в меню Administer — Roles). Теперь перейдем в меню Administer — Permissions и установим необходимые разрешения.
- Блоги. Для авторизованных и продвинутых пользователей разрешим вести свои блоги, для этого нужно установить галочки create blog entries, edit own blog entries, delete own blog entries.
- Комментарии. Всем пользователям разрешим просматривать комментарии (галочка access comments), а оставлять комментарии смогут только авторизованные и продвинутые пользователи (галочки post comments, post comments without approval).
- Изображения. Всем пользователям разрешим просматривать миниатюры, созданные модулем ImageCache, и картинки, прикрепленные к документам (начинающиеся на view imagecache и view imagefield uploads).
- Материалы сайта. Всем пользователям разрешим просматривать контент (access content), а группе продвинутых пользователей разрешим создавать и редактировать коллективные блоги (create group content и edit own group content).
- Списки друзей. Авторизованным и продвинутым пользователям разрешим создавать списки друзей (can have relationships, maintain own relationships), а всем пользователям просматривать эти списки (view user relationships).
- Views. Всем пользователям разрешим просмотр представлений (access all views).
- Голосования. Всем пользователям разрешим просмотр статистики голосований за материалы (access up-down vote statistic и view up-down vote), но голосовать разрешим авторизованным пользователям (use up-down vote).
Теперь наши посетители могут создавать записи в блогах, оценивать их и осталось при помощи модуля Views создать два представления: в одном будут выводиться все записи в блогах, а во втором только записи с определенным рейтингом. Подробно настройка представлений рассмотрена в предыдущем примере, поэтому сейчас я на этом вопросе детально останавливаться не стану, так как здесь будут использоваться те же средства. Единственное исключение состоит в том, что в блоке настроек Ralationships необходимо добавить связь с модулем VotingAPI, чтобы в фильтрах представлений можно было использовать рейтинги документов.