Créer un bloc Drupal 8 en quelques secondes

Photo d'un pic rocheux

Nous continuons à explorer les possibilités offertes par le module Console et allons découvrir comment générer un bloc Drupal 8 en très peu de temps.

Si vous n'avez pas encore installé console, je vous invite à consulter ce billet Créer un module Drupal 8 en 30 secondes.

Nous allons générer un bloc qui va nous permettre d'afficher un texte de bienvenue et le nom de l'utilisateur connecté. Executons la commande suivante

cd /path/to/drupal8folder
bin/console generate:plugin:block

 

Comme vous l'aurez remarqué, les blocs sous Drupal 8 sont désormais des plugins. Et de ce fait nous générons un plugin de type Block.

Génération d'un bloc Durpal 8

Comme toujours, nous devons indiquer dans quel module nous allons générer le code correspondant (dans notre exemple, notre module s'intitule example, original hein ?).

Puis nous définissons respectivement le nom du bloc, son label et son identifiant. Nous avons également la possibilité d'associer un formulaire à ce bloc qui va nous permettre de lui associer des champs spécifiques. Dans notre exemple, nous créons un champ texte qui contiendra le message de bienvenue.

Notre commande va générer un fichier situé dans le répertoire src/Plugin/Block et intitulé CurrentUser.php. Consultons le code généré.

 /**
 * @file
 * Contains Drupal\example\Plugin\Block\CurrentUser.
 */

namespace Drupal\example\Plugin\Block;

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

/**
 * Provides a 'CurrentUser' block.
 *
 * @Block(
 *  id = "current_user",
 *  admin_label = @Translation("current_user")
 * )
 */
class CurrentUser extends BlockBase {

  /**
   * {@inheritdoc}
   */
  public function build() {
    return [
      '#markup' => 'current_user',
    ];
  }

  /**
   * Overrides \Drupal\block\BlockBase::blockForm().
   */
  public function blockForm($form, FormStateInterface $form_state) {
    $form['welcome_text'] = [
      '#type' => 'textfield',
      '#title' => $this->t('Welcome text'),
      '#description' => $this->t(''),
      '#default_value' => isset($this->configuration['welcome_text']) ? $this->configuration['welcome_text'] : '',
    ];
    return $form;
  }

  /**
   * Overrides \Drupal\block\BlockBase::blockSubmit().
   */
  public function blockSubmit($form, FormStateInterface $form_state) {
    $this->configuration['welcome_text'] = $form_state->getValue('welcome_text');
  }
} 

Nous pouvons modifier la fonction build() afin de récupérer le compte de l'utilisateur connecté et pour afficher notre message de bienvenue que nous pourrons configurer dans les paramètres de notre bloc.

   public function build() {
    // Fetch current user.
    $account = \Drupal::currentUser();
    return [
      '#markup' => t('@welcome @username',
        array(
          '@welcome' => $this->configuration['welcome_text'],
          '@username' => user_format_name($account)
        )
      ),
    ];
  } 

Et il ne nous reste plus qu'à instancier notre bloc depuis la page d'administration et de le positionner par exemple dans la première barre latérale.

Page d'administration des blocs Drupal 8

 

Configuration d'un bloc Drupal 8

Et notre résultat

Affichage d'un bloc Drupal 8 personnalisé

Diablement efficace, vous ne trouvez pas ? Cela se passe presque de commentaires, mais n'hésitez pas.

Ajouter un commentaire