Як я можу програмно отримати назву теми?


8

У Drupal 8 чи є спосіб зрозуміти, яку тему ви зараз використовуєте в модулі? Мені потрібно отримати ім’я програмно в коді модуля.

Відповіді:


23

Використання менеджера тем - це правильний Drupal 8 спосіб отримання інформації про вашу тему.

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

Загальним правилом для drupal 8 є пошук послуги менеджера (/ обробника).

** Примітка: як зазначав 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');    

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.