检查是否以编程方式启用了主题


9

如何检查在drupal安装中是否启用了主题?我正在寻找类似module_exists()的东西,但要寻找主题。我在文档中找不到任何内容。

Answers:


6

使用list_themes

参量

$ refresh:是否从数据库中重新加载主题列表。默认为FALSE。

返回值

当前可用主题的关联数组。键是主题的机器名称,值是具有以下属性的对象:

  • filename:.info文件的文件路径和名称。
  • name:主题的机器名称。
  • status:1表示启用,0表示禁用主题。
  • info:.info文件的内容。
  • stylesheets:一个二维数组,第一个键用于media属性(例如'all'),第二个键用于文件名(例如style.css)。该值是完整的文件路径(例如theme / bartik / style.css)。如果.info文件中未定义样式表,则不设置。
  • scripts:JavaScript的关联数组,使用文件名作为键,使用完整的文件路径作为值。如果.info文件中未定义任何脚本,则不设置。
  • prefix:基本主题引擎前缀。
  • engine:主题引擎的机器名称。
  • 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()已经进行了静态缓存,因此在此函数中可能不需要这样做。
Letharion 2013年

1
@Chapabu我喜欢做点事情...有趣;)
Clive

@Letharion抱歉,您的意思是正确的,将删除该内容
Clive

1
我并不是说这个功能不是必需的,我认为它很棒。我指的是您自己的说法,即可以通过缓存进行改进,但我认为在这种情况下不会有所帮助。
Letharion 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.