概念上,它是主题中的一些容器,我们可以向里面添加区块(blocks)和内容。区域是在.info 文件中通过“regions”键值声明定义的,我们在前面一档中也有讲到过。“regions”键值使用如下的形式:
regions[theRegion] = The region label
方括号中的键使用机器可读名称,右侧对应值为用户可读名称。如果未作声明,系统默认会在主题中定义以下几个区域:
regions[left] = Left sidebar regions[right] = Right sidebar regions[content] = Content regions[header] = Header regions[footer] = Footer
Drupal 7中新增了2个默认区域:Highlighted和Help,它的输出和Drupal 6模板文件page.tpl.php中的$help是相同的。此外,机器识别的边栏的名字也发生了变化。
regions[sidebar_first] = Left sidebar regions[sidebar_second] = Right sidebar regions[content] = Content regions[header] = Header regions[footer] = Footer regions[highlighted] = Highlighted regions[help] = Help
Drupal 7 bartik theme has following default regions -
regions[header] = Header regions[help] = Help regions[page_top] = Page top regions[page_bottom] = Page bottom regions[highlighted] = Highlighted regions[featured] = Featured regions[content] = Content regions[sidebar_first] = Sidebar first regions[sidebar_second] = Sidebar second regions[triptych_first] = Triptych first regions[triptych_middle] = Triptych middle regions[triptych_last] = Triptych last regions[footer_firstcolumn] = Footer first column regions[footer_secondcolumn] = Footer second column regions[footer_thirdcolumn] = Footer third column regions[footer_fourthcolumn] = Footer fourth column regions[footer] = Footer
需要注意的是,在模板文件page.tpl.php中,区域的内部名称(internal names)会被自动转变为变量;我们需要使用变量名来调用区域。比如我们使用$left来输出所有在区块设置中绑定给[left]区域的内容。在命名方面,记得只可以使用字母与下划线,并且以字母开头,否则不会识别。
键值右侧的用户可读名称则没什么限制,仅用于在区块设置(Administer > Site building > Blocks)中的名称识别,如下图中的“Left sidebar”、“Right sidebar”等:
Drupal 7 -默认主题Bartik的区块管理表单:
几点需要注意:
- 可以使用模板文件(.tpl.php)对不同的区块进行单独渲染。
- 对区域的声明会阻止同名的默认区域的使用。例如在子主题中,如果我们希望在基主题的区域定义基础上再添加新的区域,那么需要将基主题中的区域定义也添加到子主题的.info文件中。
- 在.info文件中定义区域的顺序会反映到管理后台的区块设置中。
- 页面主要内容部分永远通过模板文件中的$content变量输出;如果我们在主题中声明一个名为“content”的区域,那么所有绑定给该区域的区块会通过$content在所有页面中作为主要内容的一部分被输出。
- .info文件中的数据会被数据库缓存,所以每当我们对该文件的内容进行修改或添加之后,需要清空缓存:
- 在性能设置中(Administer > Site configuration > Performance)点击 清空缓存按钮。
- 如果正在使用devel模块 自带的devel区块,那么点击“Empty cache”。
- 或访问一次主题管理页面 (Administer > Site building > Themes)。
更新记录:
Drupal7中已移除$footer_message这个区域变量。
我们需要在template.php文件中使用drupal_set_content()函数举个简单的例子,代码drupal_set_content('header','welcome!')可以将文本“welcome!”分配到header区域。
接下来看个复杂些的示例,这段代码可以将全部评论输出到“right”区域。在实际使用中需要将前缀修改为当前使用主题的名称:
<?php function drop_preprocess_comment(&$variables) { // Setup a few variables. $comment = $variables['comment']; $title = l( $comment->subject, comment_node_url(), array('fragment' => "comment-$comment->cid") ); $new_marker = $comment->new ? t('new') : ''; $by_line = t('by') .' '. theme('username', $comment); // Form the markup. $summary = ''; $summary .= '' . "$title $new_marker"; $summary .= '' . "$by_line"; $summary .= ''; // Set the comment into the right region. drupal_set_content('right', $summary); } ?>