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
20/06/2025, by Ivan

Menu

Ahora digamos que queremos permitir al constructor del sitio introducir parte de la configuración para cada instancia de nuestro bloque personalizado. Siempre tenga en cuenta que toda la configuración del constructor del sitio en Drupal 8 puede exportarse desde el sitio de desarrollo e importarse al sitio en producción (conocido como Gestión de configuración). Usted, como ensamblador de módulos, también puede proporcionar configuración por defecto para rellenar automáticamente el formulario cuando el creador del sitio crea un nuevo bloque.

En la clase HelloBlock existente de la página anterior, agregue estas declaraciones use después de las ya existentes:

use Drupal\Core\Block\BlockPluginInterface;
use Drupal\Core\Form\FormStateInterface;

Actualice la declaración de la clase para incluir esta nueva interfaz "implements BlockPluginInterface":

class HelloBlock extends BlockBase implements BlockPluginInterface {

Luego agregue el siguiente método a la clase. Un archivo similar completo está disponible, pero tenga en cuenta que el nombre del formulario y los nombres de configuración no coinciden con esta guía.

Este código solo añadirá el formulario, el procesamiento y guardado de resultados seguirán en páginas posteriores.

  /**
   * {@inheritdoc}
   */
  public function blockForm($form, FormStateInterface $form_state) {
    $form = parent::blockForm($form, $form_state);

    $config = $this->getConfiguration();

    $form['hello_block_name'] = [
      '#type' => 'textfield',
      '#title' => $this->t('Quién'),
      '#description' => $this->t('¿A quién quieres saludar?'),
      '#default_value' => isset($config['hello_block_name']) ? $config['hello_block_name'] : '',
    ];

    return $form;
  }

En este ejemplo, el formulario primero se define invocando a su clase padre con la instrucción $form = parent::blockForm($form, $form_state); Luego agregamos un nuevo campo al formulario. Este proceso se llama polimorfismo y es una de las grandes ventajas de usar métodos en programación orientada a objetos (POO).

Luego debemos indicarle a Drupal que guarde los valores del formulario en la configuración para esta instancia del bloque. Aquí hay un ejemplo:

  /**
   * {@inheritdoc}
   */
  public function blockSubmit($form, FormStateInterface $form_state) {
    parent::blockSubmit($form, $form_state);
    $values = $form_state->getValues();
    $this->configuration['hello_block_name'] = $values['hello_block_name'];
  }

Para ver el formulario, vaya a la instancia añadida previamente en admin->Estructura->Disposición de bloques y haga clic en Configurar para el bloque (Hello World).

Para añadir más, puede enviar el mismo formulario así:

  /**
   * {@inheritdoc}
   */
  public function blockForm($form, FormStateInterface $form_state) {
    $form = parent::blockForm($form, $form_state);

    $config = $this->getConfiguration();

    $form['hello_block_name'] = [
      '#type' => 'textfield',
      '#title' => $this->t('Quién'),
      '#description' => $this->t('¿A quién quieres saludar?'),
      '#default_value' => isset($config['hello_block_name']) ? $config['hello_block_name'] : '',
    ];

    $form['actions']['custom_submit'] = [
      '#type' => 'submit',
      '#name' => 'custom_submit',
      '#value' => $this->t('Envío personalizado'),
      '#submit' => [[$this, 'custom_submit_form']],
    ];    

    return $form;
  }

Nueva acción de envío personalizada:

  /**
   * Acciones de envío personalizadas.
   */
  public function custom_submit_form($form, FormStateInterface $form_state) {
    $values = $form_state->getValues();
    // Realice las acciones necesarias.
  }