logo

Types de blocs supplémentaires (EBT) – Nouvelle expérience de Layout Builder❗

Types de blocs supplémentaires (EBT) – types de blocs stylisés et personnalisables : diaporamas, onglets, cartes, accordéons et bien d’autres. Paramètres intégrés pour l’arrière-plan, la boîte DOM, les plugins JavaScript. Découvrez dès aujourd’hui le futur de la création de mises en page.

Démo des modules EBT Télécharger les modules EBT

❗Types de paragraphes supplémentaires (EPT) – Nouvelle expérience Paragraphes

Types de paragraphes supplémentaires (EPT) – ensemble de modules basé sur les paragraphes analogiques.

Démo des modules EPT Télécharger les modules EPT

Défilement
05/07/2025, by Ivan

Menu

Maintenant, disons que nous voulons ajouter la possibilité pour le constructeur de site d'entrer une partie de la configuration pour chaque instance de notre bloc personnalisé. Gardez toujours à l'esprit que toutes les configurations de construction de site dans Drupal 8 peuvent être exportées depuis le site de développement et importées sur le site de production (connu sous le nom de Gestion de la configuration). Vous, en tant que créateur de modules, pouvez également fournir une configuration par défaut pour préremplir automatiquement le formulaire lorsque le créateur du site crée un nouveau bloc.

Dans la classe existante HelloBlock de la page précédente, ajoutez ces instructions « use » après celles déjà présentes :

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

Mettez à jour la déclaration de la classe pour inclure cette nouvelle interface "implémentation BlockPluginInterface" :

class HelloBlock extends BlockBase implements BlockPluginInterface {

Puis ajoutez la méthode suivante à la classe. Un fichier complet similaire se trouve ici, mais notez que le nom du formulaire et les noms de configuration ne correspondent pas à ce guide.

Ce code va seulement ajouter le formulaire, le traitement du formulaire et la sauvegarde des résultats suivront dans les pages suivantes.

  /**
   * {@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'),
      '#description' => $this->t('À qui voulez-vous dire bonjour ?'),
      '#default_value' => isset($config['hello_block_name']) ? $config['hello_block_name'] : '',
    ];

    return $form;
  }

Dans cet exemple, le formulaire est d'abord défini en appelant la méthode parente avec l'instruction de code suivante : $form = parent::blockForm($form, $form_state);. Ensuite, nous ajoutons un nouveau champ au formulaire. Ce processus est appelé polymorphisme et constitue un des avantages importants de l'utilisation des méthodes de la programmation orientée objet (POO).

Ensuite, nous devons indiquer à Drupal de sauvegarder les valeurs de notre formulaire dans la configuration de ce bloc. Voici un exemple :

  /**
   * {@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'];
  }

Pour voir le formulaire, allez à l'instance précédemment ajoutée dans admin-> Structure-> Disposition des blocs et cliquez sur Configurer pour le bloc (Hello World).

Pour ajouter plusieurs, envoyez-les au même formulaire.

  /**
   * {@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'),
      '#description' => $this->t('À qui voulez-vous dire bonjour ?'),
      '#default_value' => isset($config['hello_block_name']) ? $config['hello_block_name'] : '',
    ];

    $form['actions']['custom_submit'] = [
      '#type' => 'submit',
      '#name' => 'custom_submit',
      '#value' => $this->t('Envoi personnalisé'),
      '#submit' => [[$this, 'custom_submit_form']],
    ];    

    return $form;
  }

Nouvelle action d'envoi personnalisée :

  /**
   * Actions personnalisées à l'envoi.
   */
  public function custom_submit_form($form, FormStateInterface $form_state) {
    $values = $form_state->getValues();
    // Effectuer les actions requises.
  }