APP下载

Drupal是怎样帮高校改善网站体验的?

2015-03-03王玉平

中国教育网络 2015年5期
关键词:字段备份代码

文/王玉平

Drupal是怎样帮高校改善网站体验的?

文/王玉平

Drupal是非常灵活的,从内容类型到版面布局都是可以自定义的,也正是由于这种自定义的灵活性导致了Drupal的学习曲线比较陡。但是理解了Drupal的架构思路,会使得学习比较容易。

Drupal的核心是节点、模块、主题。正是因为模块的引入,极大地完善了Drupal的功能,吸引了众多Drupal爱好者为Drupal开发各类功能,方便了站点管理员和制作者不用写代码即可完成站点的制作与部署。

内容管理

首先让我们看一下Drupal的核心概念:内容节点、内容类型和字段。

节点(Node)、内容类型和字段

Drupal站点里的内容都是以节点形式来存储的,一个节点是某个类型的一个内容,如页面、文章、投票、论坛主题或者博客。正因为所有内容作为节点的这种概念,让我们可以自由定制内容类型。在Drupal核心代码中有Node模块来负责整个站点内容的创建、编辑、删除、设置和现实等功能。系统为每个节点默认添加了作者、创建时间、修改时间、内容类型等元数据属性。Drupal核心代码中的Field模块为系统提供了字段管理功能,用户可以为内容类型添加字段,并管理这些字段的显示。

Drupal安装完毕后,默认会创建两个文件类型:基本页面和文章,这两个类型只有标题和正文内容两个基本属性。而在网站中,这两个文件类型不能满足我们的需要,譬如图片新闻需要有图片属性,通知公告需要有附件,因此需要定义自己的内容类型,并为这些自定义内容类型添加不同的字段(属性),如图1所示。

表1 Drupal默认字段类型

图1 字段属性设定

除了以上字段类型,用户也可以自行定义字段类型,譬如Date模块提供的日期类型字段,Link模块提供的链接类型字段,Audiofield模块提供的音频类型字段,Email field模块提供的撰写email地址的字段,Telephone模块提供的书写电话号码的字段等。

字段是可以重用的,在某个类型下创建的字段,可以应用于另外一个内容类型。譬如图片新闻里的图片字段,可以用于普通新闻里添加图片。

一个字段的值可以限制只有一个或者指定个数,也可以无限个。譬如文章的标题数量只能有一个,而附件可以有无限个。

Drupal提供了默认的字段值的校验功能,譬如必选填写的字段,有红色*号标注,若用户没有填写,则会提示必须填写的警告提示。

字段在内容类型中的前后顺序也可以根据实际需要做出调整,编辑节点和显示节点时各字段的顺序可以完全不同,系统提供了Manage Fields和Manage Display两个界面来管理字段和管理显示界面。通过这两个界面来控制字段的类型、数量、显示方式。Drupal允许用户定义内容类型的显示模式,默认提供了全文(Full content)、摘要(Teaser)等显示模式。在Manage Display界面中,用户可以切换显示模式进行定制。

分类(Taxonomy)

分类(Taxonomy)是一个非常强大的核心模块,它使得用户以类别、标签和元数据的形式来组织关键字,允许用户连接、关联和聚类站点内容。在Drupal中,分类是通过术语表来实现,术语表中包含词汇,这些词汇可以呈树状层级分布。

在国内传统网站中,其内容是通过栏目的形式来组织的,任何内容都是先有栏目,再有栏目下的内容,而在Drupal里,先有内容,再把这些内容按照某个关键字或者标签来进行分类,而这些分类就可以对应成传统网站的栏目,但分类不能完全等同于传统栏目。在Drupal中,通过菜单进行树状结构的组织,因此菜单在某种意义上才是传统栏目的对应,而分类主要的目标还是在于聚类相关内容。

分类在Drupal中是作为字段的形式存在的,在字段类型中,有一个“术语来源”类型,就是用来引用各个术语表。术语表里的词汇允许用户在添加内容时手工输入一个新的词汇,也可以在术语表管理中原先定义一组词汇。

在建设网站中,分类、关键字、标签等字段均通过术语来源类型实现,从而形成类别、标签云、访问关键字等展现形式。

