Periksa apakah tema diaktifkan secara program


9

Bagaimana saya bisa mengecek untuk melihat apakah tema diaktifkan pada instalasi drupal? Saya mencari sesuatu seperti module_exists () tetapi untuk tema. Saya tidak dapat menemukan apa pun di dokumentasi.

Jawaban:


6

Gunakan list_themes

Parameter

$ refresh : Apakah akan memuat ulang daftar tema dari database. Default ke FALSE.

Nilai pengembalian

Array asosiatif dari tema yang saat ini tersedia. Kuncinya adalah nama mesin tema dan nilainya adalah objek yang memiliki properti berikut:

  • nama file : Nama file dan nama file .info.
  • nama : Nama mesin tema.
  • status : 1 untuk diaktifkan, 0 untuk tema yang dinonaktifkan.
  • info : Isi file .info.
  • stylesheet : Array dua dimensi, menggunakan kunci pertama untuk atribut media (misalnya 'semua'), yang kedua untuk nama file (misalnya style.css). Nilainya adalah filepath lengkap (misalnya tema / bartik / style.css). Tidak disetel jika tidak ada stylesheet yang ditentukan dalam file .info.
  • skrip : Array asosiatif dari JavaScripts, menggunakan nama file sebagai kunci dan filepath lengkap sebagai nilai. Tidak disetel jika tidak ada skrip yang ditentukan dalam file .info.
  • awalan : Awalan mesin tema dasar.
  • engine : Nama mesin dari theme engine.
  • base_theme : Jika ini adalah sub-tema, nama mesin dari tema dasar yang didefinisikan dalam file .info. Jika tidak, elemen tidak disetel.
  • base_themes : Jika ini adalah sub-tema, array asosiatif dari leluhur tema-dasar dari tema ini, dimulai dengan tema dasar tema ini, kemudian tema dasar sendiri tema dasar, dll. Setiap entri memiliki kunci larik yang sama dengan tema nama mesin, dan nilai yang setara dengan nama tema yang bisa dibaca manusia; jika tema dengan nama mesin yang cocok tidak ada dalam sistem, nilainya akan menjadi NULL (dan karena sistem tidak akan tahu apakah tema itu sendiri memiliki tema dasar, yang akan mengakhiri array tema dasar). Ini tidak disetel jika tema bukan merupakan sub-tema.
  • sub_themes : Array asosiatif tema pada sistem yang merupakan sub-tema langsung (yaitu, mereka menyatakan tema ini sebagai tema dasar mereka), sub-tema langsung dari sub-tema, dll. Kuncinya adalah mesin tema ' nama, dan nilai adalah nama yang dapat dibaca manusia dari tema. Elemen ini tidak disetel jika tidak ada tema pada sistem yang menyatakan tema ini sebagai tema dasarnya.

Gunakan path_to_theme untuk mendapatkan tema aktif ..

Ini dapat menunjuk ke tema aktif atau modul yang menangani implementasi bertema. Misalnya, ketika dipanggil dalam lingkup panggilan tema, itu akan tergantung pada di mana fungsi tema ditangani. Jika diimplementasikan dari modul, itu akan menunjuk ke modul. Jika diterapkan dari tema aktif, itu akan menunjuk ke tema aktif. Ketika dipanggil di luar lingkup panggilan tema, itu akan selalu mengarah ke tema aktif.


3

Data sebenarnya disimpan di tempat yang persis sama, yaitu systemtabel. Saya tidak dapat menemukan fungsi yang ada untuk memeriksa (walaupun mungkin ada satu di suatu tempat), tetapi ini harus dilakukan dalam keadaan darurat:

function theme_exists($theme_name) {
  $themes = list_themes();
  return isset($themes[$theme_name]) && $themes[$theme_name]->status == 1;
}

1
Saya baru saja selesai mengetik persis hal yang sama -_- meskipun saya mungkin tidak akan memanggil fungsi theme_existshanya untuk menghindari masalah yang mungkin dengan sistem tema
Chapabu

1
list_themes () sudah melakukan caching statis, jadi mungkin tidak perlu untuk itu dalam fungsi ini.
Letharion

1
@ Chapabu Saya suka membuat sesuatu ... menarik;)
Clive

@Letharion Maaf baru saja mengerti maksud Anda, akan menghapus bagian itu
Clive

1
Saya tidak bermaksud bahwa fungsi ini tidak perlu, saya pikir itu hebat. Saya merujuk pada pernyataan Anda sendiri bahwa itu bisa diperbaiki dengan caching, yang saya pikir tidak akan membantu dalam hal ini.
Letharion
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.