Upload
artem-berdishev
View
457
Download
0
Embed Size (px)
DESCRIPTION
Presentation about Relation (http://drupal.org/project/relation) module on DrupalCamp Donetsk 2011 (http://donetsk.drupal.ua)
Citation preview
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