Pregunta:
Desde Drupal 8, con las convenciones de nomenclatura de plantillas no es posible cargar una plantilla de bloque específica de acuerdo con la región en la que se coloca ( "Se eliminó el marcado de bloque por región y la función de plantilla de bloque por región" ). Pero necesito tener un html diferente para los bloques si se colocan en una región determinada. ¿Cómo logro esto?
He pensado en usar MYMODULE_theme_suggestions_block_alter pero no sé cómo obtener la región actual.
Respuesta:
Puede obtener la región si obtiene Block Entity.
.module o archivo .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;
}
Edición 1: Caso del módulo Cover page_manager.