Как расширить базовый пользовательский объект после установки?


Мне нужно создать модуль для обработки профилей пользователей, и мне нужно автоматически расширить базовый объект пользователя Drupal после установки. Для Drupal 7 я нашел способ с помощью:

field_create_field($field);

Но эта функция недоступна в Drupal 8, кстати, совершенно не работает на Drupal, учится во время работы над ним.

 4
Author: Pierre.Vriens, 2015-01-20

2 answers

Поля, как и большинство других вещей, теперь являются конфигурацией (сущностями).

Это означает, что вам не нужно писать код для их создания, вы можете просто создать их в пользовательском интерфейсе, затем экспортировать их через пользовательский интерфейс управления конфигурацией и поместить соответствующие файлы в свою папку config/install. Drupal автоматически импортирует всю вашу конфигурацию из этой папки.

Обратите внимание, что поле обычно состоит из 4 частей:

  1. Хранилище полей, файл с именем field.storage.user.yourfieldname.yml (или узел, комментарий,...для других типов сущностей). Это определяет соответствующую конфигурацию поля и хранилища.
  2. Поле, файл с именем field.field.user.user.yourfieldname.yml (пользователь является особенным, потому что существует только один пакет, для узлов, например, это будет node.article). Это определяет, что поле доступно в определенном пакете и включает конфигурацию, такую как метка.
  3. Отображается одна или несколько форм, например, с именем core.entity_form_display.user.default.yml. Пользователь по умолчанию имеет два режима формы: по умолчанию и регистрация. Узел по умолчанию имеет только один. Этот сохраняет конфигурацию виджета для поля.
  4. Один или несколько видов отображения, напримерcore.entity_view_display.user.default.yml. Здесь хранится информация о форматировании для определенного режима просмотра.

Первые два файла можно просто скопировать в вашу папку config/install. Два других немного сложнее, потому что они содержат конфигурацию виджета/средства форматирования для всех полей этого типа сущности, связки и комбинации отображения формы/представления. Таким образом, в случае пользователя, например, вам действительно нужно немного кода, чтобы добавить настройка для отображения существующей формы/представления. См. node_add_body_field() для примера кода. Вы можете получить точные настройки из экспортированных файлов.

Если вы являетесь владельцем пакета, например, если ваш модуль определяет тип узла с числом полей, вы также можете просто добавить эти формы/представления в папку конфигурации.

 13
Author: Berdir, 2015-12-17 22:00:24