次のマルチサイト設定があるとします。
$sites['hello-world-a.com'] = 'a';
$sites['stage.hello-world-a.com'] = 'a';
$sites['dev.hello-world-a.com'] = 'a';
$sites['hello-world-a.localhost'] = 'a';
$sites['hello-world-b.com'] = 'b';
$sites['stage.hello-world-b.com'] = 'b';
$sites['dev.hello-world-b.com'] = 'b';
$sites['hello-world-b.localhost'] = 'b';
正常に動作します。どちらも同じテーマを共有し、多かれ少なかれ同じ機能を共有しています。ここで、本文にCSSクラスを追加する非常に単純な前処理関数があるとします。
/**
* Implements template_preprocess_html().
*/
function MYTHEME_preprocess_html(&$variables) {
$variables['attributes']['class'][] = 'foo';
}
/**
* Implements template_preprocess_html().
*/
function MYTHEME_preprocess_html(&$variables) {
$variables['attributes']['class'][] = 'foo';
// Basically along the following pattern.
if ( @@@ SITE A @@@ ) {
$variables['attributes']['class'][] = @@@ SITE A @@@;
}
}
現在の DrupalKernel::findSitePath
を使用して一致するマルチサイトディレクトリのパスを返す $request
について教えてくれた@Cliveに感謝します。
そして、そのための service もあるというヒントを@ 4k4に感謝します:
/**
* Implements template_preprocess_html().
*/
function MYTHEME_preprocess_html(&$variables) {
$site_path = \Drupal::service('site.path'); // e.g.: 'sites/default'
$site_path = explode('/', $site_path);
$site_name = $site_path[1];
$variables['attributes']['class'][] = 'site-' . $site_name;
}