Comment obtenir par programmation le nom du thème?

8

Dans Drupal 8, existe-t-il un moyen de comprendre quel thème vous utilisez actuellement dans un module? J'ai besoin d'obtenir le nom par programme dans le code d'un module.

Diane
la source

Réponses:

22

Utiliser le gestionnaire de thèmes est le moyen approprié pour Drupal 8 d'obtenir des informations sur votre thème.

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

Une règle générale dans drupal 8 est de rechercher le service manager (/ handler).

** Remarque: comme l'a souligné Neograph734 , \Drupal::service('theme.manager')->getActiveTheme()retourne l' objet de thème actif . Si vous voulez obtenir le nom de la machine du thème, utilisez\Drupal::service('theme.manager')->getActiveTheme()->getName()

Eyal
la source
5
Notez que le nom du thème réel peut être dérivé de l'ActiveTheme avec getName(). Donc, pour obtenir le nom du thème, on utiliserait\Drupal::service('theme.manager')->getActiveTheme()->getName();
Neograph734
5

Cela le fera:

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

Vous pouvez toujours utiliser drush pour explorer vos configurations disponibles:

drush config-list

et

drush config-list system

m'a donné une liste:

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

puis je pourrais vérifier avec les éléments suivants:

drush cget system.theme.global

et

drush cget system.theme

pour enfin découvrir qu'il détient une defaultpropriété qui était ce que vous demandiez.

Stefanos Petrakis
la source
4
Cette réponse renvoie le thème par défaut. L'OP a demandé le thème actuel et la réponse acceptée renvoie le thème actuel. Normalement, cela n'a pas d'importance, mais s'il existe un module qui sélectionne dynamiquement un thème en fonction de la page / du domaine / de l'utilisateur, etc., la différence est importante.
AdamS
1
Certes, s'il y a un négociateur de thème personnalisé en jeu, les résultats seront différents. Sinon, la getActiveTheme()fonction finira par retourner exactement la même: $this->configFactory->get('system.theme')->get('default')
Stefanos Petrakis
1
  1. si vous voulez obtenir le nom du thème actif réel administration themeinclus Utilisez:

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

  1. si vous ne souhaitez theme used in frontpas admistartion themeutiliser le thème sélectionné par défaut :

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

berramou
la source
0

J'ai trouvé via ci-dessous dans Drupal 8

$theme = \Drupal::theme()->getActiveTheme();
Ankit Shah
la source