You are here

使用drupal模板建议(template suggestions)

g089h515r806 的头像
Submitted by g089h515r806 on 星期六, 2008-08-30 14:41

原文:http://drupal.org/node/223440

译者:葛红儒, Think in Drupal

       drupal模板建议是基于已有.tpl.php文件的可选模板文件。当满足特定的条件,并且相应的文件存在时,就使用这些建议。每一层次,包括内核、模块、主题引擎、主题,都可以提供相应的建议。你可以把它们当作“命名提示”(naming hints),来告诉系统根据合适的环境选择合适的模板。这种想法很简单,但是这一特性却非常强大,它使得在模板层上也能进行定制。

 

Devel模块展示了“页面”模板的可用的模板建议。

devel showing suggestions

内核的所有建议的列表可参看“内核模板和建议”。

 

这些命名建议是在预处理函数中设置的。内核已经提供了大量的建议。如果你需要进一步的扩展它,你需要在你的主题下面的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.        1,键'template_file'接收一个单独的建议,并具有优先级。如果条件满足,并且文件存在的话,将会使用这个建议,忽略其它的建议。
  2.        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可以自动识别建议的。

Drupal版本: