作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
html.tpl.php的模板建议,是由theme_get_suggestions设置的,在预处理函数template_preprocess_html中,对应的代码:
if ($suggestions = theme_get_suggestions(arg(), 'html')) {
$variables['theme_hook_suggestions'] = $suggestions;
}
它的模板建议规则是按照路径来的,路径越具体,优先级越高。我们举个例子,来了解一下模板建议及其优先级问题。假定当前Drupal路径为node/1/edit,那么html.tpl.php有以下模板建议:
html--node--edit.tpl.php
html--node--1.tpl.php
html--node--%.tpl.php
html--node.tpl.php
当用户访问页面node/1/edit,会使用这里面的哪个模板。Drupal的主题系统,会按照html.tpl.php的模板建议规则,首先检查html--node--edit.tpl.php是否存在,如果存在,就使用该模板文件;如果不存在,会接着检查html--node--1.tpl.php是否存在,如果存在,就使用html--node--1.tpl.php;如果不存在,会接着检查html--node--%.tpl.php是否存在,如果存在,就使用html--node--%.tpl.php;如果不存在,会接着检查html--node.tpl.php是否存在,如果存在,就使用html--node.tpl.php;如果不存在,就会使用主题自带的html.tpl.php文件,如果该主题没有html.tpl.php文件,则会使用Drupal核心自带的默认html.tpl.php文件。
注意,在$variables['theme_hook_suggestions']对应的数组中,越靠后的模板建议,优先级越高。