logo

Extra Block Types (EBT) - Nueva experiencia con Layout Builder❗

Extra Block Types (EBT): tipos de bloques con estilo y personalizables: Presentaciones de diapositivas, Pestañas, Tarjetas, Acordeones y muchos más. Configuraciones integradas para fondo, DOM Box y plugins de JavaScript. Experimenta hoy el futuro de la construcción de diseños.

Módulos de demostración EBT Descargar módulos EBT

❗Extra Paragraph Types (EPT) - Nueva experiencia con Paragraphs

Extra Paragraph Types (EPT): conjunto de módulos basado en párrafos de forma análoga.

Módulos de demostración EPT Descargar módulos EPT

Scroll

Programación de campos personalizados en tu tipo de contenido

18/06/2025, by Ivan

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.