relation module. Артём Бердышев

Post on 08-May-2015

1.040 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Relation moduleArtem Berdishev

http://donetsk.drupal.ua

RELATION MODULE

Artem Berdishev

Зачем нужен Relation?Задача: связь сущностей на вашем сайте

•Изображение используется статьей

•Отдел включает работников

•Комментарий имеет родительский комментарий

•Пользователь знаком с другим пользователем

Существующее решение

Reference поля

•Реализация в виде полей для сущностей

•Часто используется node references

•Хорошо работает в большинстве сущностей

•Имеет несколько проблем и ограничений

Проблема №1: Reference поля являются направленнымиReference поля всегда начинаются с одной сущности и указывают на одну или несколько других

•Вызывает некоторые проблемы, как например, при использовании взаимосвязей во Views

•Одна сущность должны быть исходной даже при симметрической связи (например, соседство)

Решение: Использование доп. модули и/или создание “connection nodes”

Проблема №2: Reference поля - атомарныНет возможности указать дополнительную информацию об отношении•Когда и кем создана•Нет истории изменений•Нет возможности добавить поля

Решение: создание “connection nodes”

Проблема №3: У Reference полей отношение «одно-ко-многим»Нет возможности указать более одной исходной точки для каждого отношения.

•Не покрывает частных случаев отношений

•Снова: позволяет создавать только направленные отношения

Решение: создание “connection nodes”

Решение №1: Использование “connection nodes”Типы материалов, служащие только связями между сущностями

•Ноды тяжелы для загрузки и сохранения

•Требуются хаки и авто-создание

•Различная реализация для различных сайтов

•Все же требует дополнительных модулей для обратных связей

Решение №2: Использование дополнительных модулейРаботает, но имеет недостаток различной архитектуры для каждого сайта•Reverse Node Reference (views reverse relationship)

•Back Reference (nodeapi interface for 1-1 relationships)

•Node Referrer•Corresponding node references•Partners

RELATION

Введение в модуль RelationОтдельная сущность вместо “connection nodes”•Может иметь поля•Может объединять любой тип entity bundles – даже их комбинации•Может объединять любое количество сущностей•Может быть направленной или симметричной•Интегрируется со стандартными модулями•Легче чем ноды

Анатомия relation-сущностей• Массив конечных узлов

(end points)• Первая сущность –

источник (при направленной связи)

• Конфигурируется для каждого bundle – типы связей

• Нет заголовка, списков• Нет возможности

редактирования конечных узлов !!!

В первую очередь – API• Другие модули должны реализовывать

Relation

• Некоторый UI для добавления и просмотра отношений

• Реализована интеграция с Views и Rules

Недостатки• Больше времени на установку reference

полей

• Немного тяжелее чем reference fields (один дополнительный JOIN)

• Необходимо, чтобы все конечные узлы были созданы

• Пока не очень хороший UI

Будущее Relation• Возможно заменит reference fields для

сложных случаев

• Возможно не заменит reference fields в простых случаях

• Возможно предоставит стандартную модель отношений даже для ядра Drupal

Resources• Страница проекта:

http://drupal.org/project/relation

• Модуль Relation select: http://drupal.org/project/relation_select

• Серия видео-уроков про Relation: http://nodeone.se/node/970

THANKS!QUESTIONS?

Artem Berdishevemail: berdartem@gmail.com

skype: berdishev

top related