常见几个字段

1.正文编辑

Drupal核心代码默认提供普通的文本区域编辑器,只能编辑纯文本内容,为了提供完整的HTML可视化编辑器,著名的CKEditor编辑器提供了模块与Drupal对接,允许用户在Drupal中调用CKEditor进行所见即所得的内容编辑界面。该模块支持外部文件浏览器,如CKFinder、IMCE,允许用户上传浏览文件,并且允许用户自定义编辑器的皮肤、工具栏、语言和默认状态。

2.图片

在一个网站中,图片扮演了吸引用户和直观展示内容的重要角色。每一个内容管理系统都要处理图片的存取。在传统网站中,上传到服务器上的图片已经处理后的尺寸已定的图片,在下次改版时,图片的尺寸与新版设计存在不匹配问题,也不能很好的适应目前多种浏览终端的尺寸问题。在Drupal中,图片上传到服务器后,并不会对原始图片进行修改,而是引入图片样式的概念,根据不同的需求生成新的图片文件。

在Drupal中,除了调用传统的GD来处理图片,还可以调用ImageMagick和GrpahicsMagick等专业图片处理工具来进行图片渲染,生成高质量的小文件图片。通过imagecache_actions模块,可以为图片添加水印和边框、调整亮度和透明度、调整图片尺寸以及其他图片处理相关功能。

在我们的网站中,尽量避免使用CKEditor的图片上传功能,而是使用图片字段的多个值的功能,把图片显示在内容后面。并且使用breakout模块来匹配不同的浏览器终端。

3.附件

附件的功能就是文件上传功能。Drupal提供了上传进度条等友好界面,并提供了描述属性,用来在显示时不用直接显示文件名。

4.视频

Video模块为我们提供了视频上传播放的功能,借助于ffmpeg开源工具,我们还可以实现视频转换的功能。JW Player、jPlayer、Video.js等模块提供了页面播放视频功能,而实时转换功能可以生成x264编码的MP4文件,兼容了各种浏览器终端。Media Youku模块,则可以提供与国内较大的视频网站优酷进行对接。笔者所在的上海海事大学与优酷合作,将学校的视频上传至优酷,然后在学校官网通过Media Youku模块对接,播放的媒体不在网站本地,而存储于优酷服务器。

视图(Views)

视图(Views)是Drupal的另一个功能非常强大的模块,没有该模块,几乎无法制作一个网站。视图为用户提供了一个查询可视化设计界面,通过该界面,用户可以选择要查询的字段、查询条件、排序字段、展现形式、分页功能以及上下文的条件。正因为这个查询的可视化设计,用户不需要接触数据库底层,也不需要了解PHP、MySQL就可以灵活地设计出各种查询,并且输出为页面或者区块,以及其他更多的服务接口。用户也可以通过模板来定制视图的展现形式。

在网站中,常见的列表,基本都是通过视图来实现的。各类slideshow、图片gallery也是通过视图来实现的。

主题

有了内容,我们就需要考虑如何展示页面,在Drupal里,由主题(Theme)来负责页面内容的展示。

与传统CMS不同的是,Drupal把页面分成不同的区域(Region),经典的页面分隔为头部区域、高亮区域、侧边栏、正文区域、底部区域。在区域里嵌有区块(Block)。每个区块里的内容可以是普通的文本,也可以是通过View模块来组织的内容,也可以是通过自定义模块通过PHP代码生成的。

Drupal主题是以文件夹的形式存在站点目录sites/all/themes或者sites/default/ themes下面。其中的.info文件是必须的,类似于项目工程文件,描述了主题元数据(如名称、描述、版本信息)、定义的区域、应包含的样式单文件、应包含的JavaScript脚本文件。如:

name=shmtu2012

description=上海海事大学中文网站2012版

version=1.0

core=7.x

engine=phptemplate

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[banner] = Banner

regions[topnav] = Top Menu Bar

regions[menu] = Menu

regions[news] = News

regions[hp-content] = HomePage Content

regions[hp-banner] = HomePage Banner

features[] = logo

features[] = favicon

features[] = main_menu

features[] = secondary_menu

