Drupal 8 создает поле программно

Я создал пользовательский модуль для Drupal 8, который позволяет пользователям выбирать тип контента, чтобы программно добавлять некоторые поля. Как я могу создать некоторые поля (в данном случае тип текста) и прикрепить их к типу контента с помощью специального модуля?

Некоторая помощь?

Благодарю.

3 ответа

Вам нужно создать FieldType, FieldWidget и FieldFormatter(при необходимости), есть хорошие примеры в Core/Field/Plugin/Field.

Вот хороший пример здесь https://www.drupal.org/node/2620964

API Checkout Field для Drupal 8

В нем реализовано несколько функций, и вам может понадобиться hook_entity_bundle_field_info, вот пример текстового поля из документации этого хука

function hook_entity_bundle_field_info(\Drupal\Core\Entity\EntityTypeInterface $entity_type, $bundle, array $base_field_definitions) {
  // Add a property only to nodes of the 'article' bundle.
  if ($entity_type->id() == 'node' && $bundle == 'article') {
    $fields = array();
    $fields['mymodule_text_more'] = BaseFieldDefinition::create('string')
      ->setLabel(t('More text'))
      ->setComputed(TRUE)
      ->setClass('\Drupal\mymodule\EntityComputedMoreText');
    return $fields;
  }
}

Вам также может понадобиться Field Storage, оформить заказ hook_entity_field_storage_info

Вы можете использовать этот модуль для программного создания полей для любого типа сущности и нескольких пакетов одновременно из пользовательских файлов YAML или JSON: https://drupal.org/project/field_create

Самый простой подход для вашего модуля - добавить ваши поля в hook_field_create_definitions(). Просто создайте эту функцию:

      function mymodule_field_create_definitions_alter(&$definitions) {}
Другие вопросы по тегам