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

Submitted by Ромка on Вс, 03/01/2010 - 03:06

Ромка аватар

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

Решение. Задача решается при помощи стандартных модулей 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, чтобы в фильтрах представлений можно было использовать рейтинги документов.

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

  • Часть 1. Введение
  • Часть 2. Архитектура Друпала
  • Часть 3. Модули Drupal
  • Часть 4. Интранет-сайт на Друпале
  • Часть 5. Социальная сеть на Друпале
  • Часть 6. Оптимизация Друпал

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

9 Comments

User Karma модуль

Роман, привет!

такой вопрос - я настроил сборку соц. сети за вашими последними скринкастами на швабре. но увидел следующую вещь: роли пользователей, прописанные для работы с юзер кармой, теряются при первой редакции профиля (персональной страничики) пользователя. то есть, если пользователю была присвоена роль отличная от просто зарегестрированого пользователя и она работает з юзер кармой, то после сохранения каких-либо изменений в профиле или просто же пересохранения без изменений, эта роль теряется и пользователь становится просто зарег. пользователем. даже админ не может установить необходимую роль. изменения роли не сохраняються. только когда я убираю данную роль с юзер кармы - все ок.

может вы сталкивались с этой проблемой и можете подсказать что-нибудь? в любом случае спасибо за вашу работу.

виталий

Вопрос измученной девушки

Я очень начинающий веб дизайнер (даже как то неудобно себя так называть), свой первый сайт создала неделю назад в программе дримвьювер, после просмотра видео курса и захотелось мне сделать в нем коллективный блог. Очень порадовалась тому, что нашла вашу статью о Drupal. Установила Drupal 7,0 и столкнулась с проблемой - модули, о которых вы пишите не все подходят к 7 версии.... Пыталась установить 6, но ничего не получилось - доходила до стадии "установка завершена", но при переходе на страничку выдавало кучу каких то ошибок ... Помогите пожалуйста!

попробуйте для начала

попробуйте для начала запустить CRON.
Если ошибки еще не исчезли разбирайтесь с ними по очереди, Нередко прямо в "отчете о состоянии" говорится что конкретно нужно сделать для устранения ошибки.
При необходимости используйте переводчик

ошибка?

Спасибо за замечательные материалы, благодаря им я уже многому научился )
вероятно вот здесь : "Оценки материалов реализуются модулями VitingAPI и Vote up/down." ошибка, за место VitingAPI должно быть Voting API.

Разные профили пользователей

Подскажите, пожалуйста, как во всей этой радости завести разные профили пользователей которые гость выберет при реге?