stylesheets[all][] = smu.css

scripts[] = jquery.masonry.min.js

scripts[] = pngFix/jquery.pngFix.pack.js

主题定义中还有很多模板文件(.tpl. php)。Drupal是基于PHPTemplate引擎来渲染HTML,因此这些模板文件就是嵌入PHP代码的HTML文件。Drupal从HTML到Page、到区域、到区块、到内容类型、到字段都提供了默认的模板文件,用户可以完全覆写这些模板文件。模板文件的命名非常清晰,譬如整体的HTML模板命名为html.tpl.php,对于页面的模板命名为page.tpl.php,对于区块的命名为block.tpl.php。如果对于文件命名有疑问,可以启用Theme developer模块来提示。而对于视图的模板,在视图编辑界面里有详细提示。主题下还有一个template.php文件,该文件内部为纯php代码,用来对输出进行逻辑控制和数据处理,也可以自定义过程,覆盖主题输出,如图2所示。

图2 主题内容与区块

Drupal提供了子主题的功能,子主题类似于主题,只是它继承了父主题的资源。著名的主题zen、bootstrap、omega等都是父主题,允许用户在此基础上创建自己的子主题。

Zen是一个功能强大的简单的、基于HTML5、采用响应式设计、移动设备优先的格状设计主题。Zen的开发文档很丰富,易于上手,方便了设计者,因此得到了广泛的应用。

Omega也是一个开发者比较喜欢的父主题,它允许开发者通过代码完全控制主题的各方面细节,所以比较适合对Drupal已经熟悉的开发者,部分国外高校的主题基于Omega。

Bootstrap是排名第三的父主题,该主题对接了著名的Bootstrap框架,充分利用了Bootstrap的功能,因此对于响应式设计有诉求的用户可以使用该主题,Bootstrap自带的样式和脚本,也极大的方便了用户快速开发自己的主题。

图3 通过Solr来进行搜索

多语言

Drupal对多语言的支持也是非常全面且非常灵活的。其本身默认为英文,如果需要其他语言,则只需要启用locale模块和Localization update模块,然后添加需要的语言即可。通过Localization update模块,系统可以自动周期性下载启用的语言,包括对核心代码和周边模块的语言包。

Drupal可以根据URL、请求会话、用户的语言参数、浏览器的语言设置和站点的默认语言来判断当前该以哪种语言来显示界面和内容。在添加内容时,用户可以选择语言;在浏览内容时,用户可以点击“翻译”按钮,把当前内容翻译成其他语言版本,系统会自动记录对应内容,便于用户随时切换语言显示。对于页面布局中的区块,也可以直接翻译。而菜单、代码中的文本字符串都可以通过翻译界面进行翻译。

此外,网站版面设计中英文可以一样,也可以根据语言有多种不同的设计。

用户与角色

在Drupal中,用户也是一类实体(Entity),管理员可以添加用户的字段,也可以管理用户的显示。对于用户的添加,可以允许用户自行注册,也可以限制只有管理员可以添加。有了SMTP Authentication Support模块的支持,用户状态改变时,可以发送邮件通知用户。

SSO

Drupal对单点登录系统CAS支持的非常完美,其中CAS模块借助于phpCAS来实现了对CAS系统的支持。CAS Attributes模块则相应的提供了CAS返回信息与用户字段的映射关系。用户可以设定是否允许CAS系统自动创建用户。笔者在开发本校网站时,都与本校统一身份认证系统进行对接,用户在使用站点管理内容时,完全不用另外开设用户,也不需要多次登录,密码也无需额外设定,既增强了安全性,又便利了用户登录。

此外,Drupal也支持LDAP协议的对接,以及众多模块提供了对OpenID、OAuth、Shibboleth的支持。

授权

Drupal本身没有组的概念,但是有角色(Role)概念,可以针对角色进行授权。系统默认创建三个角色:管理员、认证用户和匿名用户。借助于Content Access模块,可以提高授权的颗粒度,允许具体某个用户对某个对象拥有特别的权限。而对于更复杂的授权,可以借助于Organic groups可以提供组协作方面的权限设定。对于分类(Taxonomy)也有Taxonomy Access Control模块提供单独的权限控制,因此在授权管理方面Drupal也是非常灵活的。

