web-dev-qa-db-fra.com

Comment faire une suggestion de crochet de thème pour les blocs selon la région?

Depuis Drupal 8, il n'est pas possible avec conventions de dénomination de modèle de charger un modèle de bloc en fonction de la région dans laquelle il est placé ( "Marquage de bloc par région et fonction de modèle de bloc par région supprimée" ). Mais je dois avoir html différent pour les blocs s'ils sont placés dans une certaine région. Comment faire?

J'ai pensé à utiliser MYMODULE_theme_suggestions_block_alter mais je ne sais pas comment obtenir la région actuelle.

14
Philipp Michael

Vous pouvez obtenir une région si vous obtenez une entité de blocage.

fichier. module ou .theme

use Drupal\block\Entity\Block;

function MODULE_theme_suggestions_block_alter(array &$suggestions, array $variables) {
  if (!empty($variables['elements']['#id'])) {
    $block = Block::load($variables['elements']['#id']);
    $suggestions[] = 'block__' . $block->getRegion() . '__' . $variables['elements']['#id'];
  }
  /* Use this 'else if' only if you are using page_manager module and want to know which region is the block */
  else if (isset($variables['elements']['#configuration']['region'])) {
    $suggestions[] = 'block__page_' . $variables['elements']['#configuration']['region'] . '__' . end(explode(':', $variables['elements']['#plugin_id']));
  }
  return $suggestions;
}

Edit 1: Cover case_manager module.

20
Vagner