Разница между полем и полевым экземпляром?

15

Когда мы идем по пути /admin/structure/types/manage/article/fieldsи используем Add new fieldпараметр или Add existing fieldпараметр, это создает поле, создает экземпляр поля или присоединяет экземпляр поля? Как отличить их? Итак, программно, когда использовать field_create_field , field_create_instance и field_attach API?

В документации по API полей упоминается только интерфейс администратора и никогда не говорится о пути создания полей и экземпляров полей. Так что это сбивает с толку. Я даже не знаю, имею ли я смысл.

Евгений Жером
источник
Это должно демистифицировать это: dikini.net/31.08.2010/…
Клайв
и в обычном случае каждое добавляемое поле создает новое поле в базе данных, и когда вы добавляете существующее поле, оно не создает новую таблицу, просто добавляет ее в существующую таблицу.
Мохаммед Шамим
1
@ Мохаммед Шамим, спасибо, тогда что за пример? Какой вариант использования? Или, скорее, где мы используем это в реальности?
Евгений Жером
1
всегда лучше использовать один и тот же экземпляр поля, если цель или функция будут одинаковыми. например, у вас другой тип контента с одним и тем же словарём таксономии, который будет добавлен во всех. было бы лучше добавить одно и то же поле ко всем типам контента, а не создавать разные поля для каждого типа контента. Внутренне это уменьшит количество таблиц, построенных на drupal. и поиск по словарю станет лучше.
Мохаммед Шамим
1
Таким образом, поля, которые мы видим в пути, node/add/articleявляются экземплярами полей (которые повторно используются в нескольких различных типах сущностей). А поля у пути /admin/structure/types/manage/article/fields- это поля. В базе данных я не вижу таблицу экземпляров поля, а только таблицу field_data, которую, я думаю, мы получаем, когда мы впервые создаем поле при /admin/structure/types/manage/article/fieldsиспользовании пути field_create_field. И затем экземпляр присоединяется к комплекту (в данном случае к статье), который мы видим в пути node/add/article.
Евгений Жером

Ответы:

24

Поле - это базовое определение самого поля. Экземпляр поля - это экземпляр этого поля, прикрепленный к объекту / комплекту.

  1. Поля создаются с помощью field_create_field
  2. Экземпляры полей, с field_create_instance

Чтобы проверить, существует ли поле или экземпляр, используйте

  1. field_info_field или
  2. field_info_instance

Когда вы создаете поле через пользовательский интерфейс, Drupal всегда создает экземпляр поля для этого объекта / пакета.

Если вы добавляете существующее поле, данные поля клонируются, и создается экземпляр поля для нового объекта / пакета.

Наконец, настройки поля применяются глобально к этому полю, настройки экземпляра поля могут различаться в зависимости от комплекта сущностей.

Дэвид Томас
источник
2
Большое спасибо, вы очистили мои сомнения. Если бы у меня была привилегия, я бы +1 к твоему сообщению.
Евгений Жером