Des fois, vous avez besoin de modifier la méthode de construction ou d'autres méthodes de la classe de bloc créée par le noyau ou les modules contribués sans créer une autre classe et l'étendre, car cela dupliquerait le bloc au lieu de le remplacer.
Pour Drupal 9, vous pouvez utiliser hook_block_alter pour remplacer la classe du bloc en question, comme dans cet exemple de bloc de marque du système :

<?php

/**
 * Implements hook_block_alter().
 */
function MODULE_block_alter(&$definitions) {
  foreach ($definitions as $id => $definition) {
    // Check on your plugin Id here.
    if ($id === 'system_branding_block') {
      // Set your new class here.
      $definitions[$id]['class'] = 'Drupal\MODULE\Plugin\Block\SystemBrandingBlockAlter';
    }
  }
}

Et ensuite, créez votre nouvelle classe SystemBrandingBlockAlter dans MODULE/src/Plugin/Block comme ceci :

<?php

<?php

namespace Drupal\MODULE\Plugin\Block;

use Drupal\system\Plugin\Block\SystemBrandingBlock;

/**
 * Provides a block to display 'Site branding' elements altered.
 */
class  SystemBrandingBlockAlter extends SystemBrandingBlock {
  
  /**
   * {@inheritdoc}
   */
  public function build() {
    // This is the build method called now you can make your changes here.
    $build = [];
    $site_config = $this->configFactory->get('system.site');
    
    $build['site_slogan'] = [
      '#markup' => $site_config->get('slogan'),
      '#access' => $this->configuration['use_site_slogan'],
    ];
    return $build;
  }
  
}

Et vous avez réussi ✔️ après avoir effacé le cache, Drupal choisira votre classe au lieu de celle d'origine.

Vous avez un projet ? Contactez-nous pour en parler davantage : Contact

Auteur : Azz-eddine BERRAMOU

Share this article: