Programmierung benutzerdefinierter Felder in Ihren Inhaltstyp
Manchmal, wenn Sie einen Inhaltstyp aus einem benutzerdefinierten Modul bereitstellen, können Sie auch Felder hinzufügen, die zu diesem Inhaltstyp gehören. Die Möglichkeit, Felder automatisch zu erstellen, ermöglicht es Ihnen, die Installation auf mehreren Seiten zu deinstallieren und neu zu installieren, ohne dass unerwünschte Felder zurückbleiben, und stellt sicher, dass Sie nicht vergessen, sie hinzuzufügen. Es gibt zwei Methoden, diese Felder in Ihren Code einzubringen, die wir hier behandeln werden.
Voraussetzungen
- Drupal 8.0.x ist installiert.
- Sie haben ein benutzerdefiniertes Modul (der Modulname in diesem Beispiel ist foobar).
- Sie haben einen benutzerdefinierten Inhaltstyp im Modul (bitte folgen Sie den Anweisungen auf der übergeordneten Seite. Der Inhaltstyp heißt Car Brand).
Zusätzliche Felder zu unserem Inhaltstyp hinzufügen
Es gibt zwei Wege, diesen Schritt durchzuführen. Sie können die Benutzeroberfläche verwenden, um Felder zu erstellen und die Konfiguration zu exportieren, oder Sie schreiben die Dateien direkt selbst. Ich bevorzuge die erste Methode, um sicherzugehen, dass Sie nichts Wichtiges übersehen, aber die exportierten Felder beginnen mit „field_“ und nicht mit „foobar_car_brand_“, um sie mit unserem Inhaltstyp zu verknüpfen. Auf dieser Seite betrachten wir das manuelle Kodieren von Feldern in Ihrem benutzerdefinierten Modul.
Manuelles Kodieren von Feldern in Ihrem Modul
Wie bereits erwähnt, erfordert diese Methode etwas mehr Wissen und genaue Kenntnis darüber, was das Feld tun und wie es aussehen soll. Jedes hinzugefügte Feld benötigt zwei YAML-Dateien, die die Konfigurationsinformationen enthalten. Diese heißen: field.field.node.car_brand.field_brand_information.yml und field.storage.node.field_brand_information.yml.
Benutzerdefinierten Inhaltstyp deinstallieren
Falls Sie das Modul foobar bereits aktiviert haben (am Ende der vorherigen Seite), deinstallieren Sie es jetzt.
foobar/config/install/field.storage.node.field_brand_information.yml
Diese Datei teilt Drupal mit, dass es unser Feld erstellen soll.
# 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
Diese Datei teilt Drupal mit, dass unser Feld an den Inhaltstyp angehängt werden soll.
# 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
Beide Dateien müssen von der vorherigen Seite aktualisiert werden, um alle neuen Felder einzuschließen, die Sie hinzufügen. Ich habe zwei weitere Felder namens „Additional_field_1“ und „Additional_field_2“ hinzugefügt, damit Sie sehen, wie es mit mehreren Feldern aussieht.
Hinweis: Wenn Sie keine zusätzlichen Felder erstellen möchten, entfernen Sie die Abhängigkeiten und Informationen zu diesen Feldern im folgenden Code.
# 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: { }
Benutzerdefinierten Inhaltstyp aktivieren
Jetzt sollten Sie das Modul foobar aktivieren. Wenn Sie zur Seite "Inhalt erstellen" gehen, sehen Sie, dass Sie einen neuen Knoten des Inhaltstyps „Car Brand“ erstellen können, der unser neues Feld „Brand Information“ enthält.
Wir betrachten das Hinzufügen dieser Felder über die Benutzeroberfläche auf der nächsten Seite.