Разработка сайта на Drupal. Часть 5. Социальная сеть на Друпале

Постановка задачи

Создаем ресурс со свободной регистрацией и возможностью для зарегистрированных пользователей публиковать материалы в собственном и коллективных блогах (блогах, посвященных определенной теме, в которые могут писать несколько авторов). Для авторизованных пользователей нужна возможность оценивать чужие материалы и комментарии к ним. Эти оценки должны влиять на «карму» авторов. Пользователи, набравшие определенный уровень «кармы», должны получать некоторые привилегии перед обычными — например, возможность создавать новые коллективные блоги. Материалы, набравшие определенный рейтинг, должны выводиться на главной странице. Кроме того, необходимо реализовать возможности, позволяющие пользователям вести списки друзей и загружать фотографии.

Решение. Задача решается при помощи стандартных модулей Drupal Blog и Path, а также дополнительных Organic Groups, Views, VotingAPI, Vote Up/Down, User Karma, CCK, ImageAPI, ImageCache, Filefield, Imagefield, Lightbox2. На данный момент на сайте shvabrashvabr.ru доступна новая, обладающая большим функционалом, версия описанной здесь сборки, с подробными описаниями и скринкастами.

Реализация

Первым делом перейдем в меню 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.

После того как необходимые модули активированы, приступим к их настройке и начнем с «Коллективных блогов», которые реализуются модулем Organic Groups. Логика работы такова: в настройках модуля нужно указать, какой тип контента будет считаться «Коллективным блогом», а какой — «Записью» для коллективного блога. Пользователи смогут создавать «Коллективные блоги», подписываться на них и создавать в них записи. При переходе на страницу «Коллективного блога» будут отображаться все размещенные в нем записи.

В качестве «Записи» для коллективного блога подойдет уже существующий тип контента 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).

Сейчас система позволяет создавать записи в блогах, размещать их в коллективных блогах и прикреплять к материалам изображения. Осталось добавить возможность оценки материалов и карму. Сначала перейдем в меню Administer — Vote up/down (admin/settings/voteupdown) и отметим типы контента, которые пользователи смогут оценивать. В нашем случае достаточно поставить галочку Blog entry. Теперь перейдем в меню Administer — User Karma (admin/settings/user_karma). Здесь на соответствующих вкладках можно указать, как изменится карма пользователя, когда он разместит новый материал (комментарий) или получит оценку своего материала. Кроме того, здесь же мы должны настроить автоматический перевод пользователя из одной группы в другую, если он наберет определенный уровень кармы. Для этого на вкладке General необходимо выбрать роли, которые могут использоваться модулем User Karma (здесь это роль «Продвинутые пользователи»), сохранить изменения и в появившихся группах настроек указать необходимые значения кармы.

Теперь наши посетители могут создавать записи в блогах, оценивать их и осталось при помощи модуля Views создать два представления: в одном будут выводиться все записи в блогах, а во втором только записи с определенным рейтингом. Подробно настройка представлений рассмотрена в предыдущем примере, поэтому сейчас я на этом вопросе детально останавливаться не стану, так как здесь будут использоваться те же средства. Единственное исключение состоит в том, что в блоке настроек Ralationships необходимо добавить связь с модулем VotingAPI, чтобы в фильтрах представлений можно было использовать рейтинги документов.

Ссылки на другие части этой статьи:

Содержание всех статей: /blog/2010/my-drupal-articles