ページリクエストごとにサイドバーのブロックの重みを変更したいので、リクエストごとにブロックの位置が変更されます。
それを行う方法はありますか?
Drupal 8は、リージョンを変更するフックを提供しています template_preprocess_region 、theme_regionに値を準備します。THEMENAME.themeファイルに次のコードを追加すると、問題が解決します。
function themename_preprocess_region(&$variables) {
if ($variables['region'] == 'sidebar_second') {
$variables['elements'] = shuffle_assoc($variables['elements']);
$content = '';
foreach ($variables['elements'] as $key => $value) {
if (is_array($variables['elements'][$key])) {
$content .= \Drupal::service ('renderer')->render($value);
}
}
$variables['content'] = array(
'#markup' => $content,
);
}
}
function shuffle_assoc($list) {
if (!is_array($list)) {
return $list;
}
$keys = array_keys($list);
shuffle($keys);
$random = array();
foreach ($keys as $key) {
$random[$key] = $list[$key];
}
return $random;
}
詳細は こちら を確認してください
Drupal 7の場合、 hook_block_list_alter のようなものを使用して、ページ上のブロックを変更できます。何かを使用することもできます like that これを機能させるために。
または、Drupal 8の場合も同様です。これらのブロックに表示しているものをすべて含む(ブロック)ビューを1つのブロックに作成し、randonlyで並べ替えることができます。