Bagaimana saya bisa mendapatkan nama tema secara terprogram?


8

Di Drupal 8, apakah ada cara untuk mengetahui tema apa yang saat ini Anda gunakan dalam sebuah modul? Saya perlu mendapatkan nama secara program dalam kode modul.

Jawaban:


22

Menggunakan theme manager adalah cara Drupal 8 yang tepat untuk mendapatkan informasi tentang tema Anda.

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

Aturan umum dalam drupal 8 adalah mencari layanan manajer (/ penangan).

** Catatan: seperti yang ditunjukkan Neograph734 , \Drupal::service('theme.manager')->getActiveTheme()akan mengembalikan objek tema yang aktif . Jika Anda ingin mendapatkan nama mesin tema lalu gunakan\Drupal::service('theme.manager')->getActiveTheme()->getName()


5
Perhatikan bahwa nama tema aktual dapat diturunkan dari ActiveTheme with getName(). Jadi untuk mendapatkan nama tema yang akan digunakan\Drupal::service('theme.manager')->getActiveTheme()->getName();
Neograph734

5

Ini akan melakukannya:

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

Anda selalu dapat menggunakan drush untuk menjelajahi konfigurasi yang tersedia:

drush config-list

dan

drush config-list system

memberi saya daftar:

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

dan kemudian saya bisa memeriksa dengan yang berikut:

drush cget system.theme.global

dan

drush cget system.theme

untuk akhirnya mengetahui bahwa ia memiliki defaultproperti yang Anda minta.


4
Jawaban ini mengembalikan tema default. OP meminta tema saat ini, dan jawaban yang diterima mengembalikan tema saat ini. Biasanya itu tidak masalah, tetapi jika ada modul yang secara dinamis memilih tema tergantung pada halaman / domain / pengguna dll maka perbedaan itu penting.
AdamS

1
Benar, jika ada negosiator tema khusus dalam permainan, hasilnya akan berbeda. Jika tidak, maka getActiveTheme()fungsinya akan kembali persis sama: $this->configFactory->get('system.theme')->get('default')
Stefanos Petrakis

1
  1. jika Anda ingin administration themememasukkan nama tema aktif aktual, gunakan Gunakan:

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

  1. jika Anda ingin tema yang dipilih default Anda theme used in fronttidak admistartion themeGunakan:

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


0

Saya temukan melalui cara di bawah ini di Drupal 8

$theme = \Drupal::theme()->getActiveTheme();
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.