web-dev-qa-db-ja.com

地域ごとにブロックのテーマフックの提案を行う方法は?

Drupal 8なので、テンプレートの命名規則では特定のをロードすることはできません)に応じたブロックテンプレートが配置されます( "リージョンごとのブロックマークアップとリージョンごとのブロックテンプレート機能が削除されました" )。しかし、特定の地域に配置されている場合、ブロックの異なるhtml。これを行うにはどうすればよいですか?

MYMODULE_theme_suggestions_block_alterを使用することを考えましたが、現在のリージョンを取得する方法がわかりません。

14
Philipp Michael

ブロックエンティティを取得すると、リージョンを取得できます。

。moduleまたは.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;
}

編集1: page_managerモジュールのケースをカバーします。

20
Vagner