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
Recommended