Pulog

Drupal 8, 9で使用しているテーマのディレクトリをプログラム側で取得

Drupal 8, 9で現在使用しているThemeディレクトリを以下のようにすることでPHP側で取得することができます。

あまりパスをベタ書きするのが個人的によく思えず、プログラム側でいい感じに取得できないか調べてみたところ、ありました。

<?php
// 使用しているテーマ名が custom ディレクトリにある pu10g と仮定して
$themeDir = '/' . \Drupal::theme()->getActiveTheme()->getPath();
echo $themeDir; // /theme/custom/pu10g

使用していないテーマのディレクトリも ThemeHandler から取得することができます。

<?php
$themeHandler = \Drupal::service('theme_handler');
$themeHandler->getTheme('{theme name}')->getPath();

ThemeHandler | ThemeHandler.php | Drupal 9.0.x | Drupal API

以下は、同じ結果が出力されます。

<?php
$themeHandler = \Drupal::service('theme_handler');
echo '/' . $handler->getTheme($handler->getDefault())->getPath(); // /theme/custom/pu10g
echo '/' . \Drupal::theme()->getActiveTheme()->getPath(); // /theme/custom/pu10g