Как бы я сохранил ссылку в пользовательском типе поля в Drupal 8?


Я разрабатываю модуль для Drupal 8 и хочу создать поле для одной сущности, которое ссылается на другую вместе с некоторыми дополнительными данными. например, в библиотеке A есть копия книги B (издание 2). Для каждой исходной сущности в поле будет сохранено несколько значений. В приведенном выше примере библиотеки будут содержать несколько книг.

Я знаю, как реализовать новый тип поля, виджет и средство форматирования для него, но мне интересно, является ли это лучшим способом для ссылка. Было бы лучше создать новую сущность для поддержания связи с двумя конечными точками и дополнительными данными (например, я бы создал таблицу внешних ссылок в MySQL)

Если я пойду с типом поля, когда дело дойдет до реализации хранения нового поля, буду ли я просто хранить идентификатор объекта, на который ссылается, а затем должен обернуть доступ в метод для изменения идентификатора <-> объекта?

Заранее спасибо за вашу помощь! Джейми

 1
Author: Jazzer, 2016-04-24

1 answers

Итак, на самом деле вы задаете два вопроса.

  1. Должен ли я использовать тип поля или отношение?

Оба работают. Тип поля требует гораздо меньшего объема памяти (все находится в таблице полей), но он жестко привязан к одному конкретному варианту использования. Альтернатива в основном https://www.drupal.org/project/relation или вы также можете использовать что-то вроде https://www.drupal.org/project/paragraphs, https://www.drupal.org/project/field_collection если вы только имейте ссылку источник -> цель (отношение может быть к n-n ссылкам). Для всех вы бы создали тип отношения/абзаца/коллекции с вашими дополнительными полями. Более гибкий, может быть настроен и не требует пользовательского кода, но каждая ссылка - это еще одна сущность, которую необходимо сохранить и загрузить.

Вам придется решить, что лучше для вашего случая, зависит от требований к производительности и гибкости, количества вариантов (вы, вероятно, не хотите создавать 10 типов полей..) и т.Д вкл.

  1. Если тип поля, как его создать.

На самом деле это довольно просто в Drupal 8. Вы просто расширяете тип поля ссылки на сущность по умолчанию (entityreferenceitem), переопределяете такие методы, как schema() и propertydefinitions(), чтобы определить, какие свойства у вас есть и как они хранятся. Затем вы пишете виджет и форматер для него, расширяясь от виджета/форматера, который ближе всего к тому, что вы хотите (например, автозаполнение или выбор для справки выбор).

Преимущество в том, что все фактические ссылки будут работать только через родительские классы, вам просто нужно реализовать свои дополнительные свойства.

 5
Author: Berdir, 2016-04-24 21:59:13