在Drupal中,内容和设计分开处理。内容存储在数据库中,而主题系统负责呈现设计和样式。当前大部分CMS都采用这种前后台分开的方式,因为这样可以在重复利用网站后台功能的前提下,开发出不同的网站前台样式,以更灵活的方式去满足不同的设计需求。
在Drupal中任何非核心自带主题或者经过修改的核心主题都应该放在"sites/all/themes"目录中。让我们来了解一下这个目录下面的基本文件结构——这是学习Drupal主题的首要任务。Drupal主题是由.info文件、template.php文件、模板文件(tpl.php)和CSS、JS及图片文件组成的。
- .info 文件——所有Drupal主题都必须包含这个文件,但内容可以不一样。它描述Drupal主题系统:主题名字、适用版本、全局引用的CSS和JS文件以及对区域(region)的定义。有一些主题的info文件只包含了一些简单的信息,所以很短;但是还有一些主题的info文件有上百行之多,如Omega的子主题。
- Template.php 文件——通常包含主题输出的所有逻辑判断和数据处理,你可以在这里添加自定义函数,也可以用它来有条件引用CSS和JS文件。最重要的一点是,你可以用它来覆写或者扩展核心或者附加模块所提供的功能。比如,Drupal默认是不能根据内容类型来定制模版的。但是如果你想实现这个功能,你就可以在Template.php 文件中加入相关代码。这些与Drupal的钩子机制有关,以后会详细讲到。Template.php 文件并不是必须的,但是使用它的好处是能让模板文件结构更加整洁,避免了在模板文件中添加各种逻辑判断,还可以通过预处理函数在变量传递给.tpl.php文件进行输出之前对数据进行预处理。另外,这个文件应该由"<?php"开头,但是并不需要结尾标签,而且官方也推荐你不要写结尾标签。
- 模板文件(tpl.php)——每个Drupal页面都是由多个模板文件在主题机制的作用下共同渲染出来的。html.tpl.php 、node.tpl.php、 block.tpl.php 和 region.tpl.php 都是常见的模板文件。但是,它们不一定会出现在你的主题中。默认情况下,这些模板文件由Drupal核心、附加模块或者基主题提供。只有当你想要修改默认模板文件的时候,你才需要把它们从对应的模块中复制到你自己的主题文件夹中,并修改它们。——这个过程就叫作模板文件的覆写,请注意,不是直接修改,而是在主题文件夹中覆写。一般来说,模板文件中既包含HTML标签也包含PHP变量。这些变量涉及到方方面面的东西,从提供当前用户信息到为页面添加一个面包屑导航,以后会详细讲到。
- 其他文件——我们知道网页前端代码由HTML+CSS+JS组成。Drupal主题中的CSS+JS与普通的静态网页代码中的CSS+JS代码在功能上没有任何区别。它们是主题文件的重要成员。对于Drupal新手来说,不要在模板文件中引用CSS和JS文件,你应该在.info 文件或者Template.php 文件中引用它们。具体的引用方法,以后会详细讲。
- screenshot.png 和logo.png图片可以为你的主题提供更好的交互界面,比如screenshot.png 能让管理员在启用你的主题之前,就能大致知道主题的效果。当然,除非你要把你的主题提交到官网,它们不是必须的。
- theme-settings.php文件——用于控制主题设置界面的文件,我们会在第五章中详细介绍。