SEO

作为一个网站,必然要考虑搜索引擎优化的问题,SEO Checklist模块为用户提供了一个检查列表,对照列表,用户可以检查是否启用或者完成响应的设定,从而尽快提供经过SEO的站点。

有了PathAuto模块,用户可以定义某一类型的内容的URL模式。譬如第一篇文章,Drupal默认的URL为/q=node/1,启用Clean URL后,URL变为/node/1,通过PathAuto,它的URL可以变为更有意义的表示,如/about.htm。

除了URL的优化,用户还可以启用metatag模块在页面中添加元数据,譬如author、description、keywords等搜索引擎会检索的元数据。

搜索是内容管理系统必有的功能,Drupal核心内建的搜索功能可以满足一般需要,但要实现类似于Google、Bing等搜索引擎的功能,可以通过Apache Solr Search模块与Apache Solr对接,把站点内容交由Apache Solr去索引,用户的搜索请求交由Apache Solr去处理,并在Drupal中返回搜索结果并呈现,如图3所示。

数据协作

Drupal本身不是一个独立的系统,它可以导入其他站点或者数据服务者的数据,可以为其他站点和系统提供数据服务。

输入数据

最简单的案例是从.csv文件导入数据,对于这类操作,Drupal有一个强大的模块Feeds。它可以导入或集成数据为节点、用户、分类术语或者简单的数据库记录。它支持手工操作的一次性导入和周期性导入,来源数据可以是RSS/Atom种子,也可以是CSV文件或者OPML文件。笔者所做的上海海事大学主网站中的今日亮点栏目的内容,需要同步到招生网站中,为了实现该功能,在招生网站中安装了Feeds模块,并设置为1小时同步一次数据。

输出数据

Services模块为Drupal与第三方系统实现数据集成提供了REST、XMLRPC、JSON、JSON-RPC、SOAP、AMF等接口,这允许Drupal站点的数据不再是孤立的数据,而是成为了一个数据服务商。通过Services模块,第三方系统不仅可以检索站点数据,而且可以更新Drupal站点的数据。更为方便的时候,在提供REST、JSON、XMLPRC等接口时,无需额外的代码,只需要更改URL的后缀名,如/ api/node/1.xml返回的是xml格式的节点1的数据,而/api/node/1.json则提供的是json格式的节点1的数据。

上海海事大学的图片新闻、校园动态和今日亮点三个栏目的内容都是通过Services模块提供API给学校的官方移动APP。

此外,Drupal对于RDF的支持已经内嵌入核心代码,通过RDF可以实现语义网络的提纯。安装SPARQL Views模块,可以使站点引用Linked Open Data数据。

站点群

目前国内高校站点少则数十个,多则几百个,按照现有策略和公司产品,经常引用站点群系统来构建管理如此多的网站。Domain Access模块也提供了类似功能,允许多个站点共用一套核心代码和一个共享的数据库,这个模块允许共享用户、内容和配置。

Drupal同时提供了另外几种类似于站点群的方案。一种是核心代码共享而数据库独立,这种模式下,内容、用户都是相对独立的,站点之间可以通过Feeds和Services提供数据同步,而用户可以通过SSO模块实现单点登录。在这种模式下,站点群维护难度相对容易且工作量小。另一种模式是完全独立,核心代码和数据库完全独立,各个站点间内容、用户完全隔离,这种模式下,维护工作量相对较大但简易。

在站点日常维护中,Drush充当了非常重要的角色。Drush是Drupal和Shell的合并,它是一个针对Drupal的命令行外壳和脚本工具,拥有Drupal瑞士军刀的称誉。它提供了一系列命令,譬如节点的操作、用户的操作、站点更新操作、模块的操作,绝大部分的Drupal操作都可以通过Drush来实现。

如下载并启用模块Views,可以通过一个命令行来实现:drush-y en views。

更新语言包,drush l10n_update。

基本上Drupal站点都会安装drush工具。

安全

安全也是一个站点必须考虑的问题。Drupal站点从架构到代码编写都充分考虑了像SQL注入、XSS跨站脚本等攻击方式的安全问题,而且提供了Security Review模块供用户审计安全问题。

