第3章 Drupal 的基本概念

Drupal的基本概念主要包括节点、内容类型、模块、主题和分类等。只有对这些概念有了足够的了解,方能灵活的构建网站。本章将对这些基本概念作详细的介绍,具体的应用将在后面章节进行讲解。

Taxonomy upgrade extras: 

3.1 节点(Node)

节点是一段内容(a piece of content),它是网站内容的基本组成单元。网站上的主要内容是由一个个节点组成的。通过观察网站上发布的各种内容(如新闻、博客、论坛帖子等),可发现它们都有如下的共同特性:

需要一个唯一的ID用于标识这个节点;

都有标题和内容;

需要记录发布时间、修改时间和发布者。

用面向对象的分析问题的方法,可以将这些内容进行抽象出一个“节点类”,节点类具有最基本的属性,而其他类(如博客文章、论坛主题等)均继承自此类,增加一些专属的属性。因此,可以认为Drupal网站中的每个节点是节点类的一个实例。

如图3-1所示为一个网站中的节点类的实例。可以看到,每个节点类除了标题、内容、发布者等共同的属性外还有专属属性。使用这样的图对网站内容进行分析是一种很好的方法。

图3-1 节点类结构图

由于节点的共性,Drupal为节点的创建和编辑准备了相同的页面,这样使管理员可以在一个页面中完成全部节点的创建。

对于不同的节点类的子类,Drupal采用“内容类型”来实现这样的功能。内容类型将在下面的章节介绍。

Taxonomy upgrade extras: 

3.2 内容类型(Content Type)

内容类型(Content type)就是在抽象层次上对节点的一个归类,如上面提到的新闻和博客文章,是两种不同的内容类型。不同内容类型的文章用于不同的使用场景。每一个节点都必须属于某个内容类型,一个内容类型下可以有多个节点。

Drupal默认提供两种内容类型:页面(Page)和故事(Story)。这两者没有实质的区别,只是在显示时,故事节点会显示节点的发布信息,
如时间和发布者等;但页面不会显示。页面经常用于存储如“公司介绍”等介绍性文字信息;而故事通常用于存储如“站点新闻”、“公告”等内容,且在浏览时可
显示发布者和发布时间等信息。

Drupal的后台管理有“内容类型”管理功能,管理员可以创建新的内容类型并设置每个内容类型具有哪些属性。除标题、内容属性外,还提供了诸如是
否支持评论、是否开启版本控制等功能选项。同时,在内容类型的设置中可以对节点的三个基本属性——是否发布在首页、是否置顶和是否发布——有选择地开启。

但是,像3.1节如图3-1所示描述的“新闻节点类”,除了基本属性外,还需要“文中插图”这个额外的属性。这时需要使用第三方模块Content Construction Kit(简称为CCK)提供的为节点增加字段的功能。此模块将在后面的章节详细介绍。

Taxonomy upgrade extras: 

3.3 模块(Module)

  • 浏览 6544 次

如果说节点是Drupal的内容单元,那么模块(Module)就是Drupal的功能单元。每个模块为Drupal提供一个或多个完整的功能。上文提到的“节点”管理,还有评论管理、用户管理等功能,都是由模块提供的。


个模块是由一组脚本文件组成的,它用于扩展Drupal的功能。核心模块和核心可选模块是包含在Drupal安装包里的,不需要单独下载。在后台管理的
“模块管理(Module)”列表中可以看到当前系统可开启的全部模块及状态。第三方模块是由除Drupal开发团队外的开发者开发的,基本上都发布在
http://drupal.org/project/modules中,提供了从内容发布、显示、用户管理、分类等各种各样的模块,而且都是免费和开源
的。

除了直接使用核心模块和第三方模块,也可以使用Drupal
API开发自定义模块。Drupal模块的核心机制是钩子函数,通过调用它可以实现对Drupal工作流程的修改。比如创建一个新的系统路径来展示自定义
页面,就需要菜单的钩子函数(hook_menu)来完成。

Drupal使用了“反向控制(inversion
control即IoC)”的设计模式,使系统可以在“需要时”加载相关的模块。IoC也被称为是“依赖注入(Dependency
Injection)。它的原理简单地讲就是:每个模块只实现自己的功能,何时被调用是由系统决定的。比如一个订单系统,当订单被支付时需要执行一系列操

作。每一个操作是由一个独立的模块来实现的。如果按照传统的系统架构,应该预先定义一段代码使用相关的类或函数完成订单支付后处理的工作流。但在模块化的

