原文:http://drupal.org/node/223440
译者:葛红儒, Think in Drupal
Devel模块展示了“页面”模板的可用的模板建议。
内核的所有建议的列表可参看“内核模板和建议”。
这些命名建议是在预处理函数中设置的。内核已经提供了大量的建议。如果你需要进一步的扩展它,你需要在你的主题下面的template.php文件中为相应的钩子添加一个预处理器。本例中,我们为"page"主题钩子添加了扩展建议。这里的钩子可以为任何模板钩子。
前缀"drop"应改为你主题的名字。
<?php
function drop_preprocess_page(&$variables) {
global $user;
// Add a single suggestion.
if (module_invoke('throttle', 'status') && isset($user->roles[1])) {
$variables['template_file'] = 'page-busy';
}
// Add multiple suggestions.
if (!empty($user->roles)) {
foreach ($user->roles as $role) {
$filter = '![^abcdefghijklmnopqrstuvwxyz0-9-_]+!s';
$string_clean = preg_replace($filter, '-', drupal_strtolower($role));
$variables['template_files'][] = 'page-'. $string_clean;
}
}
}
?>
有两种方式添加这些建议。
-
1,键'template_file'接收一个单独的建议,并具有优先级。如果条件满足,并且文件存在的话,将会使用这个建议,忽略其它的建议。
-
2,键'template_files' (复数)可以接受一个建议数组。它们按照先进后出的顺序进行处理。所以,首先应该向里面添加最一般的,然后逐步添加相对特殊一些的,这样就可以根据特殊性选择相应的建议了。
在上面的例子中,当达到了节流上限时,并且访问用户为匿名时,Drupal将尝试使用名为"page-busy.tpl.php"的文件。而其它代码,则告诉Drupal根据当前用户角色选择相应的模板,比如"page-authenticated-user.tpl.php"。如果找不到的话,就使用基模板"page.tpl.php"。这是非常简单的例子。你可以根据你可用的数据来自己设置上下文。
一些注意点:
-
当向'template_files'也就是数组中添加建议时。不要对其进行重置,因为变量是使用饮用传递的。如果重置的话,所有在内核和模块中进行的设置将全部丢失。
<?php
// Do not do this:
$variables['template_files'] = array('hook-suggestion');
// Instead do this:
$variables['template_files'][] = 'hook-suggestion';
?>
-
建议前面使用与之相连的钩子作为前缀。这样更加干净,并将文件聚到了一块。同时还减小了Drupal将该模板注册为其它钩子的风险。
-
使用连字符来代替下划线。主模板都不使用下划线的。
-
建议只有和基模板放在一块时,才起作用。模板可以放在主题下面的恶任意子目录下,但是必须将其放到一块。
- 建议的修改添加删除,不需要清空主题注册表。只有基模板注册时才需要。而Drupal可以自动识别建议的。