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.

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()


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.


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');    


0

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

$theme = \Drupal::theme()->getActiveTheme();
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.