Programmation de champs personnalisés dans votre type de contenu
Parfois, lorsque vous extrayez un type de contenu depuis un module personnalisé, vous pouvez également ajouter des champs liés à ce type de contenu. La possibilité de créer automatiquement ces champs vous permet de supprimer et réinstaller sur plusieurs sites sans laisser de champs inutiles et en garantissant que vous n’oublierez pas de les ajouter. Il existe deux façons d’ajouter ces champs dans votre base de code, que nous allons examiner.
Pré-requis
- Drupal 8.0.x installé.
- Avoir un module personnalisé (le nom du module utilisé ici est foobar).
- Avoir un type de contenu personnalisé dans ce module (suivez les instructions sur la page parente. Le nom du type de contenu sera Car Brand).
Ajouter des champs supplémentaires à notre type de contenu
Il y a deux méthodes pour cette étape. Vous pouvez utiliser l’interface utilisateur pour créer des champs et exporter la configuration dans des fichiers, ou vous pouvez écrire les fichiers vous-même. Je préfère la première méthode pour ne rien oublier, mais les champs exportés commencent par « field_ » et non par « foobar_car_brand_ », ce qui ne les lie pas directement à notre type. Ici, nous verrons la méthode manuelle en codant les champs dans votre module personnalisé.
Coder manuellement les champs dans votre module
Cette méthode requiert plus de connaissances et une bonne maîtrise de ce que doit faire le champ. Chaque champ ajouté doit avoir deux fichiers YAML de configuration :
field.storage.node.field_brand_information.yml
: définit le stockage du champ.field.field.node.car_brand.field_brand_information.yml
: attache le champ au type de contenu.
Supprimer le type de contenu personnalisé
Si vous avez activé le module foobar précédemment, désactivez-le maintenant.
foobar/config/install/field.storage.node.field_brand_information.yml
Ce fichier informe Drupal de la création du champ :
# 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
Ce fichier attache le champ au type de contenu Car Brand :
# 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
Ces deux fichiers doivent être mis à jour pour inclure tous les nouveaux champs ajoutés. J’ai ajouté deux champs supplémentaires nommés « Additional_field_1 » et « Additional_field_2 » pour illustrer plusieurs champs.
Note : si vous ne souhaitez pas créer ces champs additionnels, supprimez leurs dépendances et références dans le code ci-dessous.
# 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: { }
Activer le type de contenu personnalisé
Activez maintenant le module foobar. Si vous allez sur la page de création de contenu, vous pourrez créer un nouveau nœud de type « Car Brand » avec le champ « Brand Information ».
Nous verrons l’ajout de ces champs via l’interface utilisateur sur la page suivante.