主题文件概述
#主题文件概览
主题是对表达层的定义,由一系列文件组成。也可以为某个主题创建一个或更多的子主题或修改一个主题。只有.info文件是必要的,不过大多数主题或子主题会使用另外的一些文件,下图说明了一个典型的主题或子主题中会包含的内容:
Drupal 6
Drupal 7
.info(必须)
主题中,所有对Drupal需要的信息都存在于”.info”文件之中。主题所需的包括元数据、样式表、JavaScript、区块等信息也都在这一文件中定义。所有其他都是可有可无的。
主题的内部名称也是从这个文件来的。例如,如果命名为”drop.info”,则Drupal会认为这个主题的名字叫做drop,Drupal 5或者更早的版本会使用目录名作为主题名。
Info文件是在Drupal 6中开始的,Drupal 5中只在模块中使用。
模板文件(.tpl.php)
模板是由(x)HTML标记和PHP变量构成的。在一些特例中,也可能输出其他格式的数据,例如xml rss。每个.tpl.php文件负责输出一种特定的可渲染的数据,在某种情况下,使用模板建议,可能出现多个.tpl.php对应同一种数据的情况。这些都是可选的,如果你的主题中不存在合适的对应关系,则会使用标准输出。在这些文件里,需要尽量避免使用复杂逻辑,大多数情况下,这里只应该由(x)HTML标记以及PHP变量构成。核心和模块目录中也会存有少量的tpl文件,把它们拷贝到你的主题目录中,就能够让Drupal使用你的版本了。
注意:主题注册表会缓存主题数据。所以当对主题文件进行修改之后,要进行复位。(就是常说的清空缓存)
template.php
template.php文件用来处理所有输出中的判断逻辑和数据加工工作。这个文件不是必须的,不过对于保持.tpl.php文件的整洁是至关重要的:他可以在变量传递给.tpl.php文件进行输出之前进行加工。自定义函数、重写主题函数以及其他对原始输出进行自定义的过程都应该在这里完成。这个文件必须用<?php
标记开始,不过结束标记不是必须的,推荐省略掉。
表面上看,子主题跟其他主题差不多。唯一的区别是,它们从父主题继承资源。要创建一个子主题,必须在info文件中指定一个”base theme”(基主题)。多级继承也是允许的,也就是说一个子主题可以声明另外一个子主题为自己的父主题,继承的层次并无硬性限制。
Drupal 5以及更总的版本要求子主题放置在父主题的子目录中,更高版本没有这种规定。
其他
Logo和截图对主题的功能是完全没有影响的,不过推荐提供,尤其是在想要把你的主题贡献到Drupal仓库的时候。在主题管理页面,用户帐号中的主题选择页面都能看到截屏。可以在主题截图指南中获得更多相关信息。
如果你希望在一个核心主题的基础之上工作,可以使用子主题,或者拷贝一个主题并进行重命名。Bartik、 Garland或者Minnelli这几个主题在安装或者升级的过程中会用到,直接对这些主题进行修改是应该严格禁止的。
一个非核心或修改过的核心主题应该安装到”sites/all/themes”目录来同核心主题区分开来。如果你计划运行多站点模式,可以让主题仅对某个指定站点可用,《多站点安装》讲解了更多的这方面的内容。
Drupal 6中page.tpl.php包含了完整的html结构,在Drupal 7中引入了html.tpl.php。缺省情况下,这些文件保存在/modules/system目录中,要覆盖或改变这些内容仅需把这些文件拷贝到自定义主题目录下即可。