2. Зачем нужен Relation?
Задача: связь сущностей на вашем сайте
• Изображение используется статьей
• Отдел включает работников
• Комментарий имеет родительский комментарий
• Пользователь знаком с другим пользователем
3. Существующее решение
Reference поля
• Реализация в виде полей для сущностей
• Часто используется node references
• Хорошо работает в большинстве сущностей
• Имеет несколько проблем и ограничений
4. Проблема №1: Reference поля
являются направленными
Reference поля всегда начинаются с одной сущности и
указывают на одну или несколько других
• Вызывает некоторые проблемы, как например, при
использовании взаимосвязей во Views
• Одна сущность должны быть исходной даже при
симметрической связи (например, соседство)
Решение: Использование доп. модули и/или создание
“connection nodes”
5. Проблема №2: Reference поля -
атомарны
Нет возможности указать дополнительную
информацию об отношении
• Когда и кем создана
• Нет истории изменений
• Нет возможности добавить поля
Решение: создание “connection nodes”
6. Проблема №3: У Reference полей
отношение «одно-ко-многим»
Нет возможности указать более одной
исходной точки для каждого отношения.
• Не покрывает частных случаев отношений
• Снова: позволяет создавать только
направленные отношения
Решение: создание “connection nodes”
7. Решение №1: Использование
“connection nodes”
Типы материалов, служащие только связями
между сущностями
• Ноды тяжелы для загрузки и сохранения
• Требуются хаки и авто-создание
• Различная реализация для различных сайтов
• Все же требует дополнительных модулей для
обратных связей
8. Решение №2: Использование
дополнительных модулей
Работает, но имеет недостаток различной
архитектуры для каждого сайта
• Reverse Node Reference (views reverse relationship)
• Back Reference (nodeapi interface for 1-1 relationships)
• Node Referrer
• Corresponding node references
• Partners
10. Введение в модуль Relation
Отдельная сущность вместо “connection
nodes”
• Может иметь поля
• Может объединять любой тип entity bundles –
даже их комбинации
• Может объединять любое количество сущностей
• Может быть направленной или симметричной
• Интегрируется со стандартными модулями
• Легче чем ноды
11. Анатомия relation-сущностей
• Массив конечных узлов
(end points)
• Первая сущность – источник
(при направленной связи)
• Конфигурируется для
каждого bundle – типы
связей
• Нет заголовка, списков
• Нет возможности
редактирования конечных
узлов !!!
12. В первую очередь – API
• Другие модули должны реализовывать
Relation
• Некоторый UI для добавления и просмотра
отношений
• Реализована интеграция с Views и Rules
13. Недостатки
• Больше времени на установку reference
полей
• Немного тяжелее чем reference fields (один
дополнительный JOIN)
• Необходимо, чтобы все конечные узлы
были созданы
• Пока не очень хороший UI
14. Будущее Relation
• Возможно заменит reference fields для
сложных случаев
• Возможно не заменит reference fields в
простых случаях
• Возможно предоставит стандартную
модель отношений даже для ядра Drupal
15. Resources
• Страница проекта:
http://drupal.org/project/relation
• Модуль Relation select:
http://drupal.org/project/relation_select
• Серия видео-уроков про Relation:
http://nodeone.se/node/970