架构中,可以安装很多用于对订单支付后进行处理的模块。这些模块通过配置文件让系统得知其存在,并且通过某种接口方式让系统知道应调用哪些方法。那么,系
统在获知订单被支付后,就可以触发这些方法的执行。在Drupal中,模块的注册是由.info文件来实现的,而何时调用哪种方法是通过钩子函数来“通
知”系统的。

图3-2展示了系统中的模块层次结构。最底层的是Drupal框架,它提供了模块机制;上层是Drupal的五个核心
模块:节点模块(Node)、用户模块(User)、系统配置模块(System)、内容过滤器模块(Filter)和区块模块(Block)。再上层是
第三方模块,是由开发ac者使用Drupal框架和五大核心模块提供的API开发的。

图3-2 Drupal的模块架构图

Taxonomy upgrade extras: 

3.4 主题(Theme)


站的外观称为主题(theme),主要包括网站的页面布局、颜色、图片、字体、按钮等元素。国外通常用“look and
feel”这个词组来说明什么是主题,它准确地表达了主题的含义,即“所看及所感”。网站不仅要美观,还要让用户使用起来“有感觉”,即使用起来非常方
便,能够简洁流畅地完成网站业务流程。

Drupal主题是由一组模板文件,样式表(CSS)以及图像所组成的,也有时会包含一些JavaScript代码。Drupal默认提供了几种主
题,它们的文件在程序根目录下的themes文件夹中。Drupal提供的主题包括:Garland(默认主题)、Chameleon、Marvin等,
如图3-3所示。

这些主题可以在后台管理的主题管理页面中开启或关闭。此外,还可以从www.drupal.org上下载第三方提供的Drupal主题。图3-4展示了一些第三方的Drupal主题。

主题的定制是Drupal建站中最重要的一个环节。尽管Drupal的主题有很多种,但要选择一款适合自己网站的主题也绝非一件易事。大部分的解决
方案是先选择一个和网站风格比较相近的主题模板,然后在此基础上进行修改。Drupal提供了“主题引擎(Theme
Engine)”,制定了一整套主题开发的规范和函数,供开发者灵活创建自定义主题。如何开发自己的Drupal主题将在“开发篇”中详细介绍。

图3-3 Drupal的默认主题

图3-4 丰富多彩的Drupal主题

很多开发者对主题和模板的概念较为模糊。从范围上看,模板是主题的一部分,通常是指一类文件,这类文件规定了页面的大体框架,网站在显示某个内容
时,会将内容放置在模板中适当的地方。主题是指网站整体的风格和样式,除了一系列模板文件外,还有各种图像和样式表文件等。下面这个公式很好地诠释了主题
的组成:主题 = 模板文件 + 样式表 + 图像 +
JavaScript脚本文件。从Drupal网站上下载的Drupal的主题,就是这些文件的集合压缩包。

Taxonomy upgrade extras: 

3.5 区块(Block)

区块是用于在页面上展示一部分数据的方法。它是一个小块区域,里面可以放置文字、图片、文章列表或其他内容。这些区块通常被放置在页面的“非主要部分”。非主要部分主要是指顶部、左侧、右侧和底部。另外,区块还可以被设置只在某个页面或某类页面显示。

区块在页面中可以放置的地方称为“区域”。区域是由“主题”规定的,Durpal的主题引擎默认将页面分为五个区域,如图3-5所示。每个主题可以
自定义页面模板,增加或减少区域。页面模板文件page.tpl.php中包含有区域变量(如$left、$right等),通过修改HTML代码或
CSS样式可以实现对定位的修改。一个区域中可以拥有0个或多个区块,但每个区块只能被放置在一个区域中,不能同时出现在两个以上的区域。

图3-5 Drupal的默认区域

管理员可以在后台的区块管理中设置区块的所属区域,以及每个区块的属性(如标题、可访问的角色以及在哪些页面中显示等)。网站用户也可以选择其是否开启和关闭,只要系统赋予了这样的权限。

区块有两种创建方式:一种是在后台管理像创建节点那样创建区块,填入静态的HTML代码;另一种方式是通过自定义模块,使用区块的钩子函数来创建区块,这些将在后面的“开发篇”中介绍。

Taxonomy upgrade extras: 

3.6 菜单(Menu)


单是网站中常见的页面元素,它由一系列超链接组成,并以某种方式进行排列(如权重),起网站导航的作用。菜单的内容和摆放位置是否合理,也是决定网站受欢
迎程度的重要因素之一。Drupal提供了完整的菜单管理功能,可创建很多菜单组,每个菜单组中包含多个菜单项,而菜单项还可以有子项,是一个树型结构。

Drupal有三个预置的菜单组:主要链接(Primary Links)、二级链接(Secondary Links)和个人导航(Navigation),分别显示在页面上方和左侧区域中。

