Sprawdź, czy motyw jest włączony programowo

9

Jak mogę sprawdzić, czy motyw jest włączony w instalacji Drupal? Szukam czegoś takiego jak module_exists (), ale tematów. Nie mogłem znaleźć niczego w dokumentacji.

Kyle
źródło

Odpowiedzi:

6

Użyj list_themes

Parametry

$ refresh : Czy przeładować listę motywów z bazy danych. Domyślnie FALSE.

Zwracana wartość

Tablica asocjacyjna aktualnie dostępnych motywów. Klucze to nazwy maszyn motywów, a wartościami są obiekty posiadające następujące właściwości:

  • nazwa_pliku : ścieżka pliku i nazwa pliku .info.
  • name : nazwa komputera motywu.
  • status : 1 dla włączonych, 0 dla wyłączonych motywów.
  • info : zawartość pliku .info.
  • arkusze stylów : dwuwymiarowa tablica, wykorzystująca pierwszy klucz dla atrybutu media (np. „all”), drugi dla nazwy pliku (np. style.css). Wartością jest pełna ścieżka do pliku (np. Themes / bartik / style.css). Nie ustawiane, jeśli w pliku .info nie zdefiniowano żadnych arkuszy stylów.
  • skrypty : tablica asocjacyjna JavaScript, wykorzystująca nazwę pliku jako klucz i pełną ścieżkę do pliku jako wartość. Nie ustawiane, jeśli w pliku .info nie zdefiniowano żadnych skryptów.
  • przedrostek : przedrostek podstawowego silnika motywu.
  • silnik : nazwa maszyny silnika motywu.
  • base_theme : Jeśli jest to podtemat, nazwa komputera motywu podstawowego zdefiniowana w pliku .info. W przeciwnym razie element nie zostanie ustawiony.
  • base_themes : Jeśli jest to podtemat, tablica asocjacyjna przodków tego motywu podstawowego, zaczynająca się od podstawowego motywu tego motywu, a następnie własnego podstawowego motywu podstawowego itp. Każdy wpis ma klucz tablicy równy nazwa komputera i wartość równa nazwie motywu czytelnej dla człowieka; jeśli motyw z pasującą nazwą komputera nie istnieje w systemie, wartość będzie miała wartość NULL (a ponieważ system nie będzie wiedział, czy sam motyw ma motyw podstawowy, spowoduje to zakończenie zestawu motywów podstawowych). Nie jest to ustawione, jeśli motyw nie jest podtematem.
  • sub_themes : Asocjacyjna tablica motywów w systemie, które są albo bezpośrednimi pod-tematami (tzn. deklarują, że ten motyw jest ich motywem podstawowym), bezpośrednimi pod-tematami pod-tematów itp. Klucze są maszyną motywów nazwy, a wartości to czytelne dla człowieka nazwy motywów. Ten element nie jest ustawiony, jeśli w systemie nie ma motywów, które deklarowałyby ten motyw jako motyw podstawowy.

Użyj path_to_theme, aby uzyskać aktywny motyw ..

Może wskazywać na aktywny motyw lub moduł obsługujący implementację tematyczną. Na przykład wywołanie w ramach wywołania tematycznego będzie zależeć od tego, gdzie obsługiwana jest funkcja tematyczna. Jeśli zostanie zaimplementowany z modułu, będzie wskazywał na moduł. Jeśli zostanie zaimplementowany z aktywnego motywu, będzie wskazywał na aktywny motyw. Gdy zostanie wywołany poza zakresem rozmowy tematycznej, zawsze będzie wskazywał na aktywny motyw.

niksmac
źródło
3

Dane są faktycznie przechowywane dokładnie w tym samym miejscu, w systemtabeli. Nie mogłem znaleźć istniejącej funkcji do sprawdzenia (choć pewnie gdzieś tam jest), ale powinno to być szczypta:

function theme_exists($theme_name) {
  $themes = list_themes();
  return isset($themes[$theme_name]) && $themes[$theme_name]->status == 1;
}
Clive
źródło
1
Właśnie skończyłem pisać dokładnie to samo -_- chociaż prawdopodobnie nie wywołałbym tej funkcji theme_existstylko po to, aby ominąć wszelkie możliwe problemy z systemem motywów
Chapabu 30.01.2013
1
list_themes () już buforuje statycznie, więc prawdopodobnie nie ma takiej potrzeby w tej funkcji.
Letharion
1
@Chapabu Lubię robić rzeczy ... interesujące;)
Clive
@Letharion Przepraszamy, właśnie zrozumiałem, co miałeś na myśli, usunę ten bit
Clive
1
Nie miałem na myśli, że ta funkcja nie była konieczna, myślę, że jest świetna. Odniosłem się do twojego własnego oświadczenia, że ​​można go ulepszyć dzięki buforowaniu, co nie wydaje mi się pomocne w tym przypadku.
Letharion 30.01.2013