Wie kann ich den Themennamen programmgesteuert abrufen?

8

Gibt es in Drupal 8 eine Möglichkeit, herauszufinden, welches Thema Sie derzeit in einem Modul verwenden? Ich muss den Namen programmgesteuert im Code eines Moduls finden.

Diana
quelle

Antworten:

21

Die Verwendung des Themenmanagers ist die richtige Drupal 8-Methode, um Informationen zu Ihrem Thema abzurufen.

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

Eine allgemeine Regel in Drupal 8 ist die Suche nach dem Manager (/ Handler) -Dienst.

** Hinweis: Wie Neograph734 hervorhob , \Drupal::service('theme.manager')->getActiveTheme()wird das aktive Designobjekt zurückgegeben . Wenn Sie den Maschinennamen des Themas erhalten möchten, verwenden Sie\Drupal::service('theme.manager')->getActiveTheme()->getName()

Eyal
quelle
5
Beachten Sie, dass der tatsächliche Themenname von ActiveTheme mit abgeleitet werden kann getName(). Um den Namen des Themas zu erhalten, würde man verwenden\Drupal::service('theme.manager')->getActiveTheme()->getName();
Neograph734
5

Dies wird es tun:

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

Sie können jederzeit Drush verwenden, um Ihre verfügbaren Konfigurationen zu erkunden:

drush config-list

und

drush config-list system

gab mir eine Liste:

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

und dann könnte ich mit folgendem prüfen:

drush cget system.theme.global

und

drush cget system.theme

um endlich herauszufinden, dass es eine defaultImmobilie enthält, nach der Sie gefragt haben.

Stefanos Petrakis
quelle
4
Diese Antwort gibt das Standardthema zurück. Das OP hat nach dem aktuellen Thema gefragt, und die akzeptierte Antwort gibt das aktuelle Thema zurück. Normalerweise spielt es keine Rolle, aber wenn es ein Modul gibt, das ein Thema abhängig von Seite / Domäne / Benutzer usw. dynamisch auswählt, ist der Unterschied wichtig.
AdamS
1
Wenn ein benutzerdefinierter Themenverhandler im Spiel ist, unterscheiden sich die Ergebnisse. Wenn nicht, wird die getActiveTheme()Funktion am Ende genau das gleiche zurückgeben: $this->configFactory->get('system.theme')->get('default')
Stefanos Petrakis
1
  1. Wenn Sie den tatsächlichen Namen des aktiven Themas erhalten möchten, verwenden administration themeSie:

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

  1. Wenn Sie möchten, dass Ihr standardmäßig ausgewähltes Thema theme used in frontnicht admistartion themeverwendet wird:

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

berramou
quelle
0

Ich fand über unten in Drupal 8

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