Ромка!eu

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

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

  • Просмотреть
  • Голоса

Ромка — Вс, 01/03/2010 - 03:06

81
point

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

Решение. Задача решается при помощи стандартных модулей 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
  • Quote

User Karma модуль

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

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

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

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

виталий

  • ответить
  • quote
  • 6 points

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.
  • Вы можете использовать тэг <code></code> для подсветки синтаксиса программного кода. Действие тэга "<foo>" аналогично тэгу "[foo]".
  • You may quote other posts using [quote] tags.

Подробнее о форматировании

CAPTCHA
Если вы человек, а не робот, то введите текст с картинки. Если вы робот, то велкам ту майкрософт.ком.
Image CAPTCHA
Enter the characters (without spaces) shown in the image.

Обо мне

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

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

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

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

  • Разработка сайта на Drupal. Часть 4. Пример разработки корпоративного интранет-сайта на Drupal
  • Перетаскивание строк таблицы. Table drag and drop — плагин для jQuery
  • Cinnamon Chasers - Luv Deluxe (Music Video)
  • Разработка сайта на Drupal. Часть 3. Модули Drupal.
  • Разработка сайта на Drupal. Часть 6. Оптимизация Друпал
  • Разработка модуля для Drupal. Часть1. Введение
  • Куба. Лето 2008. Часть 3
  • Темизация Drupal. Часть 1
  • Пример разработки плагина для модуля CCK
  • Отладка CSS. Расширения Firebug, View formatted Source и Web Developer для Firefox

Подписка


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

  • Гость → Знак → Явное плоскостопие
  • Anonymous → Swftools и модуль Pdf2SWfField для Друпала → Здравствуйте, Рома! Все
  • Всеволод → Разработка сайта на Drupal. Часть 4. Пример разработки корпоративного интранет-сайта на Drupal → Panels
  • vsevolod → Несколько статей о Друпале → Статьи
  • Looker → Swftools и модуль Pdf2SWfField для Друпала → Привет! Все вроде делаю
  • Feniksss89 → Динамическое добавление элементов к форме → Не получается.
  • Anonymous → Разработка сайта на Drupal. Часть 6. Оптимизация Друпал → У меня на одном из сайтов
  • Anonymous → Модуль "Курсы валют" для Drupal 6 → Модуль
  • Smith → Разработка сайта на Drupal. Часть 4. Пример разработки корпоративного интранет-сайта на Drupal → Thanks for giving out
  • Anonymous → Получение заголовков (headers) страницы при помощи Java-script → индия курсовые по физике

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

  • Зима 2010. Поездка в Тайланд, Индонезию и Сингапур. Часть 3 — Бали, Сингапур, Пхукет
  • Зима 2010. Поездка в Тайланд, Индонезию и Сингапур. Часть 2 — Джокьякарта
  • Зима 2010. Поездка в Тайланд, Индонезию и Сингапур. Часть 1 — Пхукет и Джакарта
  • Шпаргалка по командам и хоткеям Unix
  • Семинар по хапкидо в Днепропетровске
  • О планах
  • Несколько статей о Друпале
  • Темизация Drupal. Часть 4. Темизация Views
  • Темизация Drupal. Часть 3. Основы Drupal Forms API и темизация форм
  • Темизация Drupal. Часть 2. Анатомия темы оформления Drupal

Тэги

Индонезия Отдых Работа Штуки-дрюки зима зима 2010 модуль статья темизация dckyiev09 Drupal jquery
еще тэги

Вход для пользователей

Что такое OpenID?
  • Войти по OpenID
  • Скрыть вход по OpenID
  • Зарегистрироваться
  • Запросить новый пароль

Навигация

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

Курсы валют

  • 100 Казахских тенге — 20,2044 (-0.06)
  • 10 Украинских гривен — 37,0715 (-0.11)
  • 10 Китайских юаней — 43,5819 (-0.12)
  • 100 Японских иен — 33,0298 (-0.39)
  • 1 Доллар США — 29,7499 (-0.09)
  • 1 Евро — 40,4866 (-0.03)
  • 1000 Белорусских рублей — 10,0984 (-0.05)
  • 1 Турецкая лира — 19,3760 (+0.12)

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

  • Разработка сайта на Drupal. Часть 2. Архитектура Drupal.
  • Эксперименты с вКонтакте API
  • Вышел Drupal 6.0 beta 1
  • Швабрашвабр2
  • Google Developer Day 2009
  • Закончил работу над адаптацией скрипта Fotonotes для Drupal 6
  • Отладка CSS. Расширения Firebug, View formatted Source и Web Developer для Firefox
  • Сегодня 256 день в году — день программиста
  • Несколько смешных картинок
  • Темизация Drupal. Часть 3. Основы Drupal Forms API и темизация форм

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

Недалеко от Красной поляны
Судак, Генуэзская крепость
Местный ходок
Старая и новая наши машины — пыжик и сузуки джимни
Собака
Оригинальная дорожная разметка в Гаване
Арка
В Сингапурском зоопарке. Попугай
В Сингапурском зоопарке. Леопардовая (бенгальская) кошка.
Копенгаген, Кристиания, Граффити 7
На подходе к Красной поляне...
Копенгаген, Кристиания, Граффити 6
Насыпь между Кайо Санта Мария и Кубой
Дом, плавающий по морю на больших поплавках
Дорога, на поверхности видны следы копыт
Вид на Бангкок с верхушки отеля Байок
  • Отдых
  • Работа
  • Штуки-дрюки

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