Programación de campos personalizados en tu tipo de contenido
A veces, cuando extraes un tipo de contenido de un módulo personalizado, también puedes agregar campos relacionados con ese tipo de contenido. La capacidad de crear campos automáticamente te permite eliminar y reinstalar en varios sitios sin dejar campos sobrantes y garantiza que no olvides agregarlos. Hay dos formas de agregar estos campos a tu base de código, que veremos aquí.
Requisitos previos
- Drupal 8.0.x instalado.
- Tener un módulo personalizado (el nombre del módulo usado en este ejemplo es foobar).
- Tener un tipo de contenido personalizado en el módulo (Por favor, sigue las instrucciones en la página principal. El nombre del tipo de contenido será Car Brand).
Agregar campos adicionales a nuestro tipo de contenido
Hay dos formas de hacer este paso. Puedes usar la interfaz de usuario para crear campos y exportar la configuración a archivos, o puedes escribir los archivos manualmente. Me gusta usar la segunda opción aquí, para codificar manualmente los campos en tu módulo personalizado.
Codificación manual de campos en tu módulo
Como se mencionó antes, este método requiere un poco más de conocimiento y una idea clara de qué quieres que haga y cómo se vea el campo. Cada campo añadido debe tener dos archivos YAML que contienen la información de configuración. Se llaman así: field.field.node.car_brand.field_brand_information.yml y field.storage.node.field_brand_information.yml.
Eliminar el tipo de contenido personalizado
Si ya habilitaste el módulo foobar al final de la página anterior, procede a eliminarlo ahora.
foobar/config/install/field.storage.node.field_brand_information.yml
Este archivo indica a Drupal que debe crear nuestro campo.
# 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
Este archivo indica a Drupal que debe adjuntar nuestro campo a nuestro tipo de contenido.
# 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
Ambos archivos deben actualizarse desde la página anterior para incluir todos los campos nuevos que añadas. He agregado dos campos adicionales llamados “Additional_field_1” y “Additional_field_2” para que puedas ver cómo se vería con múltiples campos.
Nota. Si no deseas crear campos adicionales, elimina las dependencias e información para estos campos en el código siguiente.
# 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: { }
Habilitar el tipo de contenido personalizado
Ahora debes habilitar el módulo foobar. Si ahora vas a la página "Crear contenido", verás que puedes crear un nuevo nodo del tipo de contenido "Car Brand" y que incluirá nuestro nuevo campo llamado "Brand Information".
Veremos cómo agregar estos campos mediante la interfaz de usuario en la próxima página.
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.