Verifique se o tema está ativado programaticamente

9

Como posso verificar se um tema está ativado em uma instalação do drupal? Estou procurando algo como module_exists (), mas para temas. Não encontrei nada na documentação.

Kyle
fonte

Respostas:

6

Use list_themes

Parâmetros

$ refresh : se é necessário recarregar a lista de temas do banco de dados. O padrão é FALSE.

Valor de retorno

Uma matriz associativa dos temas atualmente disponíveis. As chaves são os nomes de máquinas dos temas e os valores são objetos com as seguintes propriedades:

  • filename : O caminho do arquivo e o nome do arquivo .info.
  • nome : o nome da máquina do tema.
  • status : 1 para ativado, 0 para temas desativados.
  • info : o conteúdo do arquivo .info.
  • folhas de estilo : Uma matriz bidimensional, usando a primeira chave para o atributo de mídia (por exemplo, 'todos'), a segunda para o nome do arquivo (por exemplo, style.css). O valor é um caminho de arquivo completo (por exemplo, themes / bartik / style.css). Não definido se nenhuma folha de estilo estiver definida no arquivo .info.
  • scripts : Uma matriz associativa de JavaScripts, usando o nome do arquivo como chave e o caminho completo do arquivo como valor. Não definido se nenhum script estiver definido no arquivo .info.
  • prefixo : o prefixo do mecanismo do tema base.
  • engine : o nome da máquina do mecanismo do tema.
  • base_theme : se este for um subtema, o nome da máquina do tema base definido no arquivo .info. Caso contrário, o elemento não está definido.
  • base_themes : se este for um subtema, uma matriz associativa dos ancestrais do tema base, começando com o tema base desse tema, então o próprio tema base do tema base, etc. Cada entrada possui uma chave de matriz igual à do tema. nome da máquina e um valor igual ao nome do tema legível por humanos; se um tema com o nome da máquina correspondente não existir no sistema, o valor será NULL (e como o sistema não saberá se esse tema em si tem um tema base, que encerrará a matriz de temas base). Isso não está definido se o tema não for um subtema.
  • sub_themes : Uma matriz associativa de temas no sistema que são sub-temas diretos (ou seja, eles declaram que esse tema é o tema base), sub-temas diretos de sub-temas etc. As teclas são a máquina dos temas nomes e valores são os nomes legíveis por humanos dos temas. Este elemento não está definido se não houver temas no sistema que declarem esse tema como tema base.

Use path_to_theme para obter um tema ativo.

Pode apontar para o tema ativo ou o módulo que lida com uma implementação temática. Por exemplo, quando invocada no escopo de uma chamada de tema, dependerá de onde a função de tema é manipulada. Se implementado a partir de um módulo, ele apontará para o módulo. Se implementado a partir do tema ativo, ele apontará para o tema ativo. Quando chamado fora do escopo de uma chamada temática, sempre apontará para o tema ativo.

niksmac
fonte
3

Os dados são mantidos exatamente no mesmo lugar, na systemtabela. Eu não consegui encontrar uma função existente para verificar (embora provavelmente exista uma em algum lugar), mas isso deve funcionar rapidamente:

function theme_exists($theme_name) {
  $themes = list_themes();
  return isset($themes[$theme_name]) && $themes[$theme_name]->status == 1;
}
Clive
fonte
11
Eu tinha acabado de digitação acabado exatamente a mesma coisa -_- embora eu provavelmente não iria chamar a função theme_existsapenas para contornar possíveis problemas com o sistema de tema
Chapabu
11
list_themes () já faz cache estático, portanto provavelmente não há necessidade disso nessa função.
Letharion
11
@Chapabu Gosto de tornar as coisas ... interessantes;)
Clive
@Letharion Desculpe apenas conseguiu o que queria dizer, irá remover esse bocado
Clive
11
Não quis dizer que essa função não era necessária, acho ótima. Eu estava me referindo à sua própria declaração de que ela poderia ser melhorada com o cache, o que não acho que seria útil nesse caso.
precisa saber é o seguinte