Organic Groups в Drupal 7

в 8:25, , рубрики: drupal, drupal 7, organic groups

Organic groups (OG) для Drupal 6 являются мощным и широко используемым модулем для создания сайтов, которые включают в себя группы, которые являются мини-сайтами в большем Drupal-сайте. Версия OG для Drupal 7 полностью переписана, заключают в себе преимущества Drupal 7 в API для сущностей и полей.

Одной из главных различий между Drupal 6 и Drupal 7 версий является развитие концепта того, что является «группой». В D6 группой являлась нода и другие ноды могли быть подписаны к ней, как контент группы. В D7 любой тип сущности может быть группой и любой тип сущности может принадлежать группе.

В этой статье мы рассмотрим всю архитектуру OG и пройдём весь путь для построения начальной группы в D7

Что такое группа?

Взгляните на иллюстрацию ниже. Вы можете увидеть, что группа состоит из множества различных типов сущностей. В центре сама нода, которая является группой. Сущность группы «родитель» для всех, которые являются группой.

Organic Groups в Drupal 7

Пользователи и контент это два вида сущностей, которые принадлежат группе. Каждый пользователь и каждая часть контента присоединяется к группе при помощи дополнительных сущностей. Образно говоря это простая запись в таблице которая отслеживает какая сущность связана с определённой группой.

Фактически, в текущей архитектуре есть две различных типов сущности «группа. Одна это тип контента, который вы обозначили «группа», и второй это особая сущность OG которую вы, вероятно, не будете тут реализовывать. В сущности OG содержится, как сама группа, так и идентификатор группы (GID). Это одна из самых сбивающих с толку вещей в архитектуре OG в D7. Имейте в виду, что GID и NID это два различных понятия. Это в дальнейшем может измениться, поэтому ознакомьтесь со ссылками в конце статьи.

Сущность группа

Для начала работы с OG мы должны решить, какой тип сущности будет «родителем». В D6 это всегда был тип материала, но в D7 это может быть любой тип сущности. Это всё равно будет контент нескольких типов, но так лучше не делать. Один из примеров другого пути это сайт energy.gov, где группы построены на терминах таксономии.

Для примера мы будем строить тип материала под названием «группа», который будет являться контейнером, подобный тому, что происходило в OG версии D6.

Контент OG

Следующее, что мы должны сделать, это определить, какие типы сущностей будут принадлежать группам. Мы можем использовать существующие типы контента.

Контент группы не ограничен сущностью ноды или типом контента. Другие типы сущностей могут принадлежать группе. Доступные сущности ограничены только модулями, установленными на сайте. Для примера, если на сайте установлен медаи-модуль, то медиа-сущность может входить в группу.

Пользователи это другие, специальные типы контента сущности группы. Они присоединяются к группе и также являются контентом «членство в группе», но кроме того они имеют ряд свойств и пользователи могут обладать ролями и разрешениями для взаимодействия с группой.

Любой тип сущности может принадлежать группе. По факту сама группа может принадлежать другой группе. Это позволяет объединять группы, создавая подруппы.

Скачивание и активация модулей

Построив в уме схему того, как сущности будут взаимодействовать с собой, мы можем приступить к постройке этого на сайте, путём скачивания и активации модуля OG. OG зависят от модуля Entity API, поэтому в нём мы тоже нуждаемся. (прим. от переводчика: «чистая установка» требует модулей: CTools, entityrefference, views bulk operations и views)

Версия D6 OG была монолитным модулем и практически давала «из коробки» всё, для создания группы. В D7-версии мы пошли другим путём. На каждую задачу выделен свой модуль со своими узкоспециализированными задачами. Часть задач вынесена в отдельные проекты.

Вот часть проектов, вынесенных в отдельные модули:

  • OG Content Links – создаёт ссылку «добавить контент» позволяющая добавить контент в группу
  • OG Views – предоставляет поле «Group View», которое вы можете добавить на дисплей группы. Заметим, что этот модуль не требует интеграции view, но ситуация планируется измениться в будущем. Если вы хотите встроить контент из view на страницу группы без использования Panels вы можете использовать это поле.
  • OG Theme – создаёт поле «Group theme», которое позволяет пользователям выбрать тему для группы.
  • OG Language – позволяет полю «Group language» давать пользователям выбрать язык для своей группы.

Внутри ядра OG также произошли изменения. Например, модуль, который шёл с OG названный OG Context.

OG UI также вынесен в отдельный модуль. Если вы хотите активировать только ядро OG и не хотите видеть в административном меню ничего, связанного с OG, то пропустите этот модуль. Причиной для этого может быть, что все группы у вас уже настроены и вы больше ничего не хотите конфигурировать.

Строительство наших групп

В версии для D7 при помощи полей в ядре мы используем специальные поля для соединения всех этих сущностей вместе. Если вы использовали Node Refference поля до этого, вы можете узнать знакомый шаблон – каждая сущность имеет поле или поля, которые показывают, как сущности соединены между собой. Для проделывания этой работы мы можем добавить OG поля к сущности или же если будет удобнее добавить поле Node Refference.

