Ромка!eu

  • Отдых
  • Работа
Главная — Блоги — Ромка's blog

Это старая (Drupal 6) версия сайта romka.eu. Она больше не обновляется, комментирование материалов отключено. Обновленная версия сайта доступна по адресу http://romka.eu.

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

Ромка — Вс, 01/03/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

  • Drupal
  • социальная сеть
  • статья
  • Швабрашвабр
  • Ромка's blog

User Karma модуль

Vitaliy (не проверено) → Ср, 01/06/2010 - 17:56

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

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

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

виталий

Re: Читаю уже не первую неделю

Бобров Вячеслав (не проверено) → Вс, 02/06/2011 - 04:11

Читаю уже не первую неделю Ваш блог, узнаю много интересного. Спасибо Вам за Ваш труд!

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

Анастасия (не проверено) → Вс, 02/13/2011 - 02:02

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

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

Дмитрий «Xolms»... → Ср, 02/23/2011 - 00:26

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

ошибка?

Дмитрий «Xolms»... → Ср, 02/23/2011 - 00:19

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

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

Джон Дое (не проверено) → Вс, 05/15/2011 - 15:36

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

А есть ли какой нить чат

Anonymous (не проверено) → Сб, 08/27/2011 - 17:01

А есть ли какой нить чат переписки пользоваделей. как создать друзей?? и чат переписки между ними

вы из казахстана?

Anonymous (не проверено) → Сб, 08/27/2011 - 17:02

вы из казахстана?

Обо мне

Всем привет!
Меня зовут
Роман Архаров, я профессиональный веб-разработчик, программирую на языках PHP, Python и Action-Script, в работе использую фреймворки Drupal и Django. В этом блоге я размещаю заметки и статьи, связанные с моей работой, отдыхом и другими интересными мне темами.

Похожие заметки

  • Несколько статей о Друпале
  • Пример разработки плагина для модуля CCK
  • Темизация Drupal. Часть 2. Анатомия темы оформления Drupal
  • Темизация Drupal. Часть 1
  • Разработка модуля для Drupal. Часть2

Популярные заметки

  • Авторизация на Drupal-сайте с помощью аккаунта ВКонтакте
  • Перетаскивание строк таблицы. Table drag and drop — плагин для jQuery
  • Темизация Drupal. Часть 3. Основы Drupal Forms API и темизация форм
  • Темизация Drupal. Часть 4. Темизация Views
  • AJAX. Обмен данными между клиентом и сервером, закачка на сервер файлов без перезагрузки страницы при помощи библиотеки jQuery.
  • Кеширование на Drupal-сайте. Сравнение встроенного в Drupal кеша, статического файлового кеша (модуль Boost) и Varnish
  • Тестирование модуля "Inner poll"
  • Несколько панорам из путешествия по Перу и Боливии
  • Arduino + bluetooth, небольшая проблема
  • Пример разработки плагина для модуля CCK

Подписка


Последние комментарии

  • drupal-admin → Кеширование на Drupal-сайте. Сравнение эффективности встроенного в Drupal кеша, статического файлового кеша (модуль Boost) и Var → Отличная статья
  • Меховщиков Руслана → Проверка имени пользователя на наличие букв из разных алфавитов → Re: Читал про это уже на
  • Вероника → Куба. Лето 2008. Часть 3 → По поводу "приветливых жителей" Тринидада
  • Sfero → Статья в PC Magazine/RE. Drupal: разработка модуля → Немного о контенте
  • RemaGe → Статья в PC Magazine/RE. Drupal: разработка модуля → -)
  • Ромка → Статья в PC Magazine/RE. Drupal: разработка модуля → Да, будет сборка, та которую
  • RemaGe → Статья в PC Magazine/RE. Drupal: разработка модуля → -)
  • anatinge → Поездка в Киев → спасибо :)
  • Ромка → Поездка в Киев → Да, в общем-то, ничего
  • GogA → Поездка в Киев → Заинтриговал, что там за

Новые заметки

  • Кеширование на Drupal-сайте. Сравнение встроенного в Drupal кеша, статического файлового кеша (модуль Boost) и Varnish
  • Любопытное поведение модуля syslog в шестом Друпале (баг?)
  • Arduino + bluetooth, небольшая проблема
  • Гугл 1 марта прекратил поддержку сервиса Google Friend Connect
  • Проба пера в HTML5 + canvas. Эффект ластика
  • Шесть рукопожатий
  • Доклад на DrupalConfMoscow 2011
  • Статусы разных сущностей в Друпале 6
  • Футер, прибитый к низу страницы
  • Путешествие по Перу и Боливии. Часть 2

Тэги

Drupal jquery Куба Лето 2007 Лето 2008 Отдых Работа Штуки-дрюки лето модуль статья цитата
еще тэги

Навигация

  • Exchange rate
  • Переход по внешней ссылке
  • Последние сообщения
  • Фотогалереи

Курсы валют

  • 100 Казахстанских тенге — 21,3687 (-0.43)
  • 10 Украинских гривен — 27,2852 (-13.04)
  • 1 Китайский юань — 10,2706 (-40.98)
  • 100 Японских иен — 53,5332 (+12.67)
  • 1 Доллар США — 65,6210 (+33)
  • 1 Евро — 69,8076 (+29.42)
  • 10000 Белорусских рублей — 36,3310 (-2.51)
  • 1 Турецкая лира — 22,9540 (+4.99)

10 случайных заметок

  • Backup-manager — настройка резервного копирования Linux-сервера на Amazon S3 за 5 минут
  • Новый год 2009. Амстердам, Гаага, Роттердам и Кёльн
  • Проба пера в HTML5 + canvas. Эффект ластика
  • Песня для хорошего настроения
  • Автоматическая "газетная" верстка (верстка в несколько колонок)
  • Статусы разных сущностей в Друпале 6
  • Вспомнил детство
  • Вращение изображений при помощи Javascript
  • Backbird — скажи "прощай" алертам или удобная отладка java-script.
  • Лето 2007. Путешествие в Камбоджу – Таиланд – Малайзию. Часть 3. Камбоджа, Пномпень.

Случайные фото

Это я по дороге из Буканеро в Баракоа
Экзотическое меню в аэропорту :))
В Сингапурском зоопарке. Леопардовая (бенгальская) кошка.
Я на
Автописта
Просто море
Еще одно фото резиденции короля
Оденсе
В Сингапурском зоопарке. Будда?
Дорога, на поверхности видны следы копыт
Копенгаген, Кристиания, Граффити 3
Градиент
Недалеко от Красной поляны
Бронзовое море
Судак, Генуэзская крепость
Местный ходок
  • Отдых
  • Работа

При использовании материалов с сайта, пожалуйста, ставьте ссылку на источник. E-mail для связи: mne@romka.eu.