¿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.

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()


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ó.


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');    


0

Encontré a continuación en Drupal 8

$theme = \Drupal::theme()->getActiveTheme();
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.