Come posso ottenere a livello di codice il nome del tema?


8

In Drupal 8, c'è un modo per capire quale tema stai attualmente usando in un modulo? Devo ottenere il nome a livello di codice all'interno del codice di un modulo.

Risposte:


22

L'utilizzo del gestore del tema è il modo Drupal 8 corretto per ottenere informazioni sul tema.

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

Una regola generale in drupal 8 è cercare il servizio manager (/ handler).

** Nota: come sottolineato da Neograph734 , \Drupal::service('theme.manager')->getActiveTheme()verrà restituito l' oggetto tema attivo . Se vuoi ottenere il tema nome-macchina, allora usa\Drupal::service('theme.manager')->getActiveTheme()->getName()


5
Si noti che il nome del tema effettivo può essere derivato da ActiveTheme con getName(). Quindi, per ottenere il nome del tema si dovrebbe usare\Drupal::service('theme.manager')->getActiveTheme()->getName();
Neograph734,

5

Questo lo farà:

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

Puoi sempre usare drush per esplorare le tue configurazioni disponibili:

drush config-list

e

drush config-list system

mi ha dato un elenco:

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

e quindi ho potuto verificare con quanto segue:

drush cget system.theme.global

e

drush cget system.theme

per scoprire finalmente che possiede una defaultproprietà che era quello che hai chiesto.


4
Questa risposta restituisce il tema predefinito. L'OP ha richiesto il tema corrente e la risposta accettata restituisce il tema corrente. Normalmente non importa, ma se esiste un modulo che seleziona dinamicamente un tema in base alla pagina / dominio / utente ecc. Allora la differenza è importante.
AdamS,

1
È vero, se c'è un negoziatore di temi personalizzato in gioco, i risultati differiranno. In caso contrario, la getActiveTheme()funzione finirà per restituire esattamente lo stesso: $this->configFactory->get('system.theme')->get('default')
Stefanos Petrakis,

1
  1. se si desidera administration themeincludere il nome effettivo del tema attivo

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

  1. se si desidera che il tema selezionato predefinito theme used in frontnon sia admistartion themeutilizzato:

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


0

Ho trovato via sotto in Drupal 8

$theme = \Drupal::theme()->getActiveTheme();
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.