原文地址:https://www.drupal.org/node/171194
一个Drupal主题就是一些定义前端页面展示的一些文件的集合。你也可以为该主题添加“子主题”(sub-themes)或者修改这个主题。只有.info文件是必需的,但是通常情况下,每个主题都包含很多其他文件;下图展示了典型的主题及子主题中的文件结构。
Drupal 6
Drupal 7
.info
唯一的绝对必需文件,包含了整个主题的元数据(meta data)、样式表(CSS)、脚本(JavaScript)、区块位置定义等信息;这些信息都是必要的。有些相当于Joomla模板中的templateDetails.xml文件。
同时呢,主题的系统内部名称也是通过这个文件定义的。如果我们将.info文件命名为“drop.info”,那么在后台里面,系统就会将当前模板标识为“drop”。
需要注意的呢,是Drupal 6与5在.info文件方面有重要的区别,对于Drupal 5,该文件只用来做模块方面的事情。
template files(.tpl.php)
这些以.tpl.php为后缀的文件就是“模板”文件了,用来定义不同类型页面(page)或节点(node)等的xHTML和PHP的输出。有时呢它们还可以定义其他类型的数据,比如xml rss。
每一个模板文件都负责一个可定制的输出部分,比较常用的一种手法是通过suggestions机制进行多模板文件自动匹配覆盖;这部分内容将来我们会说到。
几乎所有的模板文件都是由简单直接的xHTML标记与PHP变量构成,我们可以很方便的针对自己的输出需求进行编辑。和其他拥有模板覆盖机制的CMS相同,在Drupal系统中原生包含这些模板文件,而存在于当前主题文件夹中的模板文件即是用作模板输出覆盖的。
需要注意的是,主题注册机制(theme registry)会缓存主题的数据信息,每当我们添加或修改了主题文件或功能的时候都需要清空缓存;Zen主题会帮助我们在每次修改之后自动搞定这个问题,对主题开发工作很有帮助。
template.php
可将输出时所用到的所有条件逻辑和数据处理,都放到template.php 文件中。该文件不是必需的,但是它能使.tpl.php文件保持整洁,在这里,可以对.tpl.php文件中的PHP变量进行预处理。定制函数,覆写的主 题函数或者其它对原始输出的外观定制函数,都可以放到这里。这个文件开头必须是PHP开始标签"。
Sub-themes (子主题) 在表面上,子主题和其它主题是一样的。唯一的区别是,它们继承了父主题的资源。为了创建一个子主题,在.info文件中必须包含"base theme"项。这样它就可以继承来自于父主题的资源了。继承可以是多重的;一个子主题可以是另一个子主题的父主题。对此没有进行限制,可以一直继承下去。 Drupal 5以及更低版本中,子主题需要位于父主题下面的子目录里面。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),可以了解到所有可以放置主题的目录。