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


9

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

Ответы:


6

Используйте list_themes

параметры

$ refresh : перезагрузить ли список тем из базы данных. По умолчанию FALSE.

Возвращаемое значение

Ассоциативный массив доступных на данный момент тем. Ключи - это имена компьютеров тем, а значения - объекты, имеющие следующие свойства:

  • filename : путь к файлу и имя файла .info.
  • name : название машины темы.
  • статус : 1 для включенных, 0 для отключенных тем.
  • информация : содержимое файла .info.
  • таблицы стилей : двумерный массив, использующий первый ключ для атрибута media (например, «all»), второй для имени файла (например, style.css). Значением является полный путь к файлу (например, themes / bartik / style.css). Не устанавливается, если в файле .info не определены таблицы стилей.
  • scripts : ассоциативный массив JavaScripts, использующий имя файла в качестве ключа и полный путь к файлу в качестве значения. Не устанавливается, если в файле .info не определены сценарии.
  • префикс : базовый префикс движка темы.
  • engine : название машины для темы двигателя.
  • base_theme : если это подтема , то имя машины базовой темы определено в файле .info. В противном случае элемент не установлен.
  • base_themes : если это подтема , ассоциативный массив предков базовой темы этой темы, начиная с базовой темы этой темы, затем собственной базовой темы базовой темы и т. д. Каждая запись имеет ключ массива, равный ключу темы имя машины и значение, равное удобочитаемому имени темы; если тема с соответствующим именем машины не существует в системе, вместо этого значение будет равно NULL (и поскольку система не будет знать, есть ли у этой темы базовая тема, это завершит массив базовых тем). Это не установлено, если тема не является подтемой.
  • подтемы : ассоциативный массив тем в системе, которые являются прямыми подтемами (то есть они объявляют эту тему своей базовой темой), прямыми подтемами подтем и т. д. Ключи - это машина тем имена, а значения - это понятные человеку темы. Этот элемент не устанавливается, если в системе нет тем, которые объявили бы эту тему своей базовой темой.

Используйте 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 Извините, только что получил, что вы имели в виду, удалит этот бит
Клайв

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