欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

drupal中覆写可主题化的输出

shiping1 的头像

drupal中覆写可主题化的输出

原文:http://drupal.org/node/173880
译者:葛红儒,    Think in Drupal
只有当你需要修改默认输出时,你才需要阅读本节.如果你的显示层是完全有CSS样式表负责的,那么可以略过本节。
覆写主题输出,需要掌握3个方面。首先,你需要知道源头在哪里,其次你要进行覆写,最后你需理解它的类型。
注意,Drupal使用主题注册表(theme registry)来缓存主题数据覆写完成后,你必须清空缓存。
 
1.       寻找源头:
寻找主题输出的源头,是比较困难的,这是由于主题系统的多层级结构造成的,使得源头可能出现在系统的各个地方。
output overrides
仅用来演示用。
大多数页面元素一般是由theme('page')拉进来的,在显示导航信息以后,它们被放置在page.tpl.php模板中。页面元素包括主菜单、区块区域元素,区域中的区块等等。通常通过一个主题钩子来引用每个大块的主题化数据。
注意:主题钩子现在包括主题函数和模板两部分。系统中的许多钩子都与主题无关。我们这里提到的钩子都是特定于主题的。
现在使用devel模块(devel module)可以很容易的追踪特定内容的源头。devel模块包含一个主题工具,可以方便的查勘任何输出的源头,类型以及其它主题相关数据。参看示范screencast(http://drupal.org/node/209561)。由于技术方面的限制,它只能应用到Drupal6以及更高版本中。
 
2.       覆写机制:
覆写机制有一个特定的级联顺序,当然也包含一些特殊情况。Drupal内核和模块使用主题钩子提供了一个合理的默认输出。如果默认输出不符合主题的 需求的话,那么就可以对其进行覆写,从而避免使用默认输出。这样,默认的将被放到一边去,我们不再管它,而将所有的特定修改放到所用的主题目录下面。不要 直接修改Drupal内核和模块,只在主题目录下面修改。
output overrides
如果传统的覆写不能满足你的需要的话,你可以使用主题注册表。
注意:尽管在Drupal 6中PHPTemplate.engine还存在,但它已不再覆写主题函数了。在Drupal5中,它允许使用模板来处理部分主题钩子。而现在则不必要这样了。

drupal主题函数 VS drupal模板

3.函数VS模板:
正如前面所说,实现特定的钩子有两种方式。通常的“函数”或者“模板”。根据要主题化的元素的特点,选用最合适的方式。drupal内核和模块可选用任何一种方式来构建输出。而上面的主题层,可以使用同样的方式来覆写,或者改变选用的方式。
theme flow - function vs template
Links to PDF. Flow map for 5 also available for comparison.
使用函数来实现主题钩子,具有速度上的优势。通常比使用模板的快5倍,但是对们对于涉及者来说,就比较困难,通常涉及者都比较熟悉直接的xHTML,而不是php函数。通常,我们不需要考虑这样一点,而是根据钩子的特点和在一个页面中被调用的次数,来决定要选择的方式。
注意:在Drupal5及以前版本,内核和模块只能使用函数来实现主题钩子。想要使用模板的话,必须使用PHPTemplate来覆写钩子,并在引擎层中进行转换。
下面是覆写的两个例子,这里使用了devel themer.
函数方式:
主题函数theme_menu_local_tasks,是一个用来输出一级和二级标签的简单函数。这里的主题钩子就是"menu_local_tasks"。为了覆写它,可将函数名中的前缀"theme"替换为你主题的名字或者所用主题引擎的名字。最好使用主题的名字,这样可以避免潜在的与子主题(http://drupal.org/node/225125)的命名冲突。
search override
本例中,Garland是使用引擎名来覆写的。如果你的主题是基于Garland的子主题,那么你必须使用你的主题名了。
将下面的代码放到主题的template.php,清空主题注册表缓存,这样就覆写了默认输出。注意,将"drop"改为你主题的名字。
<?php
function drop_menu_local_tasks() {
  $output = '';
  if ($primary = menu_primary_local_tasks()) {
    $output .= "<ol class=\"tabs primary\">\n". $primary ."</ol>\n";
  }
  if ($secondary = menu_secondary_local_tasks()) {
    $output .= "<ol class=\"tabs secondary\">\n". $secondary ."</ol>\n";
  }
  return $output;
}
?>
这里所做的唯一修改就是将<ul>标签改为了<ol>。
api.drupal.org你可以找到所有的主题函数。
 
模板方式:
如果默认是使用模板实现的,那么你只需要简单得将模板源文件拷贝到主题下面,然后清空主题注册表,就完成了覆写。下面为search-theme-form.tpl.php的一个例子。注意在这里,主题钩子就是"search_theme_form",需要将连字符“-”替换为下划线“_”.
search override
这就是你要做的。使用编辑器,打开拷贝的模板,对其进行修改。内核中的所有.tpl.php文件都带有注释。根据注释,你就可以做出具体的修改了。
注意:模板可以放在主题下面的任何目录中。这样便于管理,也避免了主题根目录下面的混乱。
相关页面:
将函数转化为模板
将一个主题函数转化为一个模板,开始是需要一点工作的,但一旦完成,便很好使用。如果你和设计者一同工作,那么转化为模板,将会使设计者更专注于设 计,而不是编码。在内核中,已有了很多模板,而在将来的版本中,将有更多的主题函数转化为模板。第3方模块,为了与内核接轨,最好也使用模板。本部分是为 那些还没有使用模板的主题钩子准备的。
 
Drupal以模板的方式识别主题钩子是自动完成的。下面是完成修改所需的所有必要条件:
  • 模板名必须与主题钩子匹配。
  • 主题钩子中的下划线必须改为连字符。
  • 模板文件必须使用扩展名".tpl.php"。(根据主题引擎的不同,扩展名会有所不同)
 
假如主题函数为theme_user_signature。 这里的主题钩子就是"user_signature"。创建一个名为"user-signature.tpl.php"的文件,清空注册表,就会告诉 Drupal现在钩子已改为模板方式了。现在该文件中的内容将替代相应的函数。这里的难点是,设置模板文件中用到的变量,这可以通过预处理函数来完成。
需要注意的一些点:
  • 可以在模板中直接放置代码,但这种方式不好。所有的复杂逻辑都应该从.tpl.php文件中分离出来。这样使得模板文件更干净,更便于管理。
  • 这也有安全方面的考虑。将逻辑与显示分离,可以避免潜在的恶意用户来创建内容,从而减小CSS(cross-site scripting)攻击的机会.当让你的设计者处理模板文价时,所有的输出都应该非常干净,这样设计者就不用考虑安全问题了。
  • 比较关于论坛的theming functions in 5template conversions in 6。你可以使用这个作为例子,来进行两种方式之间的转换。
  • 更多关于预处理函数的信息(http://drupal.org/node/223430)。

drupal主题注册表

原文:http://drupal.org/node/173880
译者:葛红儒, Think in Drupal,
Drupal的主体注册表维护了主题钩子相关的缓存数据,包含主题钩子和如何处理它们的信息。
对于大多数drupal主题开发者来说,都不需要直接与注册表打交道。只需要记住,当添加或者删除主题函数和模板时,要清空它。编辑已有的函数和模板时,则不需要清空。
清空主体注册表,有3方式:
  1. 位于"Administer > Site configuration > Performance"的clear按钮。
  2. 如果启用了devel区块(devel模块创建的),点击"Empty cache"连接。
  3. 使用API函数drupal_rebuild_theme_registry
 
drupal主题注册表是主题钩子相关信息的 缓存数据,包括Drupal可用的主体钩子,勾子类型,即如何处理它们。在以前的版本中,所有的主题调用都是直接完成的。由于在底层需要进行大量的处理工 作,而缓存可以加快这种处理,特别是对于模板而言。你主题用到的引擎应该为你自动的注册所有的主题钩子。
在一些特殊情况下,你需要直接与注册表打交道。如果你的drupal主题需要注册一个新的钩子,而该钩子不在底层中(内核,模块,引擎)。比如说一些表单,内核或者模块没有明确对其主体化,而仅仅使用了默认的表单输出。
 
  • 更多细节,参看子页面“特殊情况下的主题注册表”(The theme registry for special cases)。
  • 不要将主题注册表与主题的.info文件混淆了,两者都被缓存了。清空主题注册表的第1点和第2点,同时也清空了.info的缓存。
  
  • 预处理函数
  • 默认的基本变量
  • 特殊情况下的主题注册表
  • 使用模板建议(suggestions)
  • 核心模板和建议(suggestions)

drupal预处理函数

    预处理函数仅适用于模板形式的主题钩子.它的主要作用是设置模板文件((.tpl.php)中所用到的变量。在预处理器(Preprocessor)中,一般涉及不到普通的主题函数。
 
注意:
  • 在提供模板建议(template suggestions)时也会用到预处理器。
  • 在drupal5中,函数_phptemplate_variables提供了同样的功能,在drupal6中,为了以后版本的兼容性,最好不要用这个函数。
对于单个主题钩子,可以有多个预处理器。内核,模块,引擎,主题,每层都可以有一个预处理器,来逐步的构建显示在模板文件中的变量集。通过将大部分逻辑放到这些预处理器中,可使得模板文件更加简洁,易于使用。
 
       下面是预期的预处理器。当它们同时存在时,按照下面的顺序运行:
  1. template_preprocess
    -这个是由内核提供的,也是始终存在的。这里声称的变量在所有的模板钩子中都可以使用.
  2. template_preprocess_hook
    -实现了主题钩子的内核或者模块提供该处理器。特定于某个钩子的变量,通常首先在这里生成。
  3. moduleName_preprocess
    -不要将这个与前面的预处理器混淆了。对于那些最初没有实现钩子的模块,它允许影响变量集。它将在所有的钩子中运行。
  4. moduleName_preprocess_hook
    -和第3个一样,但是特定于某个钩子。
  5. engineName_engine_preprocess
    -主题引擎的预处理器。适用于所有的钩子。
  6. engineName_engine_preprocess_hook
    -主题引擎的另一个预处理器,特定于单个钩子。
  7. engineName_preprocess
    -这是第一个可以在主题内部使用的预处理器。命名方式为,主题所用引擎名称+预处理器名。适用于所有的钩子。
  8. engineName_preprocess_hook
    -这个和第7个一样,但是特定于单个钩子。
  9. themeName_preprocess
    -命名方式为:主题名+预处理器名。适用于所有的钩子。
  10. themeName_preprocess_hook
    -与前者一样,但是特定于单个钩子。
 
这里有多种方式可修改变量集。在大多数情况下,只有前两个预处理器存在。第一个,添加了所有的默认基本变量,而第2个添加了特定于该主题钩子的变量。第3方模块,如果用到了第3和第4个预处理器的话,需要添加注释对其进行详细说明。这里就不对此展开讨论了。
 
       尽管可以这样做,但是默认的PHPTemplate没有对变量集进行修改。(5 & 6)
 
从列表中的第7个开始,所有的预处理器都是放置在主题中的。这个预处理器列表最多是可以超过10个的,那就是使用子主题,子主题是基于第9和第10个预处理的前缀主题名的,但是这种情况在实际中很少用到。
 
注意:
  • 一般推荐在基主题的预处理器中使用引擎名称(7 & 8)。这有利于代码在主题之间的迁移,同时有利于在Drupal.org上发布代码片断。
  • 而只有在子主题(sub-themes)中才使用主题名称(9 & 10)。这将减少潜在的重名冲突,在PHP中是不允许重名的。
  • 为了识别你主题的预处理器,与钩子相关联的模板必须位于主题内部。如果存在默认的模板的话,将其拷贝到你的主题下面,并清空注册表。如果你要将一个主题函数转化为一个模板,参看前面页面的“以模板方式注册钩子”(http://drupal.org/node/173880#convert-type)。
 
注意,这些函数中都没有返回值,所有的变量都是通过引用传递的,前面都有符号“&”,比如&$var。
 
由于这里适用的是引用方式,所以在前面设置的变量,在后面的预处理器中都会存在,所以你一定要小心,不要在这里出什么乱子。重置以前的变量是可以的,但重置以后,你总会疑神疑鬼,感情哪里会出漏子。
 
这个例子,来自于实现了钩子"foo"的模块:

<?php
function template_preprocess_foo(&$variables) {
  $variables['foo_list'] = array(
    'list item 1',
    'list item 2',
    'list item 3',
  );
}
?>
在主题的预处理器中添加变量集:

<?php
function drop_preprocess_foo(&$variables) {
  // Do not do this unless you mean to:
  $variables['foo_list'] = array('list item 4');
 
  // Instead do this:
  $variables['foo_list'][] = 'list item 4';
}
?>
在模板文件中使用的变量,就是$variables的键。所以,在上面的例子中,在模板文件中可用的变量就是$foo_list。
 
 
原文:http://drupal.org/node/223430
译者:葛红儒, Think in Drupal,

drupal主题默认的基本变量

原文:http://drupal.org/theme-guide
 译者:葛红儒,Think in Drupal
下面是在所有的drupal模板文件(http://drupal.org/node/190815)中都可以使用的基本变量。它们是通过预处理器函数(http://drupal.org/node/223430),template_preprocess生成的。特定于模板文件的变量,其相关说明位于模板文件中。
 
$id
模板的编码。模板每被调用一次,它增1。
$zebra
"odd" 或者 "even"。两者随着模板的适用交替改变。
$directory
主题的相对路径,相对于安装路径。例如:"sites/all/themes/myTheme"
 
$is_admin
布尔值。当访问者为站点管理员(user 1)时返回TRUE;
$is_front
布尔值。当当前页面为首页时,返回TRUE;
$logged_in
布尔值。访问者为drupal站点会员,登陆并通过验证时,返回TRUE;
$db_is_active
布尔值。当数据库可用时,返回TRUE。这只在“维护模式下的drupal主题化”(http://drupal.org/node/195435)中有用,此时站点可能会遇到数据库问题。
$user
当前访问者的用户对象。把数据放到这里可能不大安全。对于可疑字符串,一定要用check_plain
 
 

特殊情况下的drupal主题注册表

        在继续阅读本节以前,你首先要熟悉主题注册表的目的(http://drupal.org/node/173880#theme-registry)。这里的指导,将覆盖如何手动的注册一个主题钩子,并解释如何才能手动操作。
 
大部分需要手动注册主题的情景,是与表单相关 联的。表单元素可以主题化,但是它们的主题化是以另一种方式进行的。对于基本元素,比如复选框,单选框,提交按钮,下拉菜单,等等。这些元素都是可以主题 化的,对它们的覆写不需要手动的去注册与之相关联的钩子。对于一些定制表单,每个元素都以非常特别的方式来放置,这时就需要手动的去注册了。对于那些,已 经设计好,主体化过的,并且注册过的表单,就不需要手动注册了。对于那些没有主题化的表单将使用默认方式显示它们(http://api.drupal.org/api/file/developer/topics/forms_api.html/6)。
 
表单注册例子:
在下面这个例子中,search.module注册了两个搜索表单,搜索框和搜索区块。每个表单都有一个唯一的Id与之相关联。即可充当注册编号,又可充当主题钩子。在这里,它是"search_theme_form" 和"search_block_form"。
 
<?php
function search_theme() {
  return array(
    'search_theme_form' => array(
      'arguments' => array('form' => NULL),
      'template' => 'search-theme-form',
    ),
    'search_block_form' => array(
      'arguments' => array('form' => NULL),
      'template' => 'search-block-form',
    ),
    ...
  );
}
?>
表单API将它的显示控制权交给了注册钩子的处理器。在这个例子中,它注册了默认参数('arguments')和模板类型('template')。只有当主题层(see image)下面的层次中已注册了主题钩子时,Drupal才能自动找到钩子。
 
 
注册一个未被注册的表单:
另一个搜索表单还没有被注册过。它的id为"search_form",用在主搜索页面。表单的数据是在一个函数中构建的(http://api.drupal.org/api/function/search_form/6),这和其它表单一样,但它需要表单API根据它的数据结构来处理它的显示。我们可通过覆写来对其进行扩展,你需要在你的主题中使用hook_theme对其进行注册。将下面的代码放到你主题的template.php文件中,将"drop"前缀改为你主题的名字。主题钩子就是表单的id:
 
<?php
function drop_theme() {
  return array(
    'search_form' => array(
      'arguments' => array('form' => NULL),
    ),
  );
}
?>
主题化过的表单都有一个参数"form"。由于这里没有声明模板(template),那么钩子将作为主题函数的形式存在,而不是一个模板。主题函数必须使用它的主题名作为前缀。这里不能使用phptemplate_*。所以,根据上面的信息,那么主题函数应该是这样的:
<?php
function drop_search_form($form) {
  $simple = '';
  foreach (element_children($form) as $element) {
    if ($element == 'advanced') {
      $advanced = drupal_render($form[$element]);
    }
    else {
      $simple .= drupal_render($form[$element]);
    }
  }
  return $advanced . $simple;
}
?>
 
这里所做的唯一修改就是高级搜索表单的位置。
  • 子主题中覆写了一个表单,如果这个表单在基表单中已经注册过的话,那么就不需要手动的再为这个表单进行注册了。记住,底层注册过了的,上层都不需要再注册了,对于基主题来说,子主题就是它上面的一层。
  • 在将来的版本中,这将会更加自动化。开发者知道主题者(themers)的负担。
 
手动操作
主题注册表的手动操作,使一个高级特性。如果你安装了devel模块的话,点击区块中的"Theme registry"(主题注册表)可阅读进一步的详细信息。也可参看http://api.drupal.org/api/function/theme_get_registry/6
 
待续。。。
 
原文:http://drupal.org/node/223463
译者:葛红儒, Think in Drupal
 
 

使用drupal模板建议(template suggestions)

原文: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核心的模板和建议

原文:http://drupal.org/node/190815
译者:葛红儒, Think in Drupal,
 
drupal默认模板:
这些为drupal内核提供的默认模板(.tpl.php)文件.drupal模板文件内部包含了相应变量和模板用途的文档.这有对于所有模板都可用的默认变量集.
由PHPTemplate在5.x中处理的模板,也被删除了. PHPTemplate不再处理模板文件.
为了覆写这些模板,你只需要将其拷贝到你的主体目录下,并清空drupal主题注册表.
 
drupal Aggregator(聚合器)
"modules/aggregator/..."
drupal Block (区块)
"modules/system/..."
"modules/block/..."
Book (书)
"modules/book/..."
Comment (评论)
"modules/comment/..."
drupal Forum (论坛)
"modules/forum/..."
drupal Node (节点)
"modules/node/..."
drupal Poll (投票)
"modules/poll/..."
drupal Profile (外形)
"modules/profile/..."
drupal Search (搜索)
"modules/search/..."
User (drupal用户)
"modules/user/..."
System (drupal系统模块)
"modules/system/..."

drupal模板建议

建议只有和基模板放在同一个目录下面时,才能工作.换句话说,为了让comment-blog.tpl.php正常工作,你需要把comment.tpl.php也放到同一个目录下.
下面列出的为默认建议.如果你想定制的话,可参看使用模板建议一页.
block-[region|[module|-delta]].tpl.php
基模板: block.tpl.php
默认建议及顺序:
  1. block-module-delta.tpl.php
  2. block-module.tpl.php
  3. block-region.tpl.php
"module"为模块名称,而"delta"为模块分配给该区块的内部id.例如, "block-user-1.tpl.php"将用于默认用户导航区块,因为该区块由user模块创建,且内部id为1. "region"将对特定区域产生作用.
 
comment-[type].tpl.php
基模板: comment.tpl.php
默认建议为comment-type.tpl.php,它用于特定节点类型的评论格式,以区别站内的其它评论.与node-[type].tpl.php类似,但是它用于评论.
 
comment-wrapper-[type].tpl.php
基模板: comment-wrapper.tpl.php
与前者类似,但是用于包装器(wrapper)模板.
 
forums-[[container|topic]-forumID].tpl.php
基模板: forums.tpl.php
默认模板建议及顺序。
对于论坛容器
  1. forums-containers-forumID.tpl.php
  2. forums-forumID.tpl.php
  3. forums-containers.tpl.php
对于论坛话题:
  1. forums-topics-forumID.tpl.php
  2. forums-forumID.tpl.php
  3. forums-topics.tpl.php
maintenance-page-[offline].tpl.php
基模板: maintenance-page.tpl.php
当数据库不可用时,应用该模板建议.用来为用户展示一个不带错误信息的页面.首先需要设置维护页面的主题化.
 
node-[type].tpl.php
基模板: node.tpl.php
节点类型,例如"node-story.tpl.php", "node-blog.tpl.php",等等.
 
page-[front|internal/path].tpl.php
基模板: page.tpl.php
可以有无数个建议.具有优先级的为首页(front page).剩下的都是基于当前页面的内部路径。不要将内部路径和路径别名混淆了,这里不能使用路径别名。记住,通常使用pathauto.module来设置路径别名。
可通过"Administrator > Site configuration > Site information"来设置首页。对于设置好的首页,将会为其使用"page-front.tpl.php"模板。
下面为drupal模板建议文件,根据内部路径,越特殊的次序越靠前。如果系统为当前页面找到了一个模板建议的话,就不会再调用位于它后面的模板建议了。例如,对于http://www.example.com/node/1/edit,将会有下面的建议可用:
  1. page-node-edit.tpl.php
  2. page-node-1.tpl.php
  3. page-node.tpl.php
  4. page.tpl.php
poll-results-[block].tpl.php
基模板: poll-results.tpl.php
生成投票结果的主体函数,可供节点和区块共同使用。默认是用于节点的,但是drupal模板建议使得可以用在区块区域中。这个建议是默认的,它位于"modules/poll/poll-results-block.tpl.php"。
 
poll-vote-[block].tpl.php
基模板: poll-vote.tpl.php
与poll-results-[block].tpl.php类似,但用来生成投票表单。你必须自己为其提供drupal模板,以让其生效。
 
poll-bar-[block].tpl.php
基模板: poll-bar.tpl.php
与poll-vote-[block].tpl.php一样,但是用来生成单个的bars(细长条纹)。
 
profile-wrapper-[field].tpl.php
基模板: profile-wrapper.tpl.php
这个profile包装器模板,是在浏览会员列表页面时使用的。当浏览特定的字段时,在模板建议中需要使用字段名称。例如http://drupal.org/profile/country/Belgium使用的模板为"suggest profile-wrapper-country.tpl.php"。
 
search-results-[searchType].tpl.php
基模板: search-results.tpl.php
search-results.tpl.php是搜索结果的默认包装器。根据搜索类型的不同,使用不同的建议。例如,对 于"example.com/search/node/Search+Term",将使用"search-results-node.tpl.php"。 而对于"example.com/search/user/bob",则使用"search-results-user.tpl.php"。模块可以扩展 搜索类型,并为其添加更多的建议。
 
search-result-[searchType].tpl.php
基模板: search-result.tpl.php
与前者相同,但是用于单个的搜索结果。
 
来自 http://www.thinkindrupal.com/book/export/html/21
普通分类: