Extra Block Types (EBT) - New Layout Builder experience❗

Extra Block Types (EBT) - styled, customizable block types: Slideshows, Tabs, Cards, Accordions and many others. Built-in settings for background, DOM Box, javascript plugins. Experience the future of layout building today.

Demo EBT modules Download EBT modules

❗Extra Paragraph Types (EPT) - New Paragraphs experience

Extra Paragraph Types (EPT) - analogical paragraph based set of modules.

Demo EPT modules Download EPT modules

Scroll

Программирование пользовательских полей в ваш тип контента

17/05/2020, by maria

Иногда, когда вы извлекаете тип контента из пользовательского модуля, вы также можете добавить поля, относящиеся к этому типу контента. Возможность автоматически создавать поля позволяет вам удалять и переустанавливать на нескольких сайтах, не оставляя лишних полей и гарантируя, что вы не забудете добавить их. Есть два способа добавить эти поля в вашу кодовую базу, которые мы рассмотрим.

Предпосылки

  • Drupal 8.0.x установлен.
  • Имейте пользовательский модуль (имя модуля, используемого в этом примере, является foobar).
  • Имейте пользовательский тип контента в модуле (Пожалуйста, следуйте инструкциям на родительской странице. Название типа контента будет Car Brand).

Добавление дополнительных полей к нашему типу контента

Есть два способа сделать этот шаг. Вы можете использовать пользовательский интерфейс для создания полей и экспорта конфигурации в файлы, или вы можете просто написать файлы самостоятельно. Мне нравится использовать первый вариант, просто чтобы убедиться, что вы не пропустите ничего, что будет необходимо, однако поля экспортируются с «field_» в начале, а не «foobar_car_brand_», чтобы связать их с нашим пользовательским типом контента. Мы рассмотрим ручное кодирование полей в вашем пользовательском модуле на этой странице.

Ручное кодирование полей в вашем модуле

Как указывалось ранее, этот метод требует немного больше знаний и точного знания того, что вы хотите, чтобы поле делало и выглядело. Каждое добавляемое поле должно иметь два файла YAML, которые содержат информацию о конфигурации. Они называются следующим образом: field.field.node.car_brand.field_brand_information.yml и field.storage.node.field_brand_information.yml.

Удалить пользовательский тип контента

Если вы уже включили модуль foobar в конце последней страницы, продолжайте и удалите его сейчас.

foobar/config/install/field.storage.node.field_brand_information.yml

Этот файл сообщит Drupal, что он должен создать наше поле.

# field.storage.node.field_brand_information.yml
langcode: en
status: true
dependencies:
  module:
    - node
    - text
id: node.field_brand_information
field_name: field_brand_information
entity_type: node
type: text_with_summary
settings: {  }
module: text
locked: false
cardinality: 1
translatable: true
indexes: {  }
persist_with_no_fields: false
custom_storage: false

 

foobar/config/install/field.field.node.car_brand.field_brand_information.yml

Этот файл сообщит Drupal, что он должен прикрепить наше поле к нашему типу контента.

# field.field.node.car_brand.field_brand_information.yml
langcode: en
status: true
dependencies:
  config:
    - field.storage.node.field_brand_information
    - node.type.car_brand
  module:
    - text
id: node.car_brand.field_brand_information
field_name: field_brand_information
entity_type: node
bundle: car_brand
label: 'Brand Information'
description: 'More specific information about the car brand'
required: false
translatable: false
default_value: {  }
default_value_callback: ''
settings:
  display_summary: false
field_type: text_with_summary

foobar/config/install/core.entity_form_display.node.car_brand.default.yml | foobar/config/install/core.entity_view_display.node.car_brand.default.yml

Оба эти файла необходимо обновить с предыдущей страницы, чтобы они включали все новые поля, которые вы добавляете. Я добавил два дополнительных поля с именами «Additional_field_1» и «Additional_field_2», чтобы вы могли видеть, как это будет выглядеть с несколькими полями.

Примечание. Если вы не хотите создавать дополнительные поля, удалите зависимости и информацию для этих полей в следующем коде.

# core.entity_view_display.node.car_brand.default.yml
langcode: en
status: true
dependencies:
  config:
    - field.field.node.car_brand.field_brand_information
    - field.field.node.car_brand.field_additional_field_1
    - field.field.node.car_brand.field_additional_field_2
    - node.type.car_brand
  module:
    - file
    - text
    - user
_core:
  default_config_hash: Nfnv6VMugBKl6EOqi_U0I_LQ1ZQpbNDN3a9GXHWUBz4
id: node.car_brand.default
targetEntityType: node
bundle: car_brand
mode: default
content:
  field_brand_information:
    weight: 101
    label: above
    settings: {  }
    third_party_settings: {  }
    type: text_default
  field_additional_field_1:
    weight: 103
    label: above
    settings:
      link_to_entity: false
    third_party_settings: {  }
    type: string
  field_additional_field_2:
    weight: 102
    label: above
    settings: {  }
    third_party_settings: {  }
    type: file_default
  links:
    weight: 100
hidden: {  }

 

# core.entity_form_display.node.car_brand.default.yml
langcode: en
status: true
dependencies:
  config:
    - field.field.node.car_brand.field_brand_information
    - field.field.node.car_brand.field_additional_field_1
    - field.field.node.car_brand.field_additional_field_2
    - node.type.car_brand
  module:
    - file
    - path
    - text
_core:
  default_config_hash: qZE-qJ04DTTNggVVQdVOPQmpE_I69GQ_LqB32kXivVg
id: node.car_brand.default
targetEntityType: node
bundle: car_brand
mode: default
content:
  created:
    type: datetime_timestamp
    weight: 2
    settings: {  }
    third_party_settings: {  }
  field_brand_information:
    weight: 7
    settings:
      rows: 9
      summary_rows: 3
      placeholder: ''
    third_party_settings: {  }
    type: text_textarea_with_summary
  field_additional_field_1:
    weight: 6
    settings:
      size: 60
      placeholder: ''
    third_party_settings: {  }
    type: string_textfield
  field_additional_field_2:
    weight: 8
    settings:
      progress_indicator: throbber
    third_party_settings: {  }
    type: file_generic
  path:
    type: path
    weight: 5
    settings: {  }
    third_party_settings: {  }
  promote:
    type: boolean_checkbox
    settings:
      display_label: true
    weight: 3
    third_party_settings: {  }
  sticky:
    type: boolean_checkbox
    settings:
      display_label: true
    weight: 4
    third_party_settings: {  }
  title:
    type: string_textfield
    weight: 0
    settings:
      size: 60
      placeholder: ''
    third_party_settings: {  }
  uid:
    type: entity_reference_autocomplete
    weight: 1
    settings:
      match_operator: CONTAINS
      size: 60
      placeholder: ''
    third_party_settings: {  }
hidden: {  }

Включить пользовательский тип контента

Теперь вы должны включить модуль foobar. Если вы сейчас перейдете на страницу «Создать контент», то увидите, что можете создать новый узел типа контента «Car Brand», и он будет включать наше новое поле с именем «Brand Information».

Мы рассмотрим добавление этих полей через пользовательский интерфейс на следующей странице.

Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.