You are here

drupal PHPTemplate中的区域

g089h515r806 的头像
Submitted by g089h515r806 on 星期六, 2008-09-13 01:18

从Drupal 4.7开始,主题可以实现任意数量的区域,用于区块或者其它内容的显示。你可以到Drupal的区块管理页面(admin/build/block)看一下,你将看到,实际上区域本质上就是一个容器,你可以向里面添加区块。你也可以使用PHP向区域中添加非区块内容。什么是区域呢,一个比较好的例子就是边栏。

这些区域可以用于整个页面,或者其它的主题元素中,比如接电或者评论。 

PHPTemplate引擎定义了5个默认的区域:left(左栏), right(右栏), content(内容), header(页首), 和footer(页脚)。为了实现这些区域,在drupal主题中,只需要在page.tpl.php模板文件中包含进变量$sidebar_left, $sidebar_right, $content, $header, 和$footer_message就可以了,比如,<?php print $header; ?>。

 

如何实现自定义区域

对于一个主题,如果你不想使用默认的区域,想自己定义一套的话,你可以使用_regions()钩子函数。在这种情况下,你的自定义区域,将会覆写PHPTemplate的默认区域。

如果在主题目录中还没有template.php文件的话,那么创建一个;如果有的话,就使用现有的。然后,打开template.php文件,向里面添加一个mytheme_regions()函数,用来定义你的区域。每个区域都需要一个名字(没有空格的字符串)和一个描述(展示给用户的文本,比如在区块管理页面)。在下面的代码中,我们为"mytheme"主题重新定义了除左栏以外的PHPTemplate的默认区域,还为它添加了两个新的区域。

 

<?php
function mytheme_regions() {
  return array(
    'right' => t('right sidebar'),
    'content' => t('content'),
    'header' => t('header'),
    'footer' => t('footer'),
    'floater' => t('floater'),
    'inline1' => t('inline 1')
  );
}
?>

注意:对于函数名,你需要注意几点:

  • 使用你的主题名来代替mytheme_regions(),比如bluemarine_regions()
  • 不要在区域名中使用连字符;可以使用下划线。
  • 还有,你的主题名是你的基主题名(base theme name),而不是你的style.css文件所在的目录。例如,box_cleanslate覆写了box_grey主题的style.css文件;在这里,你的函数名应该为box_grey_regions。

 

如何向页面写入主题的区域变量。

如果你需要在page.tpl.php中使用你的区域的话,你不需要为你的区域去创建一个变量,然后再将内容指定给它;PHPTemplate已经自动帮你完成了。你所需要做的就是,通过编辑你主题的page.tpl.php文件,将变量写入到页面。对于你定义的每个新的区域,只需要在page.tpl.php中加一个print语句就可以了。对于前面定义的'floater'区域,可以这样调用:

<?php  print $floater;?>.

 

当然,你可以使用HTML,CSS,PHP(这个可能用到)来为你的区域定制一个好看的外观。

相关联接: http://drupal.org/node/29139 , Think in Drupal

Drupal版本: