Как программно получить название темы?

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
Этот ответ возвращает тему по умолчанию. ОП запрашивает текущую тему, а принятый ответ возвращает текущую тему. Обычно это не имеет значения, но если есть модуль, который динамически выбирает тему в зависимости от страницы / домена / пользователя и т. Д., Тогда разница важна.
AdamS
1
Правда, если в игре присутствует пользовательский переговорщик тем, результаты будут отличаться. Если нет, то getActiveTheme()функция в конечном итоге вернет точно то же самое: $this->configFactory->get('system.theme')->get('default')
Стефанос Петракис
1
  1. если вы хотите получить актуальное имя активной темы, administration themeиспользуйте:

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

  1. если вы хотите, чтобы выбранная вами тема по умолчанию theme used in frontне admistartion themeиспользовалась:

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

berramou
источник
0

Я нашел через ниже путь в Drupal 8

$theme = \Drupal::theme()->getActiveTheme();
Анкит Шах
источник