Drupal中还有一个“菜单系统(Menu
System)”,它和本节所说的“菜单”不是同一个概念。菜单系统是框架级别的功能,用于对请求的URL进行解析,并调用相应的函数进行处理,返回页面
上要显示的内容。在开发Drupal模块时,如果需要生成自定义的页面,要使用菜单系统提供的用于菜单注册的钩子函数——hook_menu来告知
Drupal注册哪个路径以及相应的处理函数。

Taxonomy upgrade extras: 

3.7 用户(User)

用户是网站的受众,也是网站内容的贡献者。现在大多数的网站都支持用户注册。Drupal适合构建从个人网站到社区驱动的网站(community-driven),是一个多用户系统,支持用户注册和身份验证,并具有维护个人信息的功能。

管理员可以通过后台管理的“用户管理”功能查看当前网站的全部用户,并可批量更新用户状态、按排用户角色或删除用户。Drupal采用
“基于角色的访问控制”的权限管理机制。角色可以理解为一个用户组,组内的成员具有相同的对网站的访问和操作权限。每个用户可以同时具有一个或多个角色。
在后台可以管理 “用户角色(User
Roles)”和“权限(Permission)”。管理员在后台管理的角色管理中可根据网站需求增加角色,如如普通管理员、新闻发布者、站点维护者等。
但Drupal中有两个预先定义的角色不能被更改:

  • 匿名用户(Anonymous User):未注册用户或已注册但未同过审核的用户;
  • 认证用户(Authenticated User):已注册并同过审核的用户。

每个权限项,如创建节点(Create Story Node)等权限,是由模块提供的,使用钩子函数hook_perm在模块中定义。权限不能在后台管理中手动创建。

Taxonomy upgrade extras: 

3.8 评论(Comment)

评论也是一种内容,但不作为Drupal中的一种内容类型而存在。每个评论包含标题和内容,但标题是选填的。在Drupal中,每个评论必须对应于一个节点,不能单独存在。如果开启了评论模块,并且在内容类型中设置此内容类型支持评论,那么用户即可发表对节点的评论。

另外,评论模块是论坛模块的依赖模块。论坛的每个主题帖都是一个节点,而“回帖”其实就是对主题帖的一种“评论”。因此Drupal利用“评论”功能来实现论坛的功能。这样做的好处是无须重复开发功能,充分利用现有资源。

Taxonomy upgrade extras: 

3.9 分类(Taxonomy)

分类是将网站中的节点,按其内容属性进行的分类。比如上文提到的例子中,管理员可以发布各种新闻。而依据所报道内容的不同,又可以将新闻分为国际新闻和国内新闻等。这两个就属于“分类”。

在Drupal中,对内容的分类是由分类模块(Taxonomy Module)实现的。

词汇表(Vacabulory)和项(Term)是Drupal分类的核心概念。网站中会有很多内容类型,比如新闻和博客文章。那么,对于新闻和博
客文章的分类就可能是不同的。比如新闻分为国内新闻和国际新闻,而博客文章可能分为文学、艺术或个人心得等。这时需要分别为新闻和博客文章各创建一个分类
组,每个组里包含只针对某种内容类型的分类。这个分类组就称为词汇表。每个词汇表中包含多个分类项。如图3-6和图3-7所示为新闻的词汇表和博客文章的
词汇表。

图3-6 新闻词汇表

图3-7 博客文章词汇表

分类模块也是论坛模块的依赖模块。Drupal创建了一个新的词汇表,名称为“Forum”,然后使用词汇项来表示各个论坛。由于分类项间可以有继承关系,因此使用分类就能准确地表达论坛的层次结构。图3-8是一个社区论坛结构。

图3-8 社区论坛结构

Taxonomy upgrade extras: 

3.10 小结


章对Drupal中的一些基本概念和重要术语作了介绍。这些对Drupal的使用、管理和开发都有非常重要的意义。Drupal是内容管理系统,基本概念
都和内容管理领域紧紧相关,但若使用Drupal作为应用程序框架,则需要将其他业务领域的数据映射到Drupal中来。如何高效地使用Drupal的功
能实现需求,是Drupal开发者最需要掌握的技能。相信随着各个功能的使用,读者会对些概念有更具体的了解,也就可以更灵活地运用Drupal了。

Taxonomy upgrade extras: 

