したがって、Drupal 7モジュールをDrupal 8に移植し、 "NAME_preprocess_block"メソッドを変換する方法に苦労しています。D7コードでは、ブロックがレンダリングされる領域でフィルタリングします
if ($vars['elements']['#block']->region == "my_region") {
// Do stuff.
}
ただし、「['#block']-> region」オブジェクトはdrupal 8に存在せず、代替を見つけることができないようです。これを行うことはまだ可能ですか? ?
ありがとう!
ブロックをロードする必要があります(心配しないでください。すでにロードされているため、パフォーマンスへの影響はありません)。
$block = entity_load('block', $variables['elements']['#id']);
$region = $block->region;
したがって、ここですべてを機能させることが、私が機能させるコードです。
use Drupal\block\Entity\Block;
/**
* Implements hook_preprocess_block().
*/
function harfang_preprocess_block(&$variables) {
$block = Block::load($variables['elements']['#id']);
$region = $block->getRegion();
// Add classes to all bocks in footer region.
if($region == 'footer') {
// Do something.
}
}
先頭に使用ステートメントを追加し、非結合者を削除しました
drupal 8.2.xの場合、上記の提案は機能しなくなりました。
function MODULENAME_preprocess_block(&$variables ){
$region = $variables['elements']['#configuration']['region'];
if($region == "my_region"){
//Do stuff
}
}
.theme
を使用してTHEMENAME_preprocess_block
ファイル内に実装することもできます
[〜#〜] note [〜#〜]context
モジュールが有効(!?)の場合にのみ、モジュール前処理関数で構成領域を使用できるようです(そうでない場合、領域はテーマ前処理機能で利用可能
ここでDrupal 8.xの正しいバージョン:
$block = \Drupal\block\Entity\Block::load('block', $variables['elements']['#id']);
$region = $block->getRegion();