Tuesday, August 08, 2006
Drupal 宝典
Drupal 是一个优秀的建站平台,这里将陆续做一些介绍。
http://drupal.org/
= Drupal 简介 =
随着PHP技术的飞速发展,搭建一个专业网站已经变得越来越容易。
特别是各种优秀CMS(内容管理系统)的出现,使得网站的开发不需要编程,你所做的主要工作就是下载一些已有模块,下载一些主题风格,定制一些模块,定制一些主题风格,一个专业的网站就建好了。
优秀的CMS系统包括:Drupal、Typo3、XOOPS、TikiWiki、Mambo、PHP-Nuke等,具体见:
http://www.opensourcecms.com/
目前国内比较流行的CMS包括Mambo和XOOPS,他们的国内社区见:
http://www.mambochina.net/
http://xoops.org.cn/
Drupal是一个新的CMS系统,它虽然没有Manbo流行,也没有XOOPS强大,但却是一个非常易用的内容管理系统,可做为个人或大型网站发布、管理、组织不同内容的平台,包含了广为人知的weblog、论坛、投票、新闻聚合、站内搜索、电子商务等功能。
国外有许多优秀的网站采用了Drupal平台,这里列举其中三个:
http://www.spreadfirefox.com/
http://www.hermann-uwe.de/
http://www.hivemindz.com/
国内也有一些网站采用了Drupal平台,这里也列举其中三个:
http://bmc.tea.to/
http://blog.c3crm.com/
http://blog.linuxbyte.net/
= Drupal 的功能特点 =
Drupal 应该翻译成什么呢?呵呵,觉得还是翻译为“水滴”比较好。Drupal这个词其实是荷兰语Druppel的英语发音,而Druppel在荷兰语里面是Drop也就是水滴的意思。Drupal的编写者最初选择这个词实在是意外,他本来想注册一个名为“Dorp” 的域名,Dorp在荷兰语里是“小村庄”的意思,英语里其实也有这个名词,但是他一不小心犯了个错误,于是就注册成了Drop,于是也就有了后来的 Drupal。呵呵,所以汉语翻译成“水滴”还是蛮贴切的,听起来也不错了。
有的人把Drupal当作是blog系统,我一开始也是这样认为的,其实这只是Drupal的一方面的应用,Drupal是一个功能强大的content manage system(cms),在功能设计上它仿照了phpnuke,xoops等的模块化方式,界面上仿照了blog模式。这个程序以极少的代码实现了非常强大的功能。很多人用“神奇” 两个字来形容它,它是一个完全开放源代码的程序,所以吸引了众多PHP爱好者的目光,很多PHP高手参与了它的开发行列中来了,开发速度非常块,几乎两个月出一个新版本,modules和skins也越来越多。从官方站点有时上千人的在线情况就可以看出它的受欢迎程度。
从总体上看,Drupal有以下功能特点:
+ 搜索引擎友好的URL
+ Drupal有一个优秀的模块化结构,提供了许多模块,包括短消息、个性化书签、网站管理、Blog、日记、电子商务、电子出版、留言簿、Job、网上电影院、论坛、投票等模块。Drupal模块的下载、安装、定制非常方便
+ Drupal提供了强大的个性化环境,每个用户可以网站内容和表现形式进行个性化设置
+ Drupal提供了基于角色的权限系统,没有必要对每个用户进行授权,只需要对角色进行授权
+ Drupal提供的站内搜索系统能对站内的所有内容进行索引和搜索
+ Drupal的模板系统将内容和表现分离,可以很方便地控制网站的外观
+ Drupal提供内建的新闻聚合工具
+ 提供完善的站点管理和分析工具
+ Drupal的Caching机制能有效减少数据库查询次数,从而提高站点性能,降低服务器负荷
= Drupal 安装 =
在安装Drupal前,你需要在服务器上先搭建一个PHP+MySQL环境。
初学者可以在windows上安装一个easyphp,然后什么都有了。专业网站一般是安装LAMP(Linux+Apache+MySQL+PHP)。
这里有一个图形化的Drupal安装指导文件:
http://www.flickr.com/photos/todays/sets/912418/
这里有一个flash的Drupal安装指导文件:
http://www.flickr.com/photos/todays/sets/912418/show/
上面两份安装指导文件写得已经非常详细了,这里只给出一个简单的安装步骤:
+ 下载Drupal
$ wget http://drupal.org/files/projects/drupal-4.6.3.tar.gz
+ 将Drupal安装到web服务器的目录内
$ tar xvzf drupal-4.6.3.tar.gz
$ su
# mv drupal-4.6.3/* drupal-4.6.3/.htaccess /var/www/localhost/htdocs/
# exit
+ 创建Drupal数据库
$ mysqladmin -u root -p create drupal
+ 创建Drupal数据库的表
$ mysql -u root -p drupal < /var/www/localhost/htdocs/database/database.mysql + 修改设置文件 $ vi /var/www/localhost/hodocs/sites/default/settings.php 做以下设置: $db_usr = "mysql://root:password@localhost/database"; (password需要改为root的口令) $base_url = "http://localhost"; 然后就可以使用Drupal了。 = Drupal 中文语言包安装 = Drupal 的设计比较科学,不仅扩展性好,安装语言包也非常方便。 + 先下载官方中文语言包 $ wget http://drupal.org/files/projects/zh-hans-4.6.0.tar.gz $ tar xvzf zh-hans-4.6.0.tar.gz 解压后得到一个 zh-hans.po 文件,这就是中文语言包。 + 让Drupal加载国际化模块 administer->modules->locale 选择打勾,这样管理界面才会出现语言包管理界面
+ 导入中文语言包
administer->localization,选择import导入其他语言包,选择刚刚解压的zh-hans.po文件,然后选择import to:chinese simplified。
+ 选择中文为默认语言
装完语言包后,就会发现现在系统有两个语言包,一个是默认的英文,一个就是刚刚我们导入的中文。
我们只要启动中文语言包,并设置成默认就行,系统的页面马上就会变成中文。
= Drupal 的模块 =
模块化是drupal的一个特色,极大的方便了drupal的扩展和灵活定制的能力。Drupal模块的安装使用也很方便,只要将相应文件复制到modules目录下,就可以在‘管理-设置’里面方便地开启使用了。
Drupal 的模块分为基本功能模块和功能增强模块。基本功能模块是Drupal安装包里自带的功能模块,扩展功能模块则需要到[http: //drupal.org/project/Modules]下载。基本功能模块又分为固定启用的基本功能模块和可选用的基本功能模块,固定启用的模块在 drupal安装后即自动启用。
== 固定启用的模块 ==
- block
用于支持区块的实现
- filter
用于处理内容过滤以便于显示。
- system
用于处理管理员对站点的设置。
- user
用户管理及注册系统。
- watchdog
生成并管理系统日志。
== 基本功能模块 ==
- aggregator:
将drupal变成一个在线的rss订阅器。支持RSS和RDF格式。开启后可定时扫描新闻源自动更新内容(需要crontab支持)。
- archive
支持存档内容的管理与浏览,实现blog常见的日历查询功能,可通过区块显示。
- blog
这个模块让会员发表个人blog,使Drupal变成一个多人blog系统。
- blogapi
支持XML-RPC blog接口,允许用户通过第三方应用程序发表blog。
- book
允许多位会员一起合写一本书。
- comment
开启blog或文章的评论回复功能,并且可以定制评论的权限以及每一篇文章是否允许评论。
- contact
允许注册用户间通过填写‘联络表’发email联系。
- drupal
让用户使用一个 Drupal ID 跨站登录。
- forum
论坛
- help
在线帮助。很多标准模块和功能的帮助都可以在‘管理-帮助’里找到。
- legacy
为升级版本提供向下兼容的接口。
- locale
开启多语言支持,汉化drupal必须开启的模块。
- menu
允许管理员定制,添加新的导航菜单。
- node
所有blog或文章都必须通过node模块来提交和呈现给读者。
- page
用于发布静态页面。
- path
支持URL别名,便于管理记忆。
- ping
在发表新文章的时候通知其他网站。
- poll
开启投票功能。
- profile
开启此模块后,管理员将可以自定义用户注册时的表单项目和格式。
- queue
允许管理员监管文章,所有新提交的文章将先进入监管队列,经过监管员(moderator)考察后决定是否发表。
- search
该模块支持站内搜索。能够很好的支持中文搜索,而且速度很快。
- statistics
记录访问统计信息。
- story
不想把这类文章包括在你的日志里时,就可以通过这个模块实现。
- taxonomy
开启目录分类支持
- throttle
站点节流控制机制。当站点流量过大网络阻塞时可以通过节流设定自动关闭相应模块功能以保证访问响应。
- tracker
跟踪用户的最新发布。
- upload
支持上传文件。
== 功能增强模块 ==
Drupal的功能增强模块太多了,并且每天都在不断增加,这里只列出其中一些主要的功能增强模块:
- acidfree
一个功能完整的多媒体(例如图片、视频)管理系统。
- adsense
显示Google Adsense广告。可以方便的定制显示方式,支持从banner到link等6种显示格式。此外还可以选则对特定用户群关闭广告显示。
- album
影集模块。
- amazon associate tools
Amazon广告工具。
- atom
提供atom种子
- attachement
支持上传附件,可以用来替代Drupal自带的upload模块。不同节点的附件将分开放置,避免了文件重名的问题。
- automember
自动用户权限管理。管理员可以设定不同的标准,自动分配给用户不同的权限。例如只开放有限权限给新注册用户,发表一定数目文章后将自动成为资深用户并得到高级权限
- banner
自动轮换显示广告条。管理员可以方便的查看点击统计,并预设/开启/关闭/批准特定广告,用户则可以查看/修改/上载自己的广告条。
- bbcode
提供bbcode输入格式的支持。
- blog theme
允许用户选择自己blog的外观主题,当其它用户按作者浏览其blog时,看到的将是该blog作者自己选定的外观主题。
- bookmarks
用户可以编辑自己的书签,并通过区块显示。
- buddylist
用户可以编辑自己的好友名单,同时显示‘好友的blog’区块。
- captcha
图灵测试/字符校验模块,防止机器人自动注册
- chatbox
聊天室模块。
- codefilter
方便代码输入,能处理和。
- contact directory
使用户可以添加自己的好友联络名单。
- database administration
提供数据库管理功能。管理员可以通过此模块在drupal界面进行数据库查询/修改/删除等功能。
- e-commerce
一整套电子商务工具。
- event
跟踪事件并通知用户。
- excerpt
摘要模块。Drupal发布内容时只能用正文的开头作摘要,然后根据设定自动截取摘要。
- ezmlm
用户将可以通过该模块订阅相关Ezmlm邮件列表。Ezmlm是一个基于qmail的群发邮件订阅系统。
- feedbak
反馈模块,可用于生成反馈表格收集用户意见或问题。
- flexiblock
让Drupal能随心所欲的摆放区块。
- flexinode
可以用此模块根据需要生成新的自定义节点(node)类型。在此基础上可以有很多灵活多变而非常实际的应用,可以说是drupal扩展模块里功能非常重要的一个。
- front page
用于方便的定制站点首页,可以完全脱离站点外观主题的限制生成个性化的首页。可以显示不同的首页给不同权限的用户,并可插入PHP代码完成更强大的动态显示。
- gallery
用于在线像册管理和展示。
- guestbook
留言簿
- hall of fame
名人堂模块。是对drupal自带的统计(statistic)模块的补充,可以统计站点共几篇文章,多少注册用户,建站时间,流行内容等,还可以显示发文最多用户,评论最多用户等。
- htmlarea
一种所见即所得的输入方式。
- image
像册。支持图片上传,并自动生成缩略图(thumbnail)。图片可以插入到页面中或组合成像册显示。
- img_assist
和Image模块共同使用,通过图形界面窗口更便捷地在节点中插入图片。
- internationalization
自动检测浏览器的编码设定,为匿名用户提供全方位的本地话翻译,包括节点内容界面的翻译。包括一个显示区块方便用户切换语种。
- job search
招聘与求职模块
- jsdomenu
生成多层弹出式菜单
- mail
向特定用户群发送email
- mailhandler
允许注册用户通过email创建/编辑内容或添加评论。
- movie review
网上电影院
- node vote
对文章进行投票
- notification
自动发送邮件通知订阅者内容已更新。
- organic groups
允许用户自行组成小组,每个小组将有自己的主页显示小组成员发布的内容。
- pdfview
生成PDF文件
- photo album
像册模块。
- privatemsg
允许用户间发送私人信息。
- project
项目管理模块。项目组成员可以由此跟踪项目的进展,可以通过email发送项目更新通知。
- quote
用户在添加评论时可以方便的点选引用原文。引用部分用特殊格式显示以作区分。
- quotes
可以用于收集显示名人名言。通过区块随机显示。
- recipe
用于分享菜谱。
- rsvp
可以发送email邀请用户参加特定的事件(event),并可跟踪用户是否查看或接受了邀请。
- site map
显示站点导航图。
- sitemenu
按文章分类显示站点导航。
- smiley
使用表情符,自带了一些基本的表情符,用户可以自己添加。
- SMS gateway
发短信
- spam
防垃圾模块,防止你的blog成为一个实实在在的垃圾堆。
- spam_surbl
对spam模块进行功能增强,使之支持SURBL(Spam URI Realtime BlockList)。
- sql search
此搜索模块不使用drupal自带的搜索索引(search index),而是提供数据库搜寻功能,支持SQL和正则表示式(regular expressions),并提供高级搜寻过滤功能。
- statistics_filter
过滤网站管理员和搜索引擎的访问统计信息。
- stock
显示股票行情。用户可以自定制所显示的股票。
- subscriptions
允许用户订阅任一节点内容,通过email通知该节点的更新以及是否有新的评论。
- survey
可以创建调查问卷,调查结果可以下载为excel格式。
- taxonomy menu
分类系统导航菜单,其格式将和drupal系统导航菜单一致。
- theme editor
直接通过浏览编辑修改外观主题。
- tinyMCE WYSIWYG Editor
一个非常好用的所见即所得文本编辑器,用于编辑输入文章内容。
- trackback
开启trackback支持。
- VIM Color
支持VIM代码高亮(highlight),支持PHP, Perl, C, HTML, JAVA等多种语言。
- voting
投票/评级
- webform
创建‘网络表单’节点类型,可以用于提交调查问卷,投票,注册等。
- wiki
实现wiki功能。
- workspace
我的工作空间模块,提供一个用户专有的工作区,可以集中察看管理自己的文章。
= Drupal 模块安装 =
Drupal 已经自带了许多基本功能模块,在完成 Drupal 的安装后,开启这些模块就可以了。
如果你需要功能扩展模块,则需要到 http://drupal.org/project/Modules 下载并安装这些模块。
步骤非常简单:
+ 下载模块包
+ 解压缩
+ 把模块文件上传到 Drupal 的 modules 目录中
+ 有些模块可能需要运行 mysql 文件创建表
+ 在“管理->模块"中开启这个模块
= Drupal 的主题风格 =
== 模板引擎 ==
Drupal 支持三种模板引擎:xTemplate、PHPTemplate、wgSmarty。xTemplate是Drupal自带的模板引擎,但支持该引擎的主题风格数量不多。其他两个模板引擎需要到 http://drupal.org/project/Theme%20engines 下载。其中基于 PHPTemplate 的主题风格非常多。
推荐使用 PHPTemplage,这个引擎大大加快Drupal的速度,非常有利于自己自定义模板,一些大型的Drupal站点都是用的这个引擎。
PHPTemplage 的安装方法:
+ 下载 PHPTemplate
+ 将解压后的phptemplate目录拷贝到Drupal的themes/engines目录
== 主题风格 ==
“主题”是Drupal站点的基本外貌和感觉。有时一个特定的站点会安装不止一个的主题。如果站点管理员提供了多个主题,你可以为你的帐号选择你喜欢的默认主题。
Drupal的官方站点提供了许多主题风格,具体见:
http://drupal.org/project/Themes
其中,Spreadfirefox是我最喜欢的主题风格,著名的 spreadfirefox.com 使用的就是这款主题。
除Drupal的官方站点外,还有许多其他机构或个人提供Drupal的主题风格,通过Google可以搜索到这些风格。
= Drupal 主题风格安装 =
Drupal 主题风格的安装非常简单:
+ 在 http://drupal.org/project/Themes 下载新的主题风格
+ 阅读主题风格包中的 README 和 INSTALL 文件,看该主题风格包的安装是否需要一些特殊的步骤
+ 检查一下主题风格需要的模板引擎是否已安装
+ 将主题风格上载到Drupal的themes目录中
+ 通过"管理->主题"启用该主题风格,并将其设置为默认风格
= Drupal 界面定制 =
当 Drupal 站点安装好后,有许多方法对站点界面进行个性化的设置和定制:
+ 安装主题风格
主题风格控制了站点的外观和感受,你可以在网上下载Drupal的主题风格,并在"管理->主题"中启用这些风格。
+ 创建你自己的主题风格
如果你不想用别人预先做好的主题风格,而想为自己的站点打造一个完全不一样的外观,你可以通过开发自己的主题风格来达到这个目的。主题风格的开发人员应具备HTML/CSS知识,如果要开发复杂的主题,则需要懂得PHP。
+ 定制导航菜单
页面顶部和底部的菜单可以在"管理->主题->配置->菜单设置"中进行定制,主链接和备用链接中可以直接编写HTML代码。如果主链接为空,Drupal将根据你安装的模块自动建立导航菜单。每个主题风格可以定义不同的导航菜单。
如果是基于PHPTemplate引擎的主题风格,导航菜单的定义方式是为每个菜单进行定义。
+ 定制文字串
可以通过"管理->本地化->管理字符串"来定制本地语言的文本字符串,Drupal中几乎所有的文本字符串都可以修改。
= 主题风格中CSS的定制 =
Drupal的主题定制非常灵活,可以定制每个区块定制的风格。如果懂PHP的话,几乎可以做出可以想得到风格来。
实际上,在大多时候我们主要是通过图片+CSS来定制,这是一种最简单的定制,也不需要懂得太多的PHP知识。
在themes目录下的每个主题目录中,有一个style.css文件。定制CSS的关键是搞清楚CSS元素控制的对象。但许多人搞不清楚CSS元素控制的对象,在这方面花了不少时间。其实只要选对工具,这实际上是非常容易做的。
这个强大的工具就是Firefox。大多数人只知道Firefox是一个浏览器,实际上Firefox提供了大量网页开发的工具。例如:
+ 选定一部分网页内容,通过右键菜单的View Selection Source功能,可以查看选定部分网页的源码。这是一个杀手级的功能,再也不必为在庞大的HTML源码中找不到相应的目标内容而头痛了。
+ 菜单 Tools->Page Info 可以看到非常详细的网页内容,包括表单、链接、多媒体等信息
+ 菜单 Tools->DOM Inspector 可以对网页的HTML、JavaScript、CSS等内容进行很方便的分级浏览
Firefox的功能太多,一时半刻说不完,我们还是回到CSS定制上面来。这需要用到一个Firefox的插件,插件名称是Web Developer,可以在Firefox的网站上下载到这个插件。
安装好Web Developer插件后,就可以用其提供的功能来定位对象的CSS控制元素:
+ 插件的CSS菜单下有一个View Style Information功能非常好用,当你的鼠标电击到网页的某项内容,就能看到该项内容所使用的相关CSS内容。
+ 在Information菜单下有一个Display ID & Class Details功能,能在网页上显示所有的ID和Class信息。
Web Developer插件是专门为网页开发人员提供的一把宝刀,功能太丰富了,你们就慢慢去体会吧。
= Drupal的基本术语 =
在对Drupal做定制前,需要了解一些Drupal的基本术语:
+ Block(区块)
区块一般位于网页两边的侧栏中,用于导航或显示一些附加内容。区块是一种把数据定位到页面的方法之一。各主题风格可以通过block($subject, $content, $region = "main")函数来控制区块的显示风格。
+ Box(盒子)
盒子是Drupal页面内容的容器。每一个盒子有一个标题和一些内容。各主题风格可以通过box($subject, $content, $region = "main")函数来控制盒子的显示风格。
+ Engine(引擎)
引擎是一类特殊的主题,它通过模板来输出HTML内容。
+ Filter(过滤器)
过滤器是做内容过滤的框架。
+ Module(模块)
模块是为Drupal提供扩展功能的代码片段。有些模块是Drupal核心系统的一部分(例如taxonomy和blog模块),扩展模块(例如 weblinks和image模块)则不属于Drupal的核心系统。核心模块已包含在Drupal的下载包中,扩展模块则需要单独下载。
+ Node(节点)
节点是Drupal中最简单又最难理解的一个概念。几乎Drupal中所有的内容都被存储为一个节点。一个节点就是Drupal的一块内容,它可以是投票、报道、书的一页、或一张图片。
+ Permissions(权限)
权限用于控制内容的创建、修改和站点管理等访问。管理员可以将权限赋给角色,将角色赋给用户。一个用户可以属于一个或多个角色。Drupal缺省提供了两种角色:游客和注册用户
+ Style(样式)
样式是主题或引擎提供的CSS文件,用于替换缺省的CSS。
+ Taxonomy(分类)
Drupal通过分类来描述目录系统,用于对网站的内容进行组织和分类。
+ Template(模板)
模板是模板引擎的,普通人可读懂的HTML文件,这些文件有一些特殊的代码,用于产生动态信息。
+ Theme(主题)
主题是包含一些函数的PHP文件,用于提供不同的布局风格。
= 定制自己的首页 =
在"管理->设置->通用设置->默认首页"里可以设置自己的首页,默认值是"node"。它仅仅显示一些被设置为“推荐到首页”的文章。
+ 假设你创建了一个新的节点,包含有非常多的链接和非常复杂的内容,想把这个节点设置为首页。首先找到这个节点的id,假设节点id是83,你只需要将默认首页设置为"node/83"就行了。
+ 假设你想将用户blog设置为首页,则须将默认首页设置为"blog"。
+ 假设你想把论坛设置为首页,则须将默认首页设置为"forum"。
+ ......
== 创建一个新的PHPTemplate主题风格 ==
+ 在Drupal的themes目录下创建一个主题目录,例如mytheme。
+ 在自己的主题目录下创建一个 page.tpl.php 文件
这是唯一的一个必需创建的文件,它重载了theme('page')函数,并输出整个页面的内容,包括额外的装饰、页头、页签、内容小块、侧栏、页脚等你所想在页面上显示的所有东西。
+ 你还可以创建其他文件重载其他函数
- block.tpl.php:重载theme('block')函数:控制区块的风格
- box.tpl.php:重载theme('box')函数:控制页面主区域的容器(盒子)的风格
- comment.tpl.php:重载theme('comment')函数:控制评论的风格
- node.tpl.php:重载theme('node')函数,控制节点的风格
- PHPTemplate包含有这些模板文件的例子,可以将这些例子拷贝到theme/mytheme目录中进行修改
== 为不同的节点类型定制不同的模板 ==
假设你希望不同类型的节点具有不同的显示风格,只需要将"node.tpl.php"文件拷贝为"node-节点类型.tpl.php"文件,并对该文件进行定制。例如:
+ node-story.tpl.php:稿件风格
+ node-blog.tpl.php:Blog风格
+ node-forum.tpl.php:论坛风格
+ node-page.tpl.php:静态页面风格
+ node-weblink.tpl.php:网页导航的风格
+ node-image.tpl.php:像集的风格
+ ......
= 开发者模块 =
Drupal 提供了一个特殊的模块:Devel 模块。
这个模块是为开发者和网站系统管理员提供的。该模块能在每个页面的末尾输出页面执行的所有数据库查询,并且提供每个数据库查询用掉的时间。该模块还提供了许多其它的好工具。
这个模块可以从以下地址下载:
http://drupal.org/project/devel
= 编写自己的区块 =
区块是显示在网页侧栏的小块内容。Drupal的许多模块都提供了模块内置的区块。可以通过“管理->板块”启用这些区块。
通过“管理->板块->添加区块”还可以增加自己的区块。
区块的编写有3种不同的方法:Filtered HTML、PHP code、Full HTML。
其中HTML的区块比较容易写,就没有必要多说了。
这里写一个PHP区块的例子:
uid) {
?>
# 注销
# 登录
以上是一个PHP区块的例子,根据用户是否登录,显示注销/登录链接。需要注意的是,PHP代码要写在之间。
= 论坛 =
Drupal的forum模块提供论坛功能。
在使用论坛模块时,应同时开启comment模块和taxonomy模块。comment模块为Drupal的节点提供讨论板功能,对论坛主题的回复就要用到该功能。taxonomy是智能分类模块,用于组织网站的内容,能自动对内容进行归类。
comment和taxonomy是论坛正常运行所必需的两个模块。
还可以配合其它模块来增强论坛的功能:
+ "管理->用户->配置"可以开启头像(图片)功能
+ 通过开启profile模块增强用户个人信息,可在"管理->设置->个人信息"中增加自定义内容
+ 通过使用privatemsg模块,用户间可以互相发短消息
privatemsg是一个站内消息系统,可在这里下载:
http://drupal.org/project/privatemsg
privatemsg的中文包在这里下载:
http://drupal.org/files/issues/privatemsg-zh-hans-4.6.0.tar.gz
+ 通过subscriptions模块或notify模块让用户接收E-mail通知
+ 通过bbcode模块提供BBCode支持。
bbcode模块将提供一个工具条,能很方便地在帖子中插入bbcode。
= 提供搜索引擎友好的URL地址 =
Drupal提供了一个path模块,该模块能定义URL地址的别名。这些别名能大大提高地址的可读性,能帮助搜索引擎更有效地对站内内容进行索引。每个页面可以创建多个别名。
例如(左边是URL地址,右边是为其创建的别名):
user/login => login
image/tid/16 => store
taxonomy/term/7+19+20+21 => store/products/whirlygigs
node/3 => contact
node/10 => products/merchandise/cups
node/10 => cups
node/11 => products/merchandise/coffeemakers
== 批量别名设置 ==
Drupal里允许批量为URL设置别名。通过这个功能,可以提供完全不一样的URL地址,甚至可以为不同的语言提供完全本地化的地址。
批量修改别名的方法是在sites/default/settings.php中添加一个conf_url_rewrite函数(4.6.x),如果是Drupal 4.7.x,则函数名是custom_url_rewrite。
以下例子将所有的"node/$node_id"类型的URL修改为"display/$node_id":
= 站内搜索 =
Drupal提供了search模块,用于对站内内容进行搜索。
搜索引擎会自动为站内内容建立索引。在"管理->设置->搜索"能看到搜索状态。搜索引擎在建立索引时需要用到cron功能。
== cron设置 ==
cron用于定期执行一些工作,例如清除日志、建立索引等。
Drupal已经把要定期执行的工作写在cron.php中了,并且在scripts目录下提供了一个cron-lynx.sh脚本,只需将其配置到crontab中就行了:
# vi /etc/crontab
在该文件中添加以下行:
00 * * * * /var/www/localhost/htdocs/drupal/scripts/cron-lyns.sh
== 让自己开发的模块具备搜索功能 ==
如果要让自己开发的模块支持Drupal的搜索引擎,只需要实现search钩子就行了:
hook_search($op='search',$keys=null)
search钩子的文档见:
http://drupaldocs.org/api/head/function/hook_search
最新的Drupal宝典见:
http://www.linuxsir.org/bbs/showthread.php?t=230650
= Drupal的邮件发送设置 =
用户在网站进行注册时,口令将发送到用户的邮箱里。这需要你的网站能进行邮件发送。
网站发送邮件的办法有许多种,这里推荐一种使用ssmtp发送邮件的方法。
假设你有一个gmail帐户,并打算用该帐户发送邮件:
+ 设置ssmtp
# vi /etc/ssmtp/ssmtp.conf
对该文件做如下设置:
root=xxxx@gmail.com (注:xxxx为用户名)
mailhub=smtp.gmail.com:465
rewriteDomail=gmail.com
hostname=gmail.com
+ 设置php.ini
# vi /etc/php/apache2-php4/php.ini
对该文件做如下设置:
sendmail_path = /usr/sbin/ssmtp -t -auxxxx@gmail.com -apxxxx (注:前一个xxxx是用户名,后一个xxxx是口令)
+ 在Drupal的"管理->设置->通用设置->E-mail地址"中
将E-mail地址设置为xxxx@gmail.com。
= 网页布局:Page.tpl.php =
Page.tpl.php是负责网页布局的模板,这个模板控制整个页面的主框架。
在这个模板里,有以下变量可供使用:
+ head_title: 页面标题。
用法举例: ...
+ language: 站点所使用的语言。
用法举例:" ...>
+ site: 站点名称
+ head: drupal_get_html_head() 函数产生的HTML代码
用法举例:
+ onload_attribute: Onload tags to be added to the head tag, to allow for autoexecution of attached scripts.
用法举例:>
+ directory: 主题所在的目录,例如:themes/spreadfirefox 或 themes/box_grey
+ logo: logo图片的路径。在“管理->主题->配置”中可以对这个变量的值进行设置
用法举例:
" title="Home">"/>
+ site_name: 用于header的站点名称, empty when display has been disabled.
+ site_slogan: 网站的口号, empty when display has been disabled.
用法举例:
+ search_box: True(1) if the search box has been enabled.
+ search_url: URL the search form is submitted to.
+ search_button_text: 搜索按钮的文字
+ search_description: 搜索按钮的描述文字
这四个变量的用法举例:
" method="post" id="search">
" />
+ title: 标题,different from head_title, as this is just the node title most of the time.
用法举例:
+ primary_links (array): An array containing the links as they have been defined in the phptemplate specific configuration block.
+ secondary_links (array): An array containing the links as they have been defined in the phptemplate specific configuration block.
这两个变量的用法举例:
*
*
+ breadcrumb: 路径导航的HTML代码。
用法举例:
»
+ tabs: 页签的HTML代码.
用法举例:
+ messages: 状态或错误信息的HTML代码, 一般显示在页面的顶部.
用法举例:
+ layout: This setting allows you to style different types of layout ('none', 'left', 'right' or 'both') differently, depending on how many sidebars are enabled.
+ help: 动态帮助文本
用法举例:
+ styles: Required for stylesheet switching to work. This prints out the style tags required.
用法举例:...
+ mission: 站点使命.
+ is_front: 当前显示的页面是否是网站首页
+ sidebar_left: 左侧栏的HTML代码。该HTML代码是由theme_blocks("left")产生的。
+ content: 内容的HTML代码
+ sidebar_right: 右侧栏的HTML代码。该HTML代码是由theme_blocks("right")产生的。
这三个变量的用法举例:
+ footer_message: 显示在页面底部的信息,在"管理->设置->通用设置->底部信息"中可以对该变量的值进行设置。
+ closure: Needs to be displayed at the bottom of the page, for any dynamic javascript that needs to be called once the page has already been displayed.
这两个变量的用法举例:
+ node: 这个变量是什么意思呢?
== page.tpl.php设计建议 ==
目前比较好的网页设计模式是DIV+CSS模式,为了方便布局,建议采用以下方法设计模板:
+ 将整个页面的内容放入到一个id为wrapper的DIV中
+ 在wrapper中包含三个DIV,其class分别为header、columns、footer
header和footer用于显示页面的头部信息和尾部信息,columns显示页面的内容。
+ columns中包含三个DIV,其class分别为leftcolumn、rightcolumn、centercolumn
leftcolumn和rightcolumn是左右侧栏,分别用于显示左右侧栏的各区块。centercolumn用于显示节点的内容。
页面的总体架构如下:
...
...
...
...
...
CSS对布局的控制如下:
div {margin: 0px;}
.header {margin: 0px;}
.columns {margin: 0px;}
.leftcolumn {float: left; margin: 0; width: 150px;} /*其宽度应等于centercolumn的margin-left*/
.rightcolumn {float: right; margin: 0px; width:160px;} /*其宽度应等于centercolumn的margin-right*/
.centercolumn {margin-right: 160px; margin-left:150px;}
.footer {margin: 0px;}
= node.tpl.php =
该模板用户控制node的显示。
在该模板内可以使用以下变量:
+ $title : node的标题
+ $node_url : Link to node.
+ $terms : HTML for taxonomy terms.
+ $name : Formatted name of author.
+ $date : Formatted creation date.
+ $sticky : 该node是否在主页上置顶
+ $picture : HTML for user picture, if enabled.
+ $content : 该node的内容, teaser if it is a summary.
+ $links : 该node的相关操作或链接
+ $taxonomy (array) : array of taxonomy terms.
+ $node (object) : The node object.
+ $main : True if the node is appearing in a context, like the front page, where only the teaser should be shown.
+ $page : True if the node is being displayed by itself as a page.
+ $submitted : Translated text, if the node info display is enabled for this node type.
布局
+ 为整个node建立一个class为"node"的DIV中,对于置顶的node,其class为"node sticky"
">...
+ node的内容放在class为"content"的DIV中。
+ node的相关链接放在一个class为"links"的DIV中
http://drupal.org/
= Drupal 简介 =
随着PHP技术的飞速发展,搭建一个专业网站已经变得越来越容易。
特别是各种优秀CMS(内容管理系统)的出现,使得网站的开发不需要编程,你所做的主要工作就是下载一些已有模块,下载一些主题风格,定制一些模块,定制一些主题风格,一个专业的网站就建好了。
优秀的CMS系统包括:Drupal、Typo3、XOOPS、TikiWiki、Mambo、PHP-Nuke等,具体见:
http://www.opensourcecms.com/
目前国内比较流行的CMS包括Mambo和XOOPS,他们的国内社区见:
http://www.mambochina.net/
http://xoops.org.cn/
Drupal是一个新的CMS系统,它虽然没有Manbo流行,也没有XOOPS强大,但却是一个非常易用的内容管理系统,可做为个人或大型网站发布、管理、组织不同内容的平台,包含了广为人知的weblog、论坛、投票、新闻聚合、站内搜索、电子商务等功能。
国外有许多优秀的网站采用了Drupal平台,这里列举其中三个:
http://www.spreadfirefox.com/
http://www.hermann-uwe.de/
http://www.hivemindz.com/
国内也有一些网站采用了Drupal平台,这里也列举其中三个:
http://bmc.tea.to/
http://blog.c3crm.com/
http://blog.linuxbyte.net/
= Drupal 的功能特点 =
Drupal 应该翻译成什么呢?呵呵,觉得还是翻译为“水滴”比较好。Drupal这个词其实是荷兰语Druppel的英语发音,而Druppel在荷兰语里面是Drop也就是水滴的意思。Drupal的编写者最初选择这个词实在是意外,他本来想注册一个名为“Dorp” 的域名,Dorp在荷兰语里是“小村庄”的意思,英语里其实也有这个名词,但是他一不小心犯了个错误,于是就注册成了Drop,于是也就有了后来的 Drupal。呵呵,所以汉语翻译成“水滴”还是蛮贴切的,听起来也不错了。
有的人把Drupal当作是blog系统,我一开始也是这样认为的,其实这只是Drupal的一方面的应用,Drupal是一个功能强大的content manage system(cms),在功能设计上它仿照了phpnuke,xoops等的模块化方式,界面上仿照了blog模式。这个程序以极少的代码实现了非常强大的功能。很多人用“神奇” 两个字来形容它,它是一个完全开放源代码的程序,所以吸引了众多PHP爱好者的目光,很多PHP高手参与了它的开发行列中来了,开发速度非常块,几乎两个月出一个新版本,modules和skins也越来越多。从官方站点有时上千人的在线情况就可以看出它的受欢迎程度。
从总体上看,Drupal有以下功能特点:
+ 搜索引擎友好的URL
+ Drupal有一个优秀的模块化结构,提供了许多模块,包括短消息、个性化书签、网站管理、Blog、日记、电子商务、电子出版、留言簿、Job、网上电影院、论坛、投票等模块。Drupal模块的下载、安装、定制非常方便
+ Drupal提供了强大的个性化环境,每个用户可以网站内容和表现形式进行个性化设置
+ Drupal提供了基于角色的权限系统,没有必要对每个用户进行授权,只需要对角色进行授权
+ Drupal提供的站内搜索系统能对站内的所有内容进行索引和搜索
+ Drupal的模板系统将内容和表现分离,可以很方便地控制网站的外观
+ Drupal提供内建的新闻聚合工具
+ 提供完善的站点管理和分析工具
+ Drupal的Caching机制能有效减少数据库查询次数,从而提高站点性能,降低服务器负荷
= Drupal 安装 =
在安装Drupal前,你需要在服务器上先搭建一个PHP+MySQL环境。
初学者可以在windows上安装一个easyphp,然后什么都有了。专业网站一般是安装LAMP(Linux+Apache+MySQL+PHP)。
这里有一个图形化的Drupal安装指导文件:
http://www.flickr.com/photos/todays/sets/912418/
这里有一个flash的Drupal安装指导文件:
http://www.flickr.com/photos/todays/sets/912418/show/
上面两份安装指导文件写得已经非常详细了,这里只给出一个简单的安装步骤:
+ 下载Drupal
$ wget http://drupal.org/files/projects/drupal-4.6.3.tar.gz
+ 将Drupal安装到web服务器的目录内
$ tar xvzf drupal-4.6.3.tar.gz
$ su
# mv drupal-4.6.3/* drupal-4.6.3/.htaccess /var/www/localhost/htdocs/
# exit
+ 创建Drupal数据库
$ mysqladmin -u root -p create drupal
+ 创建Drupal数据库的表
$ mysql -u root -p drupal < /var/www/localhost/htdocs/database/database.mysql + 修改设置文件 $ vi /var/www/localhost/hodocs/sites/default/settings.php 做以下设置: $db_usr = "mysql://root:password@localhost/database"; (password需要改为root的口令) $base_url = "http://localhost"; 然后就可以使用Drupal了。 = Drupal 中文语言包安装 = Drupal 的设计比较科学,不仅扩展性好,安装语言包也非常方便。 + 先下载官方中文语言包 $ wget http://drupal.org/files/projects/zh-hans-4.6.0.tar.gz $ tar xvzf zh-hans-4.6.0.tar.gz 解压后得到一个 zh-hans.po 文件,这就是中文语言包。 + 让Drupal加载国际化模块 administer->modules->locale 选择打勾,这样管理界面才会出现语言包管理界面
+ 导入中文语言包
administer->localization,选择import导入其他语言包,选择刚刚解压的zh-hans.po文件,然后选择import to:chinese simplified。
+ 选择中文为默认语言
装完语言包后,就会发现现在系统有两个语言包,一个是默认的英文,一个就是刚刚我们导入的中文。
我们只要启动中文语言包,并设置成默认就行,系统的页面马上就会变成中文。
= Drupal 的模块 =
模块化是drupal的一个特色,极大的方便了drupal的扩展和灵活定制的能力。Drupal模块的安装使用也很方便,只要将相应文件复制到modules目录下,就可以在‘管理-设置’里面方便地开启使用了。
Drupal 的模块分为基本功能模块和功能增强模块。基本功能模块是Drupal安装包里自带的功能模块,扩展功能模块则需要到[http: //drupal.org/project/Modules]下载。基本功能模块又分为固定启用的基本功能模块和可选用的基本功能模块,固定启用的模块在 drupal安装后即自动启用。
== 固定启用的模块 ==
- block
用于支持区块的实现
- filter
用于处理内容过滤以便于显示。
- system
用于处理管理员对站点的设置。
- user
用户管理及注册系统。
- watchdog
生成并管理系统日志。
== 基本功能模块 ==
- aggregator:
将drupal变成一个在线的rss订阅器。支持RSS和RDF格式。开启后可定时扫描新闻源自动更新内容(需要crontab支持)。
- archive
支持存档内容的管理与浏览,实现blog常见的日历查询功能,可通过区块显示。
- blog
这个模块让会员发表个人blog,使Drupal变成一个多人blog系统。
- blogapi
支持XML-RPC blog接口,允许用户通过第三方应用程序发表blog。
- book
允许多位会员一起合写一本书。
- comment
开启blog或文章的评论回复功能,并且可以定制评论的权限以及每一篇文章是否允许评论。
- contact
允许注册用户间通过填写‘联络表’发email联系。
- drupal
让用户使用一个 Drupal ID 跨站登录。
- forum
论坛
- help
在线帮助。很多标准模块和功能的帮助都可以在‘管理-帮助’里找到。
- legacy
为升级版本提供向下兼容的接口。
- locale
开启多语言支持,汉化drupal必须开启的模块。
- menu
允许管理员定制,添加新的导航菜单。
- node
所有blog或文章都必须通过node模块来提交和呈现给读者。
- page
用于发布静态页面。
- path
支持URL别名,便于管理记忆。
- ping
在发表新文章的时候通知其他网站。
- poll
开启投票功能。
- profile
开启此模块后,管理员将可以自定义用户注册时的表单项目和格式。
- queue
允许管理员监管文章,所有新提交的文章将先进入监管队列,经过监管员(moderator)考察后决定是否发表。
- search
该模块支持站内搜索。能够很好的支持中文搜索,而且速度很快。
- statistics
记录访问统计信息。
- story
不想把这类文章包括在你的日志里时,就可以通过这个模块实现。
- taxonomy
开启目录分类支持
- throttle
站点节流控制机制。当站点流量过大网络阻塞时可以通过节流设定自动关闭相应模块功能以保证访问响应。
- tracker
跟踪用户的最新发布。
- upload
支持上传文件。
== 功能增强模块 ==
Drupal的功能增强模块太多了,并且每天都在不断增加,这里只列出其中一些主要的功能增强模块:
- acidfree
一个功能完整的多媒体(例如图片、视频)管理系统。
- adsense
显示Google Adsense广告。可以方便的定制显示方式,支持从banner到link等6种显示格式。此外还可以选则对特定用户群关闭广告显示。
- album
影集模块。
- amazon associate tools
Amazon广告工具。
- atom
提供atom种子
- attachement
支持上传附件,可以用来替代Drupal自带的upload模块。不同节点的附件将分开放置,避免了文件重名的问题。
- automember
自动用户权限管理。管理员可以设定不同的标准,自动分配给用户不同的权限。例如只开放有限权限给新注册用户,发表一定数目文章后将自动成为资深用户并得到高级权限
- banner
自动轮换显示广告条。管理员可以方便的查看点击统计,并预设/开启/关闭/批准特定广告,用户则可以查看/修改/上载自己的广告条。
- bbcode
提供bbcode输入格式的支持。
- blog theme
允许用户选择自己blog的外观主题,当其它用户按作者浏览其blog时,看到的将是该blog作者自己选定的外观主题。
- bookmarks
用户可以编辑自己的书签,并通过区块显示。
- buddylist
用户可以编辑自己的好友名单,同时显示‘好友的blog’区块。
- captcha
图灵测试/字符校验模块,防止机器人自动注册
- chatbox
聊天室模块。
- codefilter
方便代码输入,能处理和。
- contact directory
使用户可以添加自己的好友联络名单。
- database administration
提供数据库管理功能。管理员可以通过此模块在drupal界面进行数据库查询/修改/删除等功能。
- e-commerce
一整套电子商务工具。
- event
跟踪事件并通知用户。
- excerpt
摘要模块。Drupal发布内容时只能用正文的开头作摘要,然后根据设定自动截取摘要。
- ezmlm
用户将可以通过该模块订阅相关Ezmlm邮件列表。Ezmlm是一个基于qmail的群发邮件订阅系统。
- feedbak
反馈模块,可用于生成反馈表格收集用户意见或问题。
- flexiblock
让Drupal能随心所欲的摆放区块。
- flexinode
可以用此模块根据需要生成新的自定义节点(node)类型。在此基础上可以有很多灵活多变而非常实际的应用,可以说是drupal扩展模块里功能非常重要的一个。
- front page
用于方便的定制站点首页,可以完全脱离站点外观主题的限制生成个性化的首页。可以显示不同的首页给不同权限的用户,并可插入PHP代码完成更强大的动态显示。
- gallery
用于在线像册管理和展示。
- guestbook
留言簿
- hall of fame
名人堂模块。是对drupal自带的统计(statistic)模块的补充,可以统计站点共几篇文章,多少注册用户,建站时间,流行内容等,还可以显示发文最多用户,评论最多用户等。
- htmlarea
一种所见即所得的输入方式。
- image
像册。支持图片上传,并自动生成缩略图(thumbnail)。图片可以插入到页面中或组合成像册显示。
- img_assist
和Image模块共同使用,通过图形界面窗口更便捷地在节点中插入图片。
- internationalization
自动检测浏览器的编码设定,为匿名用户提供全方位的本地话翻译,包括节点内容界面的翻译。包括一个显示区块方便用户切换语种。
- job search
招聘与求职模块
- jsdomenu
生成多层弹出式菜单
向特定用户群发送email
- mailhandler
允许注册用户通过email创建/编辑内容或添加评论。
- movie review
网上电影院
- node vote
对文章进行投票
- notification
自动发送邮件通知订阅者内容已更新。
- organic groups
允许用户自行组成小组,每个小组将有自己的主页显示小组成员发布的内容。
- pdfview
生成PDF文件
- photo album
像册模块。
- privatemsg
允许用户间发送私人信息。
- project
项目管理模块。项目组成员可以由此跟踪项目的进展,可以通过email发送项目更新通知。
- quote
用户在添加评论时可以方便的点选引用原文。引用部分用特殊格式显示以作区分。
- quotes
可以用于收集显示名人名言。通过区块随机显示。
- recipe
用于分享菜谱。
- rsvp
可以发送email邀请用户参加特定的事件(event),并可跟踪用户是否查看或接受了邀请。
- site map
显示站点导航图。
- sitemenu
按文章分类显示站点导航。
- smiley
使用表情符,自带了一些基本的表情符,用户可以自己添加。
- SMS gateway
发短信
- spam
防垃圾模块,防止你的blog成为一个实实在在的垃圾堆。
- spam_surbl
对spam模块进行功能增强,使之支持SURBL(Spam URI Realtime BlockList)。
- sql search
此搜索模块不使用drupal自带的搜索索引(search index),而是提供数据库搜寻功能,支持SQL和正则表示式(regular expressions),并提供高级搜寻过滤功能。
- statistics_filter
过滤网站管理员和搜索引擎的访问统计信息。
- stock
显示股票行情。用户可以自定制所显示的股票。
- subscriptions
允许用户订阅任一节点内容,通过email通知该节点的更新以及是否有新的评论。
- survey
可以创建调查问卷,调查结果可以下载为excel格式。
- taxonomy menu
分类系统导航菜单,其格式将和drupal系统导航菜单一致。
- theme editor
直接通过浏览编辑修改外观主题。
- tinyMCE WYSIWYG Editor
一个非常好用的所见即所得文本编辑器,用于编辑输入文章内容。
- trackback
开启trackback支持。
- VIM Color
支持VIM代码高亮(highlight),支持PHP, Perl, C, HTML, JAVA等多种语言。
- voting
投票/评级
- webform
创建‘网络表单’节点类型,可以用于提交调查问卷,投票,注册等。
- wiki
实现wiki功能。
- workspace
我的工作空间模块,提供一个用户专有的工作区,可以集中察看管理自己的文章。
= Drupal 模块安装 =
Drupal 已经自带了许多基本功能模块,在完成 Drupal 的安装后,开启这些模块就可以了。
如果你需要功能扩展模块,则需要到 http://drupal.org/project/Modules 下载并安装这些模块。
步骤非常简单:
+ 下载模块包
+ 解压缩
+ 把模块文件上传到 Drupal 的 modules 目录中
+ 有些模块可能需要运行 mysql 文件创建表
+ 在“管理->模块"中开启这个模块
= Drupal 的主题风格 =
== 模板引擎 ==
Drupal 支持三种模板引擎:xTemplate、PHPTemplate、wgSmarty。xTemplate是Drupal自带的模板引擎,但支持该引擎的主题风格数量不多。其他两个模板引擎需要到 http://drupal.org/project/Theme%20engines 下载。其中基于 PHPTemplate 的主题风格非常多。
推荐使用 PHPTemplage,这个引擎大大加快Drupal的速度,非常有利于自己自定义模板,一些大型的Drupal站点都是用的这个引擎。
PHPTemplage 的安装方法:
+ 下载 PHPTemplate
+ 将解压后的phptemplate目录拷贝到Drupal的themes/engines目录
== 主题风格 ==
“主题”是Drupal站点的基本外貌和感觉。有时一个特定的站点会安装不止一个的主题。如果站点管理员提供了多个主题,你可以为你的帐号选择你喜欢的默认主题。
Drupal的官方站点提供了许多主题风格,具体见:
http://drupal.org/project/Themes
其中,Spreadfirefox是我最喜欢的主题风格,著名的 spreadfirefox.com 使用的就是这款主题。
除Drupal的官方站点外,还有许多其他机构或个人提供Drupal的主题风格,通过Google可以搜索到这些风格。
= Drupal 主题风格安装 =
Drupal 主题风格的安装非常简单:
+ 在 http://drupal.org/project/Themes 下载新的主题风格
+ 阅读主题风格包中的 README 和 INSTALL 文件,看该主题风格包的安装是否需要一些特殊的步骤
+ 检查一下主题风格需要的模板引擎是否已安装
+ 将主题风格上载到Drupal的themes目录中
+ 通过"管理->主题"启用该主题风格,并将其设置为默认风格
= Drupal 界面定制 =
当 Drupal 站点安装好后,有许多方法对站点界面进行个性化的设置和定制:
+ 安装主题风格
主题风格控制了站点的外观和感受,你可以在网上下载Drupal的主题风格,并在"管理->主题"中启用这些风格。
+ 创建你自己的主题风格
如果你不想用别人预先做好的主题风格,而想为自己的站点打造一个完全不一样的外观,你可以通过开发自己的主题风格来达到这个目的。主题风格的开发人员应具备HTML/CSS知识,如果要开发复杂的主题,则需要懂得PHP。
+ 定制导航菜单
页面顶部和底部的菜单可以在"管理->主题->配置->菜单设置"中进行定制,主链接和备用链接中可以直接编写HTML代码。如果主链接为空,Drupal将根据你安装的模块自动建立导航菜单。每个主题风格可以定义不同的导航菜单。
如果是基于PHPTemplate引擎的主题风格,导航菜单的定义方式是为每个菜单进行定义。
+ 定制文字串
可以通过"管理->本地化->管理字符串"来定制本地语言的文本字符串,Drupal中几乎所有的文本字符串都可以修改。
= 主题风格中CSS的定制 =
Drupal的主题定制非常灵活,可以定制每个区块定制的风格。如果懂PHP的话,几乎可以做出可以想得到风格来。
实际上,在大多时候我们主要是通过图片+CSS来定制,这是一种最简单的定制,也不需要懂得太多的PHP知识。
在themes目录下的每个主题目录中,有一个style.css文件。定制CSS的关键是搞清楚CSS元素控制的对象。但许多人搞不清楚CSS元素控制的对象,在这方面花了不少时间。其实只要选对工具,这实际上是非常容易做的。
这个强大的工具就是Firefox。大多数人只知道Firefox是一个浏览器,实际上Firefox提供了大量网页开发的工具。例如:
+ 选定一部分网页内容,通过右键菜单的View Selection Source功能,可以查看选定部分网页的源码。这是一个杀手级的功能,再也不必为在庞大的HTML源码中找不到相应的目标内容而头痛了。
+ 菜单 Tools->Page Info 可以看到非常详细的网页内容,包括表单、链接、多媒体等信息
+ 菜单 Tools->DOM Inspector 可以对网页的HTML、JavaScript、CSS等内容进行很方便的分级浏览
Firefox的功能太多,一时半刻说不完,我们还是回到CSS定制上面来。这需要用到一个Firefox的插件,插件名称是Web Developer,可以在Firefox的网站上下载到这个插件。
安装好Web Developer插件后,就可以用其提供的功能来定位对象的CSS控制元素:
+ 插件的CSS菜单下有一个View Style Information功能非常好用,当你的鼠标电击到网页的某项内容,就能看到该项内容所使用的相关CSS内容。
+ 在Information菜单下有一个Display ID & Class Details功能,能在网页上显示所有的ID和Class信息。
Web Developer插件是专门为网页开发人员提供的一把宝刀,功能太丰富了,你们就慢慢去体会吧。
= Drupal的基本术语 =
在对Drupal做定制前,需要了解一些Drupal的基本术语:
+ Block(区块)
区块一般位于网页两边的侧栏中,用于导航或显示一些附加内容。区块是一种把数据定位到页面的方法之一。各主题风格可以通过block($subject, $content, $region = "main")函数来控制区块的显示风格。
+ Box(盒子)
盒子是Drupal页面内容的容器。每一个盒子有一个标题和一些内容。各主题风格可以通过box($subject, $content, $region = "main")函数来控制盒子的显示风格。
+ Engine(引擎)
引擎是一类特殊的主题,它通过模板来输出HTML内容。
+ Filter(过滤器)
过滤器是做内容过滤的框架。
+ Module(模块)
模块是为Drupal提供扩展功能的代码片段。有些模块是Drupal核心系统的一部分(例如taxonomy和blog模块),扩展模块(例如 weblinks和image模块)则不属于Drupal的核心系统。核心模块已包含在Drupal的下载包中,扩展模块则需要单独下载。
+ Node(节点)
节点是Drupal中最简单又最难理解的一个概念。几乎Drupal中所有的内容都被存储为一个节点。一个节点就是Drupal的一块内容,它可以是投票、报道、书的一页、或一张图片。
+ Permissions(权限)
权限用于控制内容的创建、修改和站点管理等访问。管理员可以将权限赋给角色,将角色赋给用户。一个用户可以属于一个或多个角色。Drupal缺省提供了两种角色:游客和注册用户
+ Style(样式)
样式是主题或引擎提供的CSS文件,用于替换缺省的CSS。
+ Taxonomy(分类)
Drupal通过分类来描述目录系统,用于对网站的内容进行组织和分类。
+ Template(模板)
模板是模板引擎的,普通人可读懂的HTML文件,这些文件有一些特殊的代码,用于产生动态信息。
+ Theme(主题)
主题是包含一些函数的PHP文件,用于提供不同的布局风格。
= 定制自己的首页 =
在"管理->设置->通用设置->默认首页"里可以设置自己的首页,默认值是"node"。它仅仅显示一些被设置为“推荐到首页”的文章。
+ 假设你创建了一个新的节点,包含有非常多的链接和非常复杂的内容,想把这个节点设置为首页。首先找到这个节点的id,假设节点id是83,你只需要将默认首页设置为"node/83"就行了。
+ 假设你想将用户blog设置为首页,则须将默认首页设置为"blog"。
+ 假设你想把论坛设置为首页,则须将默认首页设置为"forum"。
+ ......
== 创建一个新的PHPTemplate主题风格 ==
+ 在Drupal的themes目录下创建一个主题目录,例如mytheme。
+ 在自己的主题目录下创建一个 page.tpl.php 文件
这是唯一的一个必需创建的文件,它重载了theme('page')函数,并输出整个页面的内容,包括额外的装饰、页头、页签、内容小块、侧栏、页脚等你所想在页面上显示的所有东西。
+ 你还可以创建其他文件重载其他函数
- block.tpl.php:重载theme('block')函数:控制区块的风格
- box.tpl.php:重载theme('box')函数:控制页面主区域的容器(盒子)的风格
- comment.tpl.php:重载theme('comment')函数:控制评论的风格
- node.tpl.php:重载theme('node')函数,控制节点的风格
- PHPTemplate包含有这些模板文件的例子,可以将这些例子拷贝到theme/mytheme目录中进行修改
== 为不同的节点类型定制不同的模板 ==
假设你希望不同类型的节点具有不同的显示风格,只需要将"node.tpl.php"文件拷贝为"node-节点类型.tpl.php"文件,并对该文件进行定制。例如:
+ node-story.tpl.php:稿件风格
+ node-blog.tpl.php:Blog风格
+ node-forum.tpl.php:论坛风格
+ node-page.tpl.php:静态页面风格
+ node-weblink.tpl.php:网页导航的风格
+ node-image.tpl.php:像集的风格
+ ......
= 开发者模块 =
Drupal 提供了一个特殊的模块:Devel 模块。
这个模块是为开发者和网站系统管理员提供的。该模块能在每个页面的末尾输出页面执行的所有数据库查询,并且提供每个数据库查询用掉的时间。该模块还提供了许多其它的好工具。
这个模块可以从以下地址下载:
http://drupal.org/project/devel
= 编写自己的区块 =
区块是显示在网页侧栏的小块内容。Drupal的许多模块都提供了模块内置的区块。可以通过“管理->板块”启用这些区块。
通过“管理->板块->添加区块”还可以增加自己的区块。
区块的编写有3种不同的方法:Filtered HTML、PHP code、Full HTML。
其中HTML的区块比较容易写,就没有必要多说了。
这里写一个PHP区块的例子:
uid) {
?>
# 注销
# 登录
以上是一个PHP区块的例子,根据用户是否登录,显示注销/登录链接。需要注意的是,PHP代码要写在之间。
= 论坛 =
Drupal的forum模块提供论坛功能。
在使用论坛模块时,应同时开启comment模块和taxonomy模块。comment模块为Drupal的节点提供讨论板功能,对论坛主题的回复就要用到该功能。taxonomy是智能分类模块,用于组织网站的内容,能自动对内容进行归类。
comment和taxonomy是论坛正常运行所必需的两个模块。
还可以配合其它模块来增强论坛的功能:
+ "管理->用户->配置"可以开启头像(图片)功能
+ 通过开启profile模块增强用户个人信息,可在"管理->设置->个人信息"中增加自定义内容
+ 通过使用privatemsg模块,用户间可以互相发短消息
privatemsg是一个站内消息系统,可在这里下载:
http://drupal.org/project/privatemsg
privatemsg的中文包在这里下载:
http://drupal.org/files/issues/privatemsg-zh-hans-4.6.0.tar.gz
+ 通过subscriptions模块或notify模块让用户接收E-mail通知
+ 通过bbcode模块提供BBCode支持。
bbcode模块将提供一个工具条,能很方便地在帖子中插入bbcode。
= 提供搜索引擎友好的URL地址 =
Drupal提供了一个path模块,该模块能定义URL地址的别名。这些别名能大大提高地址的可读性,能帮助搜索引擎更有效地对站内内容进行索引。每个页面可以创建多个别名。
例如(左边是URL地址,右边是为其创建的别名):
user/login => login
image/tid/16 => store
taxonomy/term/7+19+20+21 => store/products/whirlygigs
node/3 => contact
node/10 => products/merchandise/cups
node/10 => cups
node/11 => products/merchandise/coffeemakers
== 批量别名设置 ==
Drupal里允许批量为URL设置别名。通过这个功能,可以提供完全不一样的URL地址,甚至可以为不同的语言提供完全本地化的地址。
批量修改别名的方法是在sites/default/settings.php中添加一个conf_url_rewrite函数(4.6.x),如果是Drupal 4.7.x,则函数名是custom_url_rewrite。
以下例子将所有的"node/$node_id"类型的URL修改为"display/$node_id":
= 站内搜索 =
Drupal提供了search模块,用于对站内内容进行搜索。
搜索引擎会自动为站内内容建立索引。在"管理->设置->搜索"能看到搜索状态。搜索引擎在建立索引时需要用到cron功能。
== cron设置 ==
cron用于定期执行一些工作,例如清除日志、建立索引等。
Drupal已经把要定期执行的工作写在cron.php中了,并且在scripts目录下提供了一个cron-lynx.sh脚本,只需将其配置到crontab中就行了:
# vi /etc/crontab
在该文件中添加以下行:
00 * * * * /var/www/localhost/htdocs/drupal/scripts/cron-lyns.sh
== 让自己开发的模块具备搜索功能 ==
如果要让自己开发的模块支持Drupal的搜索引擎,只需要实现search钩子就行了:
hook_search($op='search',$keys=null)
search钩子的文档见:
http://drupaldocs.org/api/head/function/hook_search
最新的Drupal宝典见:
http://www.linuxsir.org/bbs/showthread.php?t=230650
= Drupal的邮件发送设置 =
用户在网站进行注册时,口令将发送到用户的邮箱里。这需要你的网站能进行邮件发送。
网站发送邮件的办法有许多种,这里推荐一种使用ssmtp发送邮件的方法。
假设你有一个gmail帐户,并打算用该帐户发送邮件:
+ 设置ssmtp
# vi /etc/ssmtp/ssmtp.conf
对该文件做如下设置:
root=xxxx@gmail.com (注:xxxx为用户名)
mailhub=smtp.gmail.com:465
rewriteDomail=gmail.com
hostname=gmail.com
+ 设置php.ini
# vi /etc/php/apache2-php4/php.ini
对该文件做如下设置:
sendmail_path = /usr/sbin/ssmtp -t -auxxxx@gmail.com -apxxxx (注:前一个xxxx是用户名,后一个xxxx是口令)
+ 在Drupal的"管理->设置->通用设置->E-mail地址"中
将E-mail地址设置为xxxx@gmail.com。
= 网页布局:Page.tpl.php =
Page.tpl.php是负责网页布局的模板,这个模板控制整个页面的主框架。
在这个模板里,有以下变量可供使用:
+ head_title: 页面标题。
用法举例: ...
+ language: 站点所使用的语言。
用法举例:" ...>
+ site: 站点名称
+ head: drupal_get_html_head() 函数产生的HTML代码
用法举例:
+ onload_attribute: Onload tags to be added to the head tag, to allow for autoexecution of attached scripts.
用法举例:>
+ directory: 主题所在的目录,例如:themes/spreadfirefox 或 themes/box_grey
+ logo: logo图片的路径。在“管理->主题->配置”中可以对这个变量的值进行设置
用法举例:
" title="Home">"/>
+ site_name: 用于header的站点名称, empty when display has been disabled.
+ site_slogan: 网站的口号, empty when display has been disabled.
用法举例:
+ search_box: True(1) if the search box has been enabled.
+ search_url: URL the search form is submitted to.
+ search_button_text: 搜索按钮的文字
+ search_description: 搜索按钮的描述文字
这四个变量的用法举例:
" method="post" id="search">
" />
+ title: 标题,different from head_title, as this is just the node title most of the time.
用法举例:
+ primary_links (array): An array containing the links as they have been defined in the phptemplate specific configuration block.
+ secondary_links (array): An array containing the links as they have been defined in the phptemplate specific configuration block.
这两个变量的用法举例:
*
*
+ breadcrumb: 路径导航的HTML代码。
用法举例:
»
+ tabs: 页签的HTML代码.
用法举例:
+ messages: 状态或错误信息的HTML代码, 一般显示在页面的顶部.
用法举例:
+ layout: This setting allows you to style different types of layout ('none', 'left', 'right' or 'both') differently, depending on how many sidebars are enabled.
+ help: 动态帮助文本
用法举例:
+ styles: Required for stylesheet switching to work. This prints out the style tags required.
用法举例:...
+ mission: 站点使命.
+ is_front: 当前显示的页面是否是网站首页
+ sidebar_left: 左侧栏的HTML代码。该HTML代码是由theme_blocks("left")产生的。
+ content: 内容的HTML代码
+ sidebar_right: 右侧栏的HTML代码。该HTML代码是由theme_blocks("right")产生的。
这三个变量的用法举例:
+ footer_message: 显示在页面底部的信息,在"管理->设置->通用设置->底部信息"中可以对该变量的值进行设置。
+ closure: Needs to be displayed at the bottom of the page, for any dynamic javascript that needs to be called once the page has already been displayed.
这两个变量的用法举例:
+ node: 这个变量是什么意思呢?
== page.tpl.php设计建议 ==
目前比较好的网页设计模式是DIV+CSS模式,为了方便布局,建议采用以下方法设计模板:
+ 将整个页面的内容放入到一个id为wrapper的DIV中
+ 在wrapper中包含三个DIV,其class分别为header、columns、footer
header和footer用于显示页面的头部信息和尾部信息,columns显示页面的内容。
+ columns中包含三个DIV,其class分别为leftcolumn、rightcolumn、centercolumn
leftcolumn和rightcolumn是左右侧栏,分别用于显示左右侧栏的各区块。centercolumn用于显示节点的内容。
页面的总体架构如下:
...
...
...
...
...
CSS对布局的控制如下:
div {margin: 0px;}
.header {margin: 0px;}
.columns {margin: 0px;}
.leftcolumn {float: left; margin: 0; width: 150px;} /*其宽度应等于centercolumn的margin-left*/
.rightcolumn {float: right; margin: 0px; width:160px;} /*其宽度应等于centercolumn的margin-right*/
.centercolumn {margin-right: 160px; margin-left:150px;}
.footer {margin: 0px;}
= node.tpl.php =
该模板用户控制node的显示。
在该模板内可以使用以下变量:
+ $title : node的标题
+ $node_url : Link to node.
+ $terms : HTML for taxonomy terms.
+ $name : Formatted name of author.
+ $date : Formatted creation date.
+ $sticky : 该node是否在主页上置顶
+ $picture : HTML for user picture, if enabled.
+ $content : 该node的内容, teaser if it is a summary.
+ $links : 该node的相关操作或链接
+ $taxonomy (array) : array of taxonomy terms.
+ $node (object) : The node object.
+ $main : True if the node is appearing in a context, like the front page, where only the teaser should be shown.
+ $page : True if the node is being displayed by itself as a page.
+ $submitted : Translated text, if the node info display is enabled for this node type.
布局
+ 为整个node建立一个class为"node"的DIV中,对于置顶的node,其class为"node sticky"
">...
+ node的内容放在class为"content"的DIV中。
+ node的相关链接放在一个class为"links"的DIV中