对一个Drupal主题的剖析

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

译者:葛红儒, Think in Drupal

 phptemplate theme:

theming requirements

.info (必须)

".info"文件是必须的,当Drupal 寻找你的主题时,要用到这个文件.在这里可以定义:元数据,样式表, JavaScripts,(区块)区域,以及其它.而其它文件则是可选的.

主题的内部名称也是由该文件衍生出来的.例如,如果它名为”drop.info”的话,那么在Drupal中,"drop"就是主题的名字。而在Drupal5以及更早的版本中,Drupal使用主题文件夹名作为主题的名字。

Info文件是Drupal6引入的新的特性。在Drupal5中,.info文件仅适用于模块。

 

模板文件(.tpl.php)http://drupal.org/node/190815

这些drupal模板文件,都是由xHTML和PHP变量构成的。在一些情况下,它们也可以输出其它的数据类型——比如xml rss。每个.tpl.php文件负责特定一块数据的输出,有时,根据suggestions (建议),它可以处理多个.tpl.php文件。模板文件是可选的,如果在你的主题中不存在的话,那末就会使用默认输出。注意,在这些文件中,不要包含复杂的业务逻辑。一般情况下,只需要包含xHTML标签和PHP变量。在内核和可选模块所在的目录中,存在着一些模板文件。将它们拷贝到你的主题目录下面,Drupal将会使用主题目录下的模板文件来代替模块里面的。

注意:theme registry(主题注册表)对可用主题数据信息进行了缓存。当你在你的drupal主题中添加或者删除模板文件(或者主题函数)时,你需要重置主题注册表,以清空缓存。

 

template.php

可将输出时所用到的所有条件逻辑和数据处理,都放到template.php文件中。该文件不是必需的,但是它能使.tpl.php文件保持整洁,在这里,可以对.tpl.php文件中的PHP变量进行预处理。定制函数,覆写的主题函数或者其它对原始输出的外观定制函数,都可以放到这里。这个文件开头必须是PHP开始标签"<?php",但是结束标签不是必须的,最好将其忽略。

 

Sub-themes (子主题)

在表面上,子主题和其它主题是一样的。唯一的区别是,它们继承了父主题的资源。为了创建一个子主题,在.info文件中必须包含"base theme"项。这样它就可以继承来自于父主题的资源了。继承可以是多重的;一个子主题可以是另一个子主题的父主题。对此没有进行限制,可以一直继承下去。

Drupal 5以及更低版本中,drupal子主题需要位于父主题下面的子目录里面。Drupal6中则没有这一限制。

 

其它

  • Logo和截图并不是必需的,但它是推荐使用的,特别是你想把你的主题贡献到Drupal资源库中时。截图应该展示主题的特色,比如包含管理页面和用户帐号设置,它可在设置了适当权限后来选择主题。
  • 当你需要管理UI设置或者logo、搜索、使命(mission)等等以外的“特性”时,可以使用"theme-settings.php"文件。这是一个高级特性。更多信息,可参看用户手册的高级设置(http://drupal.org/node/177868)。
  • 对于颜色模块(color module)的支持,需要一个"color"目录,里面放置"color.inc"文件,以及其它各种支持文件。

 

  • 如果你想将你的主题基于核心主题,可以使用子主题(http://drupal.org/node/225125),或者拷贝主题并将其重命名。直接修改Garland或者Minnelli是非常非常不好的,这是由于安装和升级过程中都要用到他们。
  • 所有主题都应该放在"sites/all/themes"目录下,以将其与核心文件区分开来。参看多站点安装(http://drupal.org/node/43816),可以了解到所有可以放置主题的目录。 
  • 子主题,它们的结构和继承

 

Drupal版本:

drupal子主题,它们的结构和继承

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

译者:葛红儒Think in Drupal

drupal子主题(Sub-theme)和其它drupal主题一样,唯一不同之处在于:它们继承来自于父主题的资源.对于多重继承,则没有限制.一个drupal子主题可以是另一个子主题的子主题,允许存在分支和层级结构,只要你觉得合适就可以了.这使得drupal子主题具有巨大的潜力.

sub-themes and dependancies

 

假如开始我们用基主题(base theme)勾画出主题的轮廓,那么在drupal子主题中我们要做的就是描绘出所有的细节。接着,从同一基主题出发,创建另一个子主题分支,用来尝试另一种设计。如果你要建立的是多站点的话,但是你想要一个统一的外观,那该怎么办呢?使用子主题,就可以在各个自站点中分享共同的设计资源。子站点相关的修改放在子主题里,而共享的设计资源则可以放在基主题中,这样一旦修改了之后,就可以应用到所有的子站点中了。如果仔细规划,那么就具有无限的可能。

为了声明一个父主题或者“基主题”("base theme"),那么在子主题的.info文件中设置下面一项,其中" themeName"(“主题名”)为父主题在Drupal内部的名字:

base theme = themeName

 

下面的将被继承:

  • 所有在父主题中定义的样式表(http://drupal.org/node/171209),但可以进行选择(http://drupal.org/node/171209#styles-override-parent),所以这是可以控制的。
  • 所有在父主题中定义的JavaScripts
  • 所有的模板文件(.tpl.php)。
  • "template.php"文件中定义的所有东西。包括覆写的主题函数,预处理器,或者其它东西。每个子主题都包含它自己的template.php文件和其父主题的template.php文件。
  • 如果drupal子主题中.info文件和父主题的设置相同的话,父主题的截图(Screen shot)也是可以继承的。

 

下面的不能被继承:

  • drupal主题的logo.png。不包括上传的logo,因为这是总被用到的。
  • .info文件中的一些设置。包括区域。如果你没有使用默认区域的话,那么子主题的"page.tpl.php"文件中用到的区域,一定要在.info文件中定义过。每个基主题和子主题都可以拥有自己的区域设置。
  • 在高级主题设置(http://drupal.org/node/177868)中,"theme-settings.php"文件中的所有东西。

注意,drupal子主题可以放在基主题目录的外面,也可放在里面。而在Drupal6以前的版本中,它们只能放在父主题目录的里面。

 

Drupal版本: