欢迎莅临阿Q的项目

专业WP商业设计开发销售中心

[手册]Drupal 7 主题模板制作指南

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

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

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

译者:葛红儒, Think in Drupal

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

sub-theme_branching

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

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

[syntaxHighLighter brush="shell"]

base theme = themeName

[/syntaxHighLighter]

 

下面的将被继承:

  • 所有在父主题中定义的样式表(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主题的.info文件

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

译者:葛红儒 ,Think in Drupal

.info配置文件是在Drupal6中新赠的,每个主题都必须有一个.info文件.该文件应该放在你主题的目录下面.如果没有该文件的话,Drupal就找不到你的主题. .info文件的后缀名必须为".info".

主题在Drupal内部的名字源自于这个文件.例如,如果文件名为drop.info",那么在Drupal内部,主题名字就为"drop".名字里面不要包含奇怪的字符,这是由于在Drupal中,许多PHP函数都是以主题名打头的,所以主题名和函数名存在同样的限制。起始字符必须为alphabetic字母,不能包含空格,标点等字符。可以包含下划线,但是不能包含连字符。数字字符也是允许的,但不能出现在首位。

注意:

  • 警告!模块的内部名称如果与主题的内部名称重名的话,那么你的站点将不能工作。因为可能会造成同名函数的存在,这在PHP中是非法的。每个安装了的部件(模块或者主题)都必须有一个唯一的名字。
  • .info文件中的内容是缓存在数据库中的,所以对它的修改不会在Drupal中立马生效。(不要与主题注册表的缓存相混淆了。)为了清除缓存,须这样做:
    1. 导航到"Administer > Site configuration > Performance",点击"clear"按钮。
    2. 如果启用了devel区块(安装了devel模块的话),点击"Empty cache"(“清空缓存”)链接。
    3. 然后导航到主题选择页面"Administer > Site building > Themes"

语法与INI(http://en.wikipedia.org/wiki/INI_file)文件类似。.info文件就是一个用来配置主题的的静态文本文件。文本文件的每一个行就是一个键值对(key-value),其中键位于左边,值位于右边,而中间则有一个等号。(例如:key = value)。分号是用来注释的。有些键使用了特殊的语法,带有中括号[],用来构建一列关联值,也就是我们常说的“数组”.如果你不熟悉数组的话,模仿Drupal默认.info文件中的例子,根据例子中的解释,完全可以依葫芦画瓢,得到自己的数组了。

Drupal可以识别下面所列的键。如果.info文件没有设置的话,Drupal将为其使用默认值(http://drupal.org/node/171206)。可参看核心主题中的例子(http://drupal.org/node/171205#example#example)。

drupal主题的.info文件(1)

原文: http://drupal.org/node/171205
译者:葛红儒,Think in Drupal
name (required)  名字(必须)
这是用户可读的名字,与主题的Drupal内部名字可以分开单独进行设置.这在这里,字符的限制则很少.
name = Un tema nombre de fantasia
description (recommended)  描述(推荐)
主题的简短描述.你可以在页面"Administer > Site building > themes"看到主题的描述.
description = Tableless multi-column theme designed for blogs.
screenshot 截图
截图键时可选的,它告诉Drupal主题的缩略图在哪里,在选择主题页面(admin/build/themes)里用到了缩略图.如果.info文件中忽略了该键,那么Drupal就会使用主题目录下面的"screenshot.png"文件.
只有当你的缩略图不叫"screenshot.png",或者你不想把它放到你主题的根目录(比如,screenshot = images/screenshot.png)下面时,才使用该键。
screenshot = screenshot.png

version (recommended) 版本(推荐)
当发布一个新的版本时,drupal.org会自动为其添加一个版本号。当你为Drupal贡献主题时,你可以忽略该值。如果你的主题没有放到drupal.org上的话,你可以为你的主题指定任意一个版本号。
version = 1.0
core (required)  内核(必须)
从Drupal 6.x开始,模块和主题的.info文件都必须指明它们兼容的Drupal内核主版本号。这里设的值将与DRUPAL_CORE_COMPATIBILITY常量相比较。如果不匹配的话,那么主题将被禁用。
core = 6.x
drupal.org的打包脚本,将根据每个发布版本的Drupal内核兼容性设置,自动设置该值。所以从drupal.org下载下来的主题,设置总是正确的。然而,对于直接通过CVS部署的Drupal站点来说,如果你将这一修改提交到drupal主题的.info文件中去的话,将会很有帮助。它也能够非常方便的帮用户指出,主题兼容CVS的HEAD中的哪些内核版本。
engine (recommended) 引擎(推荐)
主题引擎,供drupal主题使用。如果没有提供引擎的话,那么drupal主题就是独立的,比如,实现一个".theme"文件。大多数主题都使用"phptemplate"作为默认引擎。
PHPTemplate负责查找drupal主题用到的主题函数和模板。只有当你理解你在做什么的时候,你才可以忽略这一设置。
engine = phptemplate

base theme 基主题
子主题可以声明一个基主题。这允许主题的继承,也就是说基主题中的资源将被传递下来并在子主题中使用。drupal子主题可以声明别的子主题作为其基主题,也就是允许多重继承的存在。drupal基主题的名字为其在Drupal内部的名字。下面是Garland的子主题Minnelli的相应设置。
base theme = garland
更多细节可参看子主题,它们的结构和继承(http://drupal.org/node/225125)。

regions 区域
我们这样定义主题中的区域,声明键'regions',紧跟着“[”,接下来是内部名字,接着是“]”,然后是一个等号,右边是用户可读的区域名字。例如,regions[theRegion] = The region name.
如果没有定义区域的话,那么使用下面的默认值。你可以根据自己的需要覆写这些值。

regions[left] = Left sidebar
regions[right] = Right sidebar
regions[content] = Content
regions[header] = Header
regions[footer] = Footer
更多细节可参看,“区块,内容和它们的区域”(http://drupal.org/node/171224)。

features  特性
许多由主题控制输出的页面元素,可以在主题的配置页面启用或者禁用. "features"键控制着出现在主题配置页面上的复选框.对于一个主题,如果你不想为其定义某个复选框时,着非常有用.为了删去某个复选框,只需要在"features"中将其删除即可.如果一个也没有定义的话,那么会输出所有默认的复选框.
下面的例子列出了所有由features键控制的元素.通过注释掉primary_links和secondary_links元素,那么站点管理员就不会看到这两个复选框了.
features[] = logo
features[] = name
features[] = slogan
features[] = mission
features[] = node_user_picture
features[] = comment_user_picture
features[] = search
features[] = favicon
; These last two disabled by redefining the
; above defaults with only the needed features.
; features[] = primary_links
; features[] = secondary_links
更多信息参看”定制主题设置”(http://drupal.org/node/221905).

stylesheets 样式表
传统方式,主题可自动的使用默认的style.css,并且可以在它们的template.php文件中通过调用drupal_add_css()来添加其它样式表。从Drupal6开始,主题也可以通过.info文件来添加样式表。
stylesheets[all][] = theStyle.css
更多信息可参看“样式表”一节(http://drupal.org/node/171209)。
scripts 脚本
传统方式,主题通过在template.php文件中调用drupal_add_js()来添加javascripts脚本。从Drupal6开始,主题也可以通过.info文件来添加javascripts了:
scripts[] = script.js
更多信息参看  JavaScript & jQuery一节。
php
这个定义了主题支持的PHP最低版本。其默认值源自DRUPAL_MINIMUM_PHP常量,它是Drupal内核所需要的php最低版本。对于一个新的版本,如果需要的话,可以对其进行重新定义。而对于大多数的主题,都不应该添加这一项。
php = 4.3.3

Drupal核心主题中的.info文件例子

原文: http://drupal.org/node/171205
译者:葛红儒,Think in Drupal
Garland:

; $Id: garland.info,v 1.5 2007/07/01 23:27:32 goba Exp $
name = Garland
description = Tableless, recolorable, multi-column, fluid width theme (default).
version = VERSION
core = 6.x
engine = phptemplate
stylesheets[all][] = style.css
stylesheets[print][] = print.css

; Information added by drupal.org packaging script on 2008-02-13
version = "6.0"
project = "drupal"
datestamp = "1202913006"

Minnelli sub-theme of Garland.:
; $Id: minnelli.info,v 1.7 2007/12/04 20:58:44 goba Exp $
name = Minnelli
description = Tableless, recolorable, multi-column, fixed width theme.
version = VERSION
core = 6.x
base theme = garland
stylesheets[all][] = minnelli.css

; Information added by drupal.org packaging script on 2008-02-13
version = "6.0"
project = "drupal"
datestamp = "1202913006"

注意,从行“; Information added by drupal.org packaging script on 2008-02-13”开始直到结束,这都是由drupal.org的打包脚本自动添加的。你一定不要手工添加project(项目)和datestamp(时间戳)键。手工添加version(版本)键(第一个),那么就可以允许直接从CVS建立起来的站点使用你的主题了。
.info文件的默认值。

drupal主题.info文件的默认值

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

译者:葛红儒,Think in Drupal

下面是假定的默认值。如果它们没有被定义的话,drupal主题将自动使用这些值。

注意:这些默认值是作为一个组来共同起作用的。换句话说,仅仅使用regions[sub_header] = Sub-header来覆写一个区域的话,将会造成其它默认区域的消失。为了使用它们必须对它们进行重新定义。对于"stylesheets"也是一样的。尽管从技术的角度来看,它不是一个组,定义另外一个样式表,除非你重新对"style.css"进行定义,否则是找不到它的。

regions

regions[left] = Left sidebar
regions[right] = Right sidebar
regions[content] = Content
regions[header] = Header
regions[footer] = Footer
features

features[] = logo
features[] = name
features[] = slogan
features[] = mission
features[] = node_user_picture
features[] = comment_user_picture
features[] = search
features[] = favicon
features[] = primary_links
features[] = secondary_links
stylesheets

stylesheets[all][] = style.css
scripts

scripts[] = script.js
screenshot

screenshot = screenshot.png
php (minimum support) (支持的最低版本)

DRUPAL_MINIMUM_PHP是一个常量。它指出了运行Drupal所需php的最低版本。

php = DRUPAL_MINIMUM_PHP

如果喜欢本文,请分享给朋友们