drupal 基础理论的更多相关文章

  1. Drupal 8.2.4安装简体中文步骤

    安装的时候发现很多情况下会出现各种问题,现在写下自己安装成功的步骤: 1.首先官网下载zip安装包drupal-8.2.4.zip 2.下载官方提供的8.2.4简体中文语言包drupal-8.2.4. ...

  2. PhpStorm创建Drupal模块项目开发教程(3)

    rush是 Drupal的脚本界面,PhpStorm的命令行工具支持Drush 5.8和更高版本. 接下来就Drush配置和基本操作进行设置,首先点击打开Settings | Command Line ...

  3. PhpStorm创建Drupal模块项目开发教程(2)

    通常支持Drupal HOOK的文件为.module.首先我们需要在这里对它进行声明,以便索引,并且在代码完成中使用Ctrl+Space(空格)完成HOOK实现. Drupal HOOK调用,通常情况 ...

  4. Joomla软件功能介绍与开源程序大比拼Joomla,wordpress,Drupal哪个好?

    Joomla 软件功能介绍:    Joomla!是一套在国外相当知名的内容管理系统 (Content Management System, CMS),它属于Portal(企业入口网站)类型,顾名思义 ...

  5. Drupal资源

    以下是一些Drupal的常用资源. www.drupal.org:Drupal官网,拥有最全 www.acquia.com:Drupal奠基人Dries主导的专业网站,有著名的Aquia平台,功能类似 ...

  6. Drupal 7.31SQL注入getshell漏洞利用详解及EXP

    0x00 这个漏洞威力确实很大,而且Drupal用的也比较多,使用Fuzzing跑字典应该可以扫出很多漏洞主机,但是做批量可能会对对方网站造成很大的损失,所以我也就只是写个Exp不再深入下去. 0x0 ...

  7. drupal记录(一)

    翻译包下载网址:locallize.drupal.org 中文模块 local 自动下载模块 L10n_update 第三方menu菜单 admin menu,menu bar 打开这个后要关闭系统自 ...

  8. git drupal eclipse

    eclispe如何打补丁https://www.drupal.org/patch/apply打patch,初级详细教程https://www.drupal.org/node/620014

  9. 新版PHP 7效能實測:Drupal 7能快70%,碎形計算大勝Ruby和Python

    PHP 7才剛在12月3日正式釋出,網頁開發框架Zend公司立刻發表了一份PHP新舊版效能大車拼報告,除了PHP 7和PHP 5.6之外,也把HHVM 3.7版納入一起比較. Zend公司選擇了幾套知 ...

随机推荐

  1. 品味Zookeeper之选举及数据一致性_3

    品味Zookeeper之选举及数据一致性 本文思维导图 前言 为了高可用和数据安全起见,zk集群一般都是由几个节点构成(由n/2+1,投票机制决定,肯定是奇数个节点).多节点证明它们之间肯定会有数据的 ...

  2. spark_flume_mysql 整合

    本人的开发环境: 1.虚拟机centos 6.5 2.jdk 1.8 3.spark2.2.0 4.scala 2.11.8 5.maven 3.5.2     在开发和搭环境时必须注意版本兼容的问题 ...

  3. Linux系统管理之硬盘管理

    硬盘是计算的重要组成部件之一,硬盘为操作系统提供持久话存储的功能,在Linux硬盘设备的性能和好坏可能关系到生成线的安全和用户体验等等.熟练的掌握硬盘管理相关的信息能让我们处理起这些问题来得心应手. ...

  4. iOS的本地推送删除不了解决方法

    最近在研究苹果推送,当测试本地推送的时候,发现一个问题,就是一旦你添加了一个本地推动的通知,当你修改代码,删除应用,当你再次运行app,它还是会在横幅上面弹出推送,尼玛怎么搞都删除不了,近乎崩溃了,开 ...

  5. 9.tab栏切换

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  6. rabbitMq使用学习笔记

    rabbitmq的工作原理: MQ全称为Message Queue,即消息队列, RabbitMQ是由erlang语言开发,基于AMQP(Advanced MessageQueue 高级消息队列协议) ...

  7. centos下 KeyboardInterrupt 退不出来的结局方法

  8. C++_类入门2-使用类

    进一步探讨类的特征,重点是类设计技术,而不是通用原理.一些特性很容易,一些特性很微妙. 运算符重载 目的是使C++操作更美观,更接近于内置类型的操作. 隐藏了内部的实现机理,并强调了实质. 格式:op ...

  9. P2257 YY的GCD (莫比乌斯反演)

    [题目链接] https://www.luogu.org/problemnew/show/P2257 // luogu-judger-enable-o2 /* -------------------- ...

  10. HDU - 2276 位运算矩阵快速幂

    挺有意思的一道题 要会运用一些常见的位运算操作进行优化 题目的本质就是要求下面的式子 \(dp[i][j+1]=(dp[i-1][j]+dp[i][j]) \mod 2\) (第\(i\)个字符在\( ...