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