プログラムでテーマ名を取得するにはどうすればよいですか?


8

Drupal 8では、モジュールで現在使用しているテーマを把握する方法はありますか?モジュールのコード内でプログラム的に名前を取得する必要があります。

回答:


22

テーママネージャーを使用することは、テーマに関する情報を取得する適切なDrupal 8の方法です。

\Drupal::service('theme.manager')->getActiveTheme()

drupal 8の一般的なルールは、マネージャー(/ handler)サービスを探すことです。

**注:Neograph734が指摘したように、\Drupal::service('theme.manager')->getActiveTheme()アクティブなテーマオブジェクトを返します。テーマのマシン名を取得したい場合は、\Drupal::service('theme.manager')->getActiveTheme()->getName()


5
実際のテーマ名は、を使用してActiveThemeから派生できることに注意してくださいgetName()。したがって、使用するテーマ名を取得するには\Drupal::service('theme.manager')->getActiveTheme()->getName();
Neograph734

5

これはそれを行います:

$config = \Drupal::config('system.theme');    
print $config->get('default');

いつでもdrushを使用して、使用可能な構成を探索できます。

drush config-list

そして

drush config-list system

リストをくれました:

...
system.rss
system.site
system.theme.global
system.theme
...

そして、私は以下で確認することができます:

drush cget system.theme.global

そして

drush cget system.theme

最後に、default要求したプロパティを保持していることを確認します。


4
これはデフォルトのテーマを返します。OPは現在のテーマを要求し、受け入れられた回答は現在のテーマを返します。通常は問題になりませんが、ページ/ドメイン/ユーザーなどに応じてテーマを動的に選択するモジュールがある場合、違いは重要です。
AdamS

1
確かに、カスタムテーマネゴシエーターがいる場合、結果は異なります。そうでない場合、getActiveTheme()機能はまったく同じ戻ってしまいます: $this->configFactory->get('system.theme')->get('default')
ステファノPetrakis

1
  1. 実際のアクティブなテーマ名をadministration theme含める場合は、次のように使用します。

 $activeThemeName = \Drupal::service('theme.manager')->getActiveTheme(); 

  1. デフォルトで選択したテーマtheme used in frontadmistartion theme使用しない 場合:

 $defaultThemeName = \Drupal::config('system.theme')->get('default');    


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.