散言良语

导航

Drupal7 主题模板概述

这篇文章时我转载的,相对来说对Drupal 7 的模板概述比较全面,对新手来说会很有帮助的。

原文地址:http://justcoding.iteye.com/blog/1473359

 

Drupal是一个开源的内容管理系统(CMS) 平台,它是用PHP写成的。主要用于构造提供多种功能和服务的动态网站,这些功能包括用户管理(UserAdministration)、发布工作流 (Publishing Workflow)、讨论、新闻聚合(NewsAggregation)、元数据(Metadata)操作和用于内容共享的XML发布。Drupal有一个优秀的模块化结构,提供了许多模块,包括短消息、个性化书签、网站管理、Blog、日记、电子商务、电子出版、留言簿、Job、网上电影院、论坛、投票 等模块。并且Drupal模块的下载、安装、定制非常方便。

 

一、Drupal主题模板的构造

Drupal主题模板是一些定义描述层的文件组合,你也可以创造子主题(sub-theme),只有.info文件是必须的,当然大多数主题和子主题同样需要其他文件。

.info

.info文件的文件格式类似于INI文件,它是用来配置主题的静态文本文件,每一行都有一个关键词和一个相对的值,中间用“等号”相连(范例:key = value),分号用来注释一行字符。有些关键词使用数组的形式来表现一组关联的值。
.info包含以下关键词:

  1. name 必须
  2. description 推荐
  3. screenshot
  4. version 不推荐
  5. core 必须
  6. engine 多数情况下并须
  7. base theme
  8. regions
  9. features
  10. stylesheets
  11. scripts
  12. php

范例(通常不会这么完整):

name = A fantasy name
//模板名称是必须的,这是用户可读的名字,与主题的Drupal内部名字可以分开单独进行设置。这在这里,字符的限制则很少。
description = Tableless multi-column theme designed for blogs.
//推荐,主题的简短描述
screenshot = screenshot.png
//截图键时可选的,它告诉Drupal主题的缩略图在哪里,在选择主题页面(admin/build/themes)里用到了缩略图.如果.info文件中忽略了该键,那么Drupal就会使用主题目录下面的”screenshot.png”文件。
只有当你的缩略图不叫"screenshot.png",或者你不想把它放到你主题的根目录(比如,screenshot = images/screenshot.png)下面时,才使用该键。
version = 1.0
当发布一个新的版本时,drupal.org会自动为其添加一个版本号。当你为Drupal贡献主题时,你可以忽略该值。如果你的主题没有放到drupal.org上的话,你可以为你的主题指定任意一个版本号。
core = 7.x
//内核,必须的,从Drupal 6.x开始,模块和主题的.info文件都必须指明它们兼容的Drupal内核主版本号。这里设的值将与DRUPAL_CORE_COMPATIBILITY常量相比较。如果不匹配的话,那么主题将被禁用。
engine = phptemplate
//主题引擎,推荐供主题使用。如果没有提供引擎的话,那么主题就是独立的,比如,实现一个”.theme”文件。大多数主题都使用”phptemplate”作为默认引擎。
PHPTemplate负责查找主题用到的主题函数和模板。只有当你理解你在做什么的时候,你才可以忽略这一设置。
base theme = garland
//子主题可以声明一个基主题。这允许主题的继承,也就是说基主题中的资源将被传递下来并在子主题中使用。子主题可以声明别的子主题作为其基主题,也就是允许多重继承的存在。基主题的名字为其在Drupal内部的名字。下面是Garland的子主题Minnelli的相应设置。
regions[header] = Header
regions[highlighted] = Highlighted
regions[help] = Help
regions[content] = Content
regions[sidebar_first] = Left sidebar
regions[sidebar_second] = Right sidebar
regions[footer] = Footer
//我们这样定义主题中的区域,声明键’regions’,紧跟着“[”,接下来是内部名字,接着是“]”,然后是一个等号,右边是用户可读的区域名字。例如,regions[theRegion] = The region name.
features[] = logo
features[] = name
features[] = slogan
features[] = node_user_picture
features[] = comment_user_picture
features[] = favicon
features[] = main_menu
features[] = secondary_menu
//特性
许多由主题控制输出的页面元素,可以在主题的配置页面启用或者禁用. “features”键控制着出现在主题配置页面上的复选框.对于一个主题,如果你不想为其定义某个复选框时,着非常有用.为了删去某个复选框,只需要在”features”中将其删除即可.如果一个也没有定义的话,那么会输出所有默认的复选框.
下面的例子列出了所有由features键控制的元素.通过注释掉primary_links和secondary_links元素,那么站点管理员就不会看到这两个复选框了.
stylesheets[all][] = theStyle.css
stylesheets[print][] = print.css
//传统方式,主题可自动的使用默认的style.css,并且可以在它们的template.php文件中通过调用drupal_add_css()来添加其它样式表。从Drupal6开始,主题也可以通过.info文件来添加样式表。
scripts[] = myscript.js
//传统方式,主题通过在template.php文件中调用drupal_add_js()来添加javascripts脚本。从Drupal6开始,主题也可以通过.info文件来添加javascripts了。
php = 4.3.3
//这个定义了主题支持的PHP最低版本。其默认值源自DRUPAL_MINIMUM_PHP常量,它是Drupal内核所需要的php最低版本。对于一个新的版本,如果需要的话,可以对其进行重新定义。而对于大多数的主题,都不应该添加这一项。
; Information added by drupal.org packaging script on 2011-04-23
version = "7.0"
project = "drupal"
datestamp = "1202913006"

  

二、核心模板 Core Template

默认模板:

