¿Cómo puedo obtener programáticamente el nombre del tema?

8

En Drupal 8, ¿hay alguna forma de averiguar qué tema está utilizando actualmente en un módulo? Necesito obtener el nombre mediante programación dentro del código de un módulo.

Diana
fuente

Respuestas:

22

Usar el administrador de temas es la forma correcta de Drupal 8 de obtener información sobre su tema.

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

Una regla general en drupal 8 es buscar el servicio de administrador (/ controlador).

** Nota: como señaló Neograph734 , \Drupal::service('theme.manager')->getActiveTheme()devolverá el objeto de tema activo . Si desea obtener el nombre de la máquina del tema, use\Drupal::service('theme.manager')->getActiveTheme()->getName()

Eyal
fuente
55
Tenga en cuenta que el nombre del tema real puede derivarse del ActiveTheme con getName(). Entonces, para obtener el nombre del tema, uno usaría\Drupal::service('theme.manager')->getActiveTheme()->getName();
Neograph734
5

Esto lo hará:

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

Siempre puedes usar drush para explorar tus configuraciones disponibles:

drush config-list

y

drush config-list system

me dio una lista:

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

y luego pude verificar con lo siguiente:

drush cget system.theme.global

y

drush cget system.theme

para finalmente descubrir que tiene una defaultpropiedad que fue lo que solicitó.

Stefanos Petrakis
fuente
44
Esta respuesta devuelve el tema predeterminado. El OP solicitó el tema actual y la respuesta aceptada devuelve el tema actual. Normalmente no importará, pero si hay un módulo que selecciona dinámicamente un tema dependiendo de la página / dominio / usuario, etc., entonces la diferencia es importante.
AdamS
1
Es cierto que si hay un negociador de tema personalizado en juego, los resultados serán diferentes. Si no, entonces la getActiveTheme()función terminará devolviendo exactamente lo mismo: $this->configFactory->get('system.theme')->get('default')
Stefanos Petrakis
1
  1. si desea obtener el nombre del tema activo real administration themeincluido Use:

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

  1. si desea que su tema seleccionado por defecto theme used in frontno admistartion themeUso:

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

berramou
fuente
0

Encontré a continuación en Drupal 8

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