Перевірте, чи тема включена програмно


9

Як я можу перевірити, чи включена тема для інсталяції drupal? Я шукаю щось на зразок module_exists (), але для тем. Я нічого не міг знайти в документації.

Відповіді:


6

Використовуйте list_themes

Параметри

$ refresh : Перезавантажити список тем із бази даних. Значення за замовчуванням - FALSE.

Повернене значення

Асоціативний масив наявних на сьогодні тем. Ключі - це назви машин тем, а значення - об'єкти, що мають такі властивості:

  • ім'я файлу : шлях та ім'я файлу .info
  • назва : Назва машини теми.
  • статус : 1 для включених, 0 для відключених тем.
  • інформація : вміст файлу .info
  • таблиці стилів : двовимірний масив, який використовує перший ключ для атрибута медіа (наприклад, "всі"), другий для імені файлу (наприклад, style.css). Значення є повним файловим шляхом (наприклад, теми / bartik / style.css). Не встановлюється, якщо у файлі .info не визначені таблиці стилів.
  • Сценарії : Асоціативний масив JavaScripts, що використовує ім'я файлу як ключ і повний шлях файлу як значення. Не встановлюється, якщо у файлі .info не визначені сценарії.
  • префікс : префікс базової теми двигуна.
  • двигун : Назва машини двигуна теми.
  • base_theme : Якщо це підтема , назва машини базової теми визначена у файлі .info. В іншому випадку елемент не встановлений.
  • base_themes : Якщо це підтема , асоціативний масив предків базової теми цієї теми, починаючи з базової теми цієї теми, то власна основна тема базової теми тощо. Кожен запис має ключ масиву, рівний темі ім'я машини та значення, яке дорівнює людській читаній назві теми; якщо тема з відповідним іменем машини не існує в системі, то натомість значення буде NULL (а оскільки система не знає, чи сама тема має базову тему, це закінчить масив базових тем). Це не встановлено, якщо тема не є субтемою.
  • sub_themes : асоціативний масив тем у системі, які є або прямими підтемами (тобто вони оголошують цю тему основною темою), прямими підтемами підтемати тощо. Ключі - це машина тем назви та значення - це імена, прочитані людиною. Цей елемент не встановлений, якщо в системі немає тем, які декларують цю тему як основну.

Використовуйте path_to_theme, щоб отримати активну тему ..

Він може вказувати на активну тему або модуль, що обробляє тематичну реалізацію. Наприклад, при виклику в межах тематичного виклику це буде залежати від того, де обробляється функція тематизації. Якщо реалізовано з модуля, він вказуватиме на модуль. Якщо реалізовано з активної теми, вона вказуватиме на активну тему. Якщо дзвінок виходить за межі тематичного дзвінка, він завжди вказуватиме на активну тему.


3

Дані фактично зберігаються в точно тому ж місці, systemтаблиці. Я не зміг знайти існуючу функцію для перевірки (хоча, мабуть, вона є десь), але це слід зробити вкрай:

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

1
Я щойно закінчив вводити абсолютно те саме - хоча б я, мабуть, не закликав би функцію, theme_existsаби пройти всі можливі проблеми з тематичною системою
Chapabu

1
list_themes () вже робить статичне кешування, тому в цій функції, ймовірно, немає необхідності.
Летаріон

1
@Chapabu Мені подобається робити речі ... цікавими;)
Клайв

@Letharion Вибачте, що ви зрозуміли, вилучите цей біт
Clive

1
Я не мав на увазі, що ця функція не потрібна, я думаю, що це чудово. Я мав на увазі ваше власне твердження, що це може бути покращено кешуванням, що, на мою думку, не було б корисним у цьому випадку.
Летаріон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.