此外,Drupal是社区开源系统,有着开源系统的大家共同监督的优势。如果代码有安全问题,系统将进行高优先级别的警告,授权用户在管理站点,无论是添加内容还是进行简单管理工作时,系统都会在显著位置警告系统有安全问题,督促用户尽快升级。

目前很少有Drupal系统的站点被入侵,当然,这也需要站点管理员定期监控站点。

性能

Drupal从拓扑架构上支持简易的轻量级服务器性能优化,也支持庞大的集群架服务器性能优化。

Drupal官网为大家提供了服务器性能优化指南,在该指南中,提供了修改php.ini文件调优php性能,优化数据库性能,启用缓存机制,安装Varnish页面静态缓存,安装APC启用代码缓存以及使用Redis作为key-value存储的性能优化机制。对于数据库性能的优化,可以使用memcached来缓存查询。

缓存机制是站点优化的最直接的方式。鉴于Drupal的架构,需要做以下几个方面的缓存:代码缓存(APC、eAccelerator)、数据库缓存(Memcache)、服务器反向代理缓存(Varnish)、页面缓存(Boost)。针对高校的中小规模网站服务器,我们建议使用boost模块的匿名用户访问的页面静态化来提供性能,它可以压缩包括xml、ajax、css、javascript在内的页面文件从而减少带宽,显著提高用户访问速度。Boost模块需要用户修改.htaccess文件,不过Drupal会根据用户的配置来自动生成修改代码,方便用户修改。对于授权用户的缓存处理,有Authenticated User Page Caching(authcache)模块,它可以提高授权用户的访问速度。

备份

网站的备份很重要,使用Drupal制作的网站也不例外。Drupal系统的存储内容主要分为三部分:数据库、核心代码和用户文件,因此备份Drupal主要就是备份这三部分的内容。在Drupal提供的备份方案中,有多个模块可以用来备份数据库和文件,也可以由系统管理员针对这三部分内容做出手工备份,如果是在站群或者多站点的情况下撰写脚本来实现批量备份。

在备份模块中,首选“Backup and Migrate”,该模块主要用来备份和恢复数据库、代码和文件,也可以用于迁移站点,并且配合自动调度任务来自动备份。备份后的文件支持gzip、bzip和zip压缩,而且可以存放在本地或者通过FTP/S3/Email等多种方式备份到异地,而且对于目前流行的Dropbox、Rackspace Cloudfiles、Proune、HPCloud也提供了多个模块支持。为了系统安全,备份文件可以使用AES算法进行加密。

手工备份Drupal的方式也很简单,可以使用drush archive-dump命令行来备份,使用drush archive-restore来还原网站;也可以使用tar等归档工具压缩Drupal核心代码和用户文件,对于数据库使用drush、mysqldump(或pg_dump)来备份数据库。对于手工操作不熟悉的,可以使用phpMyAdmin等图形界面来进行数据库备份,如图4所示。

图4 备份管理界面

对于站群系统或者多站点,可以撰写脚本来进行集中备份,也可以采用子站点单独备份的策略。

备份周期,Drupal推荐数据库和用户文件天天备份,而对于核心代码备份间隔为30天。

在本文中,没有就Rules(规则)、Voting API和Flag等模块进行介绍,实际上结合这几个模块,可以避免编写代码,而实现一些触发器性质的工作流,也可以实现一个投票网站或者特别标记的功能。

基于Drupal的网站,相对于其他CMS系统站点,最大的难点在于学习曲线比较陡峭,尤其是区块的概念,不同于以往的CMS系统,这是在学习Drupal过程中需要优先掌握的概念。对Drupal有了基本的理解后,加上灵活运用丰富多彩的模块,完全可以满足各类站点的需求。

(作者单位为上海海事大学)

猜你喜欢

字段备份代码
“备份”25年:邓清明圆梦
图书馆中文图书编目外包数据质量控制分析
创世代码
创世代码
创世代码
创世代码
浅析数据的备份策略
CNMARC304字段和314字段责任附注方式解析
无正题名文献著录方法评述
出版原图数据库迁移与备份恢复