跳转到主要内容
东方龙马 提交于 2 August 2011

概念上,它是主题中的一些容器我们可以向里面添加区块(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-block-config-garland

Drupal 7 -默认主题Bartik的区块管理表单:

Bartik block configuration example

几点需要注意:

  • 可以使用模板文件(.tpl.php)对不同的区块进行单独渲染。
  • 对区域的声明会阻止同名的默认区域的使用。例如在子主题中,如果我们希望在基主题的区域定义基础上再添加新的区域,那么需要将基主题中的区域定义也添加到子主题的.info文件中。
  • 在.info文件中定义区域的顺序会反映到管理后台的区块设置中。
  • 页面主要内容部分永远通过模板文件中的$content变量输出;如果我们在主题中声明一个名为“content”的区域,那么所有绑定给该区域的区块会通过$content在所有页面中作为主要内容的一部分被输出。
  • .info文件中的数据会被数据库缓存,所以每当我们对该文件的内容进行修改或添加之后,需要清空缓存:
    1. 在性能设置中(Administer > Site configuration > Performance)点击 清空缓存按钮。
    2. 如果正在使用devel模块 自带的devel区块,那么点击“Empty cache”。
    3. 或访问一次主题管理页面 (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); } ?>

Taxonomy upgrade extras