Jak mogę programowo uzyskać nazwę motywu?

8

Czy w Drupal 8 jest sposób, aby dowiedzieć się, jakiego motywu używasz obecnie w module? Muszę uzyskać nazwę programowo w kodzie modułu.

Diana
źródło

Odpowiedzi:

23

Korzystanie z menedżera motywów to właściwy sposób uzyskiwania informacji o motywie przez Drupal 8.

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

Ogólną regułą w drupal 8 jest poszukiwanie usługi manager (/ handler).

** Uwaga: jak wskazał Neograph734 , \Drupal::service('theme.manager')->getActiveTheme()zwróci aktywny obiekt motywu . Jeśli chcesz uzyskać nazwę maszyny-motywu, użyj\Drupal::service('theme.manager')->getActiveTheme()->getName()

Eyal
źródło
5
Zauważ, że faktyczną nazwę motywu można uzyskać z ActiveTheme za pomocą getName(). Aby uzyskać nazwę motywu, należy użyć\Drupal::service('theme.manager')->getActiveTheme()->getName();
Neograph734
5

To zrobi to:

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

Zawsze możesz użyć drush do eksploracji dostępnych konfiguracji:

drush config-list

i

drush config-list system

dał mi listę:

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

a następnie mogłem sprawdzić za pomocą:

drush cget system.theme.global

i

drush cget system.theme

aby w końcu dowiedzieć się, że posiada defaultwłaściwość, o którą prosiłeś.

Stefanos Petrakis
źródło
4
Te odpowiedzi zwracają domyślny motyw. OP poprosił o bieżący motyw, a zaakceptowana odpowiedź zwraca bieżący motyw. Zwykle nie ma to znaczenia, ale jeśli istnieje moduł, który dynamicznie wybiera motyw w zależności od strony / domeny / użytkownika itp., Różnica jest ważna.
AdamS,
1
To prawda, że ​​jeśli w grze jest niestandardowy negocjator motywów, wyniki będą się różnić. Jeśli nie, getActiveTheme()funkcja zwróci dokładnie to samo: $this->configFactory->get('system.theme')->get('default')
Stefanos Petrakis
1
  1. jeśli chcesz uwzględnić rzeczywistą nazwę aktywnego motywu administration themeUżyj:

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

  1. jeśli chcesz, aby domyślnie wybrany motyw theme used in frontnie był admistartion themeużywany:

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

berramou
źródło