These are the default template (.tpl.php) files provided by core in Drupal 7. Documentation on the variables and purpose of these templates are located inside the templates. There is a default set of variables available to all templates. 

In order to override these templates, all you need to do is copy them into your theme folder and clear the theme registry.

To override templates in a more targeted way, see the section on Template Suggestions.

聚合 Aggregator“modules/aggregator/…” 

区块 Block“modules/block/…” 

注意: Drupal 6 版本的 block.tpl.php 属于 “modules/system/…” 一部分.

大纲 Book“modules/book/…” 

评论 Comment“modules/comment/…” 

注意: comment-folded.tpl.php在 Drupal 7 中已被弃用.

Field“modules/field/theme/…” 

注意: field.tpl.php 是Drupal 7 的新模板.

论坛 Forum“modules/forum/…” 

注意: forum-topic-navigation.tpl.php 在 Drupal 7 中已被弃用.

节点 Node“modules/node/…” 

在网页的顶层显示Drupal的管理界面 Overlay“modules/overlay/…” 

注意overlay.tpl.php 是Drupal 7 的新模板.

投票 Poll“modules/poll/…” 

注意: 表单模板 poll-results-block.tpl.php 和 poll-bar-block.tpl.php 在 Drupal 7中被改名添加双破折号.

档案 Profile“modules/profile/…” 

搜索 Search“modules/search/…” 

注意search-theme-form.tpl.php 在 Drupal 7 中已被弃用.

系统 System“modules/system/…” 

注意: box.tpl.php 在 Drupal 7 中已被弃用. html.tpl.php 和 region.tpl.php 被添加.

分类法 Taxonomy“modules/taxonomy/…” 

注意: taxonomy-term.tpl.php 是Drupal 7 的新模板.

工具栏 Toolbar“modules/toolbar/…” 

注意: toolbar.tpl.php 是Drupal 7 的新模板.

用户 User“modules/user/…” 

注意:如果想重写这些模板,就将tpl.php文件复制到模板目录修改即可。我最开始重写html.tpl.php文件,不论怎么改,怎么刷新都没有反应,后来找到了清理Drupal缓存的方法:db_query("DELETE FROM {cache};");,将这段代码复制到模板目录的template.php中即可,运行后就可以看到效果了,使用后记得删除它。

 

来源:http://project.qqworld.org/archives/823

 

 

主题是一系列定义表示层的文件。你还可以建一个或多个子主题(sub-themes)来改变一个主题,只有.info文件是必须的,但很多主题和子主题都会使用一些其它的文件。下图表示了在一个典型主题和子主题的文件结构:

 

theming requirements

.info (required)

Drupal所必须靠.info文件才能看到你的主题。原数据,样式表,JavaScripts,区块区域和其它内容可以在这里定义。但其它内容全部是可选的。

主题的内部名字也是继承于这个名字,例如,如果它的名字命名为 "eureka.info",则Drupal会将该主题的名字作为“eureka”看待,(注:以前的版本可能以文件夹的名称作为主题名称)

模板文件 (.tpl.php)

这些模板用作为 xHTML 标记和 PHP 变量。在某些情况下,它们还输出其他类型的数据,例如xml rss。每一个 .tpl.php 文件处理特定的可主题化数据的输出,而有些时候,它能通过“ 这些建议处理多个multiple .tpl.php 文件。它们是可选的,如果在你的主题中没有这些文件,则会回退到缺省的输出。在这些文件中尽量控制住复杂的逻辑。在很多情况下,应该是简单的xHTML 标记和PHP变量。在核心和贡献模块中有许多的这些模板文件。把它们拷到你的主题目录中会使Drupal读取你的这个版本。

注: The 主题注册有关于存在的主题数据的缓存信息。当你添加 移除或相关主题文件或功能函数时,你需要重置它。

template.php

对所有的条件逻辑和输出数据的处理过程,有template.php 文件。它不是必须的,但是保持.tpl.php文件整洁,常习惯于让 预处理器在产生变量前同.tpl.php文件中的标记合并。 自定义函数 重裁主题函数或者其它自定义的原始输出都可以在这里完成。这个文件必须使用PHP的开始标记 "<?php"打头。而结束标记并不需要,并且也建议你略过它。

子主题

表面上,子主题同其它主题的行为是一样的。唯一区别是它继承了父主题的资源。要创建一个,则在.info文件中需要有一个“基主题”入口。在这里,它可以从父主题继承资源。还可以有多层的继承;例如,子主题可以声明其它的子主题作为它的基主题。对此没有固定的限制。

Drupal 5 以前的版本需要子主题目录在父主题目录中,现在不需要了。

其它s

  • 要让主题能运行,图标和截图不是绝对需要,但建议有,特别是当你将主题贡献到Drupal库中时。截图会显示在内部的主题管理页面,以及如果有相应权限的话用户账号设置中可以选择主题。更多信息请参见 截图指南
  • 为支持管理UI设置或在图标,搜索,使命等等上面的 "特性" ,可以使用 "theme-settings.php" 文件。这是一个高级特性,更多的信息参见手册中的 高级设置
  • 对于 颜色模块支持,需要一个有 "color.inc" 文件及相关文件的目录 "color"来支持。
    • 如果你想使用核心主题来做的话,使用 子主题 或者拷贝一份重命名一下。 强烈不建议直接修改Garland 或 Minnelli。因为它们要用来安装和更新过程。
    • 所有非核心的或者对核心进行修改的主题应该安装在 "sites/all/themes" 目录下以同核心文件分开。如果你用一套Drupal代码计划运行多个站点,你可以将主题分别放在特定的站点目录下,参见 多站点安装.

posted on 2012-09-14 15:19  散言良语  阅读(506)  评论(0编辑  收藏  举报