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.
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.