欢迎莅临阿Q的项目

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

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

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

drupal主题化介绍

译者:葛红儒,Think in Drupal

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

Drupal的强大和灵活性是众所周知, 如果你想一下子就完全掌握它的话,这将是一个难于登天的事情.解决主题化问题的方式有很多,但是不是每种方式都是值得推荐的.掌握"Drupal 的方式"可以精简你的代码,从而使其更易维护. 如果您选择打破规则,走自己的路,那么首先了解"Drupal 的方式",将会增大你的成功机会。

这并不意味着, 为了制作主题,你必须全面的掌握Drupal.你只需要掌握完成任务所必需的技能就可以了,但是,你的站点的设计越复杂,你越需要了解drupal的主题机制. 本手册的目的,,在于揭示drupal主题制作(theming)的所有方面。一些地方比较难,适用于技术高手,而一些地方则比较容易,适用于初学者。在下面的部分中,我们将对内容进行展开,从每个主题开发者都应该熟悉的总体概况,到更具体的细节,有时,需要更多的技术解释。

在继续阅读本文以前,你需要了解一下的相关知识:

• 了解xHTML 和CSS

• 如果你的主题需要脚本支持的话,JavaScript 和jQuery也是必备的

• Drupal中所用到的术语(http://drupal.org/node/21951)

在某些情况下,会用到PHP的知识,但是基于纯CSS的主题,可以完全避免使用PHP。 根据你主题目标的不同,它可能非常简单,也可能非常复杂。Drupal是非常灵活的,所以你必须仔细的考虑你要做什么。你首先要考虑的是网站的需求。制作一个特定需求的主题,与制作一个通用的主题相比,要容易很多。 如果你碰到了一个难题,请阅读疑难解答(http://drupal.org/node/37156),或者在论坛的主题制作版面或者IRC @ #drupal-themes上向别人请教。请阅读“如何高效利用IRC”(http://drupal.org/node/108355)一文。

drupal OG首页主题化

更多资源参看: http://drupal.org/node/307828

OG首页的主题化,我想修改一个OG首页的外观,但是不知道怎么实现,打算用panels,但是对这个drupal模块还不是很熟,另外就是OG在Panels方面还不成熟.

OG首页就是一个节点类型的主题模板,因为一个小组就对应一个节点,从og\theme下面拷贝node-og-group.tpl.php到当前的drupal主题目录下面,并不生效,因为我已经为该类型的节点创建俄一个模板,对该模板重命名,现在node-og-group.tpl.php起作用了.

其实我想要的就是控制content中的group post节点的列表,在网上找了半天,都没有找到答案,有人和我遇到了同样的问题,而且没有人解答。how to theme og home page?? http://drupal.org/node/344484 。

问题的关键点就是,这个$content把所有的东西都属出来,怎么分开显示呢?由于og首页的drupal主题化是第一次实现,所以感觉有点神秘,因为它提供的默认模板node-og-group.tpl.php。

没有办法,只好print_r了,一个一个的找,最后找到了$node->content[view]['#value'],现在再看这个问题,其实很简单,只是刚开始自己把它想复杂化了。那就是使用group的节点类型就可以了,和普通的CCK节点类型的主题化完全一样。

相关联接: Think in Drupal

drupal主题化概述

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

译者:葛红儒, Think in Drupal/

在软件开发中,将逻辑层和表示层分开,是很常见的.其中原因很多,最明显的原因是,后台的业务逻辑层所需要的技能,与前台表示层所需要的技能相比,有很大的不同.作为一个主题开发者,你可以在许多方面控制用到的数据,但是它局限于输出和显示.而只有Drupal内核模块和其他模块才用来负责输入.例如,一个模块可以实现一个带有默认外观的表单,来处理用户输入,并将其保存到数据库中.而Drupal主题(theme)的作用是仅仅用来重写默认外观. 在Drual中,这一抽象层是通过theme(主题)函数实现的.主题函数就是一个管道,将逻辑层与表示层连在一起.在主题引擎(theme engines)之上,有一个一个可选的中间层,用来选择标记语言比如PHPTAL或者Smarty.它还允许主题控制所有表示层的标识字体.而主题引擎像标记语言一样,都是可选的. PHPTemplate是默认的主题引擎.从名字我们就可以看出,它在xHTML中输出变量时,使用PHP作为标记语言. 从Drupal6开始,创建主题引擎的需求已被充分的淡化。

theme_tech_stack_0

从上图可以看出,逻辑层和主题层(表示层)都可以为输出实现一个主题化的外观,(存在极个别例外情况)只有主题层才能对底层进行覆写。主题引擎(Theme engine)可以覆写内核模块和可选模块中的主题输出,而主题(图中最上方的theme一层)对下面的每一层都可以进行覆写。

注意,PHPTemplate引擎并没有覆写任何输出,但是其他主题引擎可以这样。也存在特殊情况,一个模块可以影响输出,或者对任何东西都可以覆写,但是他只用在非常特殊的情况下,而在大多数情况下,都遇不到这种情形。例如,devel的主题者模块(themer module)就属于这种特例,它是用来帮助主题开发的。更多细节将在接下来的章节中展开。 如果你的主题是由CSS完全控制的,也就是纯CSS主题,那么这里所讲的大部分内容你都不需要关心,但是当需要修改标记文本时,理解如何找到输出的源头,对于你的工作来讲,是非常有帮助的。

• 注意,Drupal的内核和第3方模块,总是使用可主题化的函数和模板文件来输出表示层的文本的。千万不要在这些模块里面直接对主题进行修改,如果这样做的话,当你需要升级时,情况就会变得复杂起来。这样做就是所谓的“分支”("forking")。开源的强大之处在于,让开源社区来负责修正臭虫(bug)和添加新的特性。一旦你建立了一个分支,也就意味着你创建了一个封闭的系统,这样你就脱离了社区。Drupal提供了各种功能,用来覆写表示层。如果你必须要在模块中直接对主题进行修改的话,要么是你做错了,要么是你发现了一个臭虫。如果是后者的话,请填一个臭虫报告。如果提供一个补丁来修正该问题的话,那是最好不过的了。

• 对于那些熟悉drupal以前版本的PHPTemplate引擎朋友来说,在Drupal6中,PHPTemplate引擎中的大部分函数都被移到了更底层的内核中。现在PHPTemplate仅仅用来 发现主题函数和该主题函数用到的模板文件。与其说它是一个主题引擎,不如说是一个主题帮助函数。PHPTemplate是最初由Adrian Rossouw为Drupal4.7编写的。Drupal6中的修改是由Earl Miles完成的。论坛中的一个帖子(http://drupal.org/node/7133)提供了最初创建引擎的原因,而在http://drupal.org/node/130987 则提供了Drupal6中的问题列表。

对一个Drupal主题的剖析

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

译者:葛红儒, Think in Drupal

phptemplate theme:

theme_anatomy_0

.info (必须)

".info"文件是必须的,当Drupal 寻找你的主题时,要用到这个文件.在这里可以定义:元数据,样式表, JavaScripts,(区块)区域,以及其它.而其它文件则是可选的.

主题的内部名称也是由该文件衍生出来的.例如,如果它名为”drop.info”的话,那么在Drupal中,"drop"就是主题的名字。而在Drupal5以及更早的版本中,Drupal使用主题文件夹名作为主题的名字。

Info文件是Drupal6引入的新的特性。在Drupal5中,.info文件仅适用于模块。

模板文件(.tpl.php)http://drupal.org/node/190815

这些drupal模板文件,都是由xHTML和PHP变量构成的。在一些情况下,它们也可以输出其它的数据类型——比如xml rss。每个.tpl.php文件负责特定一块数据的输出,有时,根据suggestions (建议),它可以处理多个.tpl.php文件。模板文件是可选的,如果在你的主题中不存在的话,那末就会使用默认输出。注意,在这些文件中,不要包含复杂的业务逻辑。一般情况下,只需要包含xHTML标签和PHP变量。在内核和可选模块所在的目录中,存在着一些模板文件。将它们拷贝到你的主题目录下面,Drupal将会使用主题目录下的模板文件来代替模块里面的。

注意:theme registry(主题注册表)对可用主题数据信息进行了缓存。当你在你的drupal主题中添加或者删除模板文件(或者主题函数)时,你需要重置主题注册表,以清空缓存。

template.php

可将输出时所用到的所有条件逻辑和数据处理,都放到template.php文件中。该文件不是必需的,但是它能使.tpl.php文件保持整洁,在这里,可以对.tpl.php文件中的PHP变量进行预处理。定制函数,覆写的主题函数或者其它对原始输出的外观定制函数,都可以放到这里。这个文件开头必须是PHP开始标签"<?php",但是结束标签不是必须的,最好将其忽略。

Sub-themes (子主题)

在表面上,子主题和其它主题是一样的。唯一的区别是,它们继承了父主题的资源。为了创建一个子主题,在.info文件中必须包含"base theme"项。这样它就可以继承来自于父主题的资源了。继承可以是多重的;一个子主题可以是另一个子主题的父主题。对此没有进行限制,可以一直继承下去。

Drupal 5以及更低版本中,drupal子主题需要位于父主题下面的子目录里面。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),可以了解到所有可以放置主题的目录。
  • 子主题,它们的结构和继承
如果喜欢本文,请分享给朋友们