Temanın programlı olarak etkinleştirilip etkinleştirilmediğini kontrol edin


9

Bir drupal kurulumunda bir temanın etkin olup olmadığını nasıl kontrol edebilirim? Module_exists () gibi bir şey arıyorum ama temalar için. Dokümanlarda hiçbir şey bulamadım.

Yanıtlar:


6

List_themes kullanın

Parametreler

$ refresh : Tema listesinin veritabanından yeniden yüklenip yüklenmeyeceği. Varsayılan değer FALSE.

Geri dönüş değeri

Şu anda mevcut temaların ilişkilendirilebilir bir dizisi. Anahtarlar, temaların makine adlarıdır ve değerler aşağıdaki özelliklere sahip nesnelerdir:

  • dosyaadı : .info dosyasının dosya yolu ve adı.
  • name : Temanın makine adı.
  • durum : etkin için 1, devre dışı bırakılmış temalar için 0.
  • info : .info dosyasının içeriği.
  • stil sayfaları : Medya özniteliği için ilk anahtarı (ör. 'all'), dosyanın adı için ikinci anahtarı (ör. style.css) kullanan iki boyutlu bir dizi. Değer tam bir dosya yoludur (örn. Temalar / bartik / style.css). .İnfo dosyasında tanımlanmış stil sayfaları yoksa ayarlanmaz.
  • komut dosyaları : Dosya adını anahtar olarak ve tam dosya yolunu değer olarak kullanan JavaScripts'in ilişkilendirilebilir bir dizisidir. .İnfo dosyasında herhangi bir komut dosyası tanımlanmadıysa ayarlanmaz.
  • önek : Temel tema motoru öneki.
  • motor : Tema motorunun makine adı.
  • base_theme : Bu bir alt tema ise, .info dosyasında tanımlanan temel temanın makine adı. Aksi takdirde, öğe ayarlanmamıştır.
  • base_themes : Bu bir alt tema ise, bu temanın temel teması atalarının ilişkilendirilebilir bir dizisi, bu temanın temel teması, ardından temel temanın kendi temel teması vb. ile başlar. Her girdinin temanınkine eşit bir dizi anahtarı vardır makine adı ve okunabilir tema adına eşit bir değer; sistemde eşleşen makine adına sahip bir tema yoksa, değer bunun yerine NULL olur (ve sistem bu temanın kendisinin bir temel teması olup olmadığını bilemeyeceğinden, temel temalar dizisini sona erdirir). Tema bir alt tema değilse bu ayarlanmaz.
  • sub_themes : Sistemdeki ya doğrudan alt temalar (yani bu temayı temel teması olarak ilan ederler), alt temaların doğrudan alt temaları vb. olan ilişkilendirilebilir bir tema dizisi. Anahtarlar temaların makinesidir isimler ve değerler, temaların insan tarafından okunabilir isimleridir. Sistemde bu temayı ana teması olarak bildiren hiçbir tema yoksa bu öğe ayarlanmaz.

Etkin tema almak için path_to_theme komutunu kullanın ..

Etkin temayı veya temalı bir uygulamayı işleyen modülü gösterebilir. Örneğin, bir tema araması kapsamında çağrıldığında, tema işlevinin nerede işlendiğine bağlı olacaktır. Bir modülden uygulanırsa, modülü gösterecektir. Etkin temadan uygulanırsa, etkin temayı gösterecektir. Bir tema aramasının kapsamı dışında çağrıldığında, her zaman etkin temayı gösterecektir.


3

Veriler aslında aynı yerde, systemtabloda tutulur . (Muhtemelen bir yerde olsa da) kontrol etmek için mevcut bir işlev bulamadık, ama bu bir tutam yapmalıdır:

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

1
Ben sadece theme_existstema sistemi ile herhangi bir olası sorunları ortadan kaldırmak için fonksiyonu çağırmak olmasa da tam olarak aynı şeyi -_- yazmayı bitirmiştim
Chapabu

1
list_themes () zaten statik önbellekleme yapar, bu nedenle muhtemelen bu işlevde buna gerek yoktur.
Letharion

1
@Chapabu Bir şeyler yapmayı seviyorum ... ilginç;)
Clive

@Letharion Üzgünüm ne demek istediğini aldım, o parçayı kaldıracak
Clive

1
Bu işlevin gerekli olmadığı anlamına gelmiyordum, bence harika. Önbelleğe alma ile geliştirilebileceğine dair kendi ifadenize atıfta bulunuyordum, ki bu durumda yararlı olacağını düşünmüyorum.
Letharion
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.