Итак, мы начнём с создания нового типа контента, назвав его «Группа». Прокрутите страницу вниз и увидите вкладку «Группы» в которой мы можем указать, является этот контент группой или контентом группы. Нам надо отметить, что это группа.

Далее, нам надо отредактировать существующий тип контента или создать новый. Используя туже вкладку «Группы» мы указываем, что этот тип является контентом группы и будет связан с группой.

После отметки типа контента как контента группы мы должны перейти на экран «управление полями» для каждого типа контента для добавления полей OG к ним. Когда мы это сделаем, то увидим, что у нас есть возможность выбрать посредством полей, какой контент какой группе будет принадлежать. Но вы не увидите тут никаких других специальных полей. Это ещё один из запутанных аспектов в версии D7. Вы не можете полностью контролировать поля из экрана «Менеджер полей».

Для добавления специальных полей в OG нам нужно перейти в административную часть OG. Взгляните на административный экран, скриншот которого представлен ниже, опции помечены номерами. Это то, что нам нужно для настройки полей OG.

Например, по ссылке admin/config/group/fields вы можете увидеть что-то похожее на скриншот.
Organic Groups в Drupal 7

Часть полей было сформировано автоматически, когда мы отметили тип контента, как группа или контент группы, но наша сущность группы и контента группы не имеет некоторых нужных нам полей. Для добавления оставшихся полей нам надо отметить сущность или узел в верхнем селекторе и выбрать в нижнем поле, которое мы хотим добавить. Доступные поля рассортированы по под-группам группы и контента группы для сигнализации, куда и что может быть добавлено. Для добавления поля вам надо выбрать тип контента в верхней части и поле в нижней части и щёлкнуть «добавить поле».

Если мы хотим иметь возможность приватных групп, то мы можем добавить поле «видимость группы» в группу. Если мы хотим перекрывать имеющиеся разделения по глобальным ролям погруппно, то нам необходимо добавить поле «групповые роли и разрешения» к сущности «группа». Если мы хотим использовать другие внешние модули, упоминаемые выше, мы будем видеть опции для добавления полей как ссылки контента группы.

Сущности контента группы имеют разные поля. Им надо дать поля «аудитория группы» и, возможно, «видимость группы» (для того, чтобы авторам группы дать возможность выбирать видимость).

Обратите внимание, что сущность «Пользователи» имеет те же поля «аудитория группы», что и контент группы.Это используется для отслеживания какие группы каким пользователям принадлежат.

Когда все поля установлены, вы можете выбрать, какие поля принадлежат каким сущностям.
Organic Groups в Drupal 7

С этого шага вы можете вернуться обратно к экрану управлению полями для сущности и вы можете видеть все поля OG, где можно отсортировать по своему усмотрению. Вы можете проверить все настройки. Каждую настройку можете перепроверить, чтобы быть уверенными, что поля «аудитория группы» имеют верное значение. Таже можете отметить разрешение для добавления пользователей или материалов.

Organic Groups в Drupal 7

Вам может понадобиться сделать изменения полей, представленных на экране управления полями. Множество спецполей OG имеют формат, названный «Групповая подписка». Эта настройка позволяет формировать вывод, основанный на разрешениях пользователей. Если пользователь не является членом группы, то он увидит ссылку для присоединения к группе. Если же пользователь член группы, то ему покажут, что он уже имеет роль членства.

С помощью этих настроек мы можем создать новую ноду группы и экран редактирования ноды покажет наши поля OG. Там мы можем выбрать, какие из этих сущностей быдут группами, будут ли они публичными или приватными, с какими сущностями они будут взаимодействовать и что будет контентом групп.

Законченная нода выглядит примерно так:
Organic Groups в Drupal 7

Теперь мы можем увидеть статус нашей группы, описание группы, ссылки для добавления нового контента и видеть существующий контент группы (если он есть, конечно). И администратор группы буде видеть вкладки с редактированием группы и её администрированием, где он сможет управлять членами группы и прочее.

Следующие шаги

То, что мы сделали это буквально зачаток того, что можно сделать из OG. Полученное ещё развивать и развивать. Вы можете вернуться на страницы администрирования и продолжить изучение всех опций. Например, настроить опции глобальных ролей и разрешений для своих групп.

Также, вы можете пойти во Views и настроить специальные представления для контента и членов группы. И, конечно, вы можете использовать Panels для склейки всего этого вместе. Таким образом, это лишь примерные возможности того, что может быть в OG в простейшей конфигурации (вам понадобятся Features, CTools и Panels).

Я упоминал выше, что могут произойти архитектурные изменения. Это связано с получением освободившейся сущности OG в запросах. Основная идея – это упрощение конфигурации и организации OG и возвращение к шаблонам, использованных в D6, когда сущность группы это группа и ID сущности группы это GID группы. Приветствуем также спонсорство Amitaibu (Amitai Burstein) это разработчик OG.

Автор: aszhitarev

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js