Como posso obter programaticamente o nome do tema?

8

No Drupal 8, existe uma maneira de descobrir qual tema você está usando atualmente em um módulo? Preciso obter o nome programaticamente no código de um módulo.

Diana
fonte

Respostas:

22

Usar o gerenciador de temas é a maneira correta do Drupal 8 de obter informações sobre o seu tema.

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

Uma regra geral no drupal 8 é procurar o serviço de gerente (/ manipulador).

** Nota: como Neograph734 apontou, \Drupal::service('theme.manager')->getActiveTheme()retornará o objeto de tema ativo . Se você deseja obter o tema nome da máquina, use\Drupal::service('theme.manager')->getActiveTheme()->getName()

Eyal
fonte
5
Observe que o nome do tema real pode ser derivado do ActiveTheme com getName(). Assim, para obter o nome do tema pode-se usar\Drupal::service('theme.manager')->getActiveTheme()->getName();
Neograph734
5

Isso fará isso:

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

Você sempre pode usar drush para explorar suas configurações disponíveis:

drush config-list

e

drush config-list system

me deu uma lista:

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

e depois pude verificar com o seguinte:

drush cget system.theme.global

e

drush cget system.theme

para finalmente descobrir que ele possui uma defaultpropriedade que foi o que você pediu.

Stefanos Petrakis
fonte
4
Esta resposta retorna o tema padrão. O OP solicitou o tema atual e a resposta aceita retorna o tema atual. Normalmente, isso não importa, mas se houver um módulo que selecione dinamicamente um tema, dependendo da página / domínio / usuário etc., a diferença será importante.
Adams
11
É verdade que, se houver um negociador de tema personalizado em jogo, os resultados serão diferentes. Se não, então a getActiveTheme()função irá acabar voltando exatamente o mesmo: $this->configFactory->get('system.theme')->get('default')
Stefanos Petrakis
1
  1. se você deseja administration themeincluir o nome do tema ativo real, use:

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

  1. se você quiser que o tema selecionado padrão theme used in frontnão seja admistartion themeUse:

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

berramou
fonte
0

Encontrei via Drupal 8 abaixo

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