Compruebe si el tema está habilitado mediante programación

9

¿Cómo puedo verificar si un tema está habilitado en una instalación de drupal? Estoy buscando algo como module_exists () pero para temas. No pude encontrar nada en la documentación.

Kyle
fuente

Respuestas:

6

Use list_themes

Parámetros

$ refresh : si se debe volver a cargar la lista de temas de la base de datos. El valor predeterminado es FALSO.

Valor de retorno

Una matriz asociativa de los temas disponibles actualmente. Las claves son los nombres de máquina de los temas y los valores son objetos que tienen las siguientes propiedades:

  • filename : la ruta del archivo y el nombre del archivo .info.
  • nombre : el nombre de la máquina del tema.
  • estado : 1 para habilitado, 0 para temas deshabilitados.
  • info : el contenido del archivo .info.
  • hojas de estilo : una matriz bidimensional, que utiliza la primera clave para el atributo multimedia (por ejemplo, 'todos'), la segunda para el nombre del archivo (por ejemplo, style.css). El valor es una ruta de archivo completa (por ejemplo, themes / bartik / style.css). No se establece si no se definen hojas de estilo en el archivo .info.
  • scripts : una matriz asociativa de JavaScripts, que utiliza el nombre de archivo como clave y la ruta de archivo completa como valor. No se establece si no hay secuencias de comandos definidas en el archivo .info.
  • prefijo : el prefijo del motor del tema base.
  • motor : el nombre de la máquina del motor del tema.
  • tema_base : si se trata de un subtema, el nombre de la máquina del tema base definido en el archivo .info. De lo contrario, el elemento no se establece.
  • temas_base : Si este es un subtema, una matriz asociativa de los ancestros del tema base de este tema, comenzando con el tema base de este tema, luego el tema base del propio tema base, etc. Cada entrada tiene una clave de matriz igual a la del tema nombre de la máquina y un valor igual al nombre del tema legible por humanos; si no existe un tema con el nombre de la máquina coincidente en el sistema, el valor será NULL (y dado que el sistema no sabría si ese tema en sí tiene un tema base, eso finalizará la matriz de temas básicos). Esto no se establece si el tema no es un subtema.
  • sub_themes : una matriz asociativa de temas en el sistema que son subtemas directos (es decir, declaran que este tema es su tema base), subtemas directos de subtemas, etc. Las claves son la máquina de los temas. nombres y los valores son los nombres legibles por humanos de los temas. Este elemento no se establece si no hay temas en el sistema que declaren este tema como su tema base.

Use path_to_theme para obtener el tema activo.

Puede apuntar al tema activo o al módulo que maneja una implementación temática. Por ejemplo, cuando se invoca dentro del alcance de una llamada temática, dependerá de dónde se maneje la función temática. Si se implementa desde un módulo, apuntará al módulo. Si se implementa desde el tema activo, apuntará al tema activo. Cuando se llama fuera del alcance de una llamada temática, siempre apuntará al tema activo.

niksmac
fuente
3

Los datos se guardan exactamente en el mismo lugar, la systemtabla. No pude encontrar una función existente para verificar (aunque probablemente haya una en alguna parte), pero esto debería funcionar en un apuro:

function theme_exists($theme_name) {
  $themes = list_themes();
  return isset($themes[$theme_name]) && $themes[$theme_name]->status == 1;
}
Clive
fuente
1
Acababa de terminar de escribir exactamente lo mismo -_- aunque probablemente no llamaría a la función theme_existssolo para eludir cualquier posible problema con el sistema de temas
Chapabu
1
list_themes () ya realiza almacenamiento en caché estático, por lo que probablemente no sea necesario para eso en esta función.
Letharion
1
@Chapabu Me gusta hacer las cosas ... interesantes;)
Clive
@Letharion Lo siento, acabo de entender lo que quiso decir, eliminará ese bit
Clive
1
No quise decir que esta función no era necesaria, creo que es genial. Me refería a su propia declaración de que podría mejorarse con el almacenamiento en caché, lo que no creo que sea útil en este caso.
Letharion