Drupal专业开发指南 第14章 在Drupal中使用分类(Drupal taxonomy)(1)

14 Drupal的分类法(Taxonomy

译者:老葛

分类是对事物的划分归类。Drupal自带了一个分类模块(Taxonomy module),它允许你对节点(就是所谓的“事物”)进行分类。在本章中,你将看到Drupal支持的分类的不同形式。你也将看到数据是如何存储的,如何对分类(taxonomy)数据库表写出查询语句,以在你自己的模块中使用这些语句。最后,你将会看到,当分类(Taxonomy)改变时,你的模块如何受到改变的通知,还有我们将介绍一些常用的分类(Taxonomy)相关的任务。

 

什么是分类

分类涉及到对事物进行归类。你将会在Administer Content Management Categories下面看到Drupal的对分类的支持(如果在这里没有的话,请确认启用了分类模块)。当涉及到Drupal的分类系统时,用词的准确性是非常重要的。让我们看一下你将会遇到的常用词。

 

词语(terms)

词语是将要应用到节点上实际标签。例如,假定你有一个包含产品评论的网站。你可以在每一个评论上使用词语“坏的”,“可以”,“优秀”来进行标记。词语有时也称为标签,将一个词语指定到一个对象(比如说一个产品评论节点)上的行为称之为标签化。

 

抽象层次(A level of Abstraction

当你查看数据结构时,你会立即发现,Drupal对所有你输入的词语添加一个层次上的抽象,在内部对它们的引用是通过ID来完成的,而不是通过名字。例如,如果你在前面输入了一个词语,但是你的经理觉得单词“Poor”比“Bad”更好一些,这时没有任何难的。你简单的编辑这个id1词语,将它从“Bad”改为“Poor”。在Drupa内部一切工作正常,这是因为Drupal在内部把它当作了ID1的词语来进行使用。

 

同义词(Synonyms

当你定义一个词语时,你可以输入该词的同义词;一个同义词是一个具有同样含义的单词。Drupal包含的分类功能允许你输入同义词,并提供了数据库表对它们进行存储,以及一些有用的函数比如taxonomy_get_synonyms($tid) and taxonomy_get_synonym_root($synonym),但是对这些函数的用户接口的实现留给了贡献模块,比如术语表模块(glossary module)(http://drupal.org/project/glossary)。

 

词汇表(vocabularies)

一个词汇表包含了一组词语。Drupal允许你将一个词汇表与一个或多个节点类型相联系。当跨节点类型进行分类时,这种弱联系非常有用。例如,如果你有一个站点,允许用户可以提交关于旅游的故事和图片;这将非常容易的让你看到标记为Belgium的所有故事和图片。词汇表接口编辑页面如图14-1所示。

 

必须的词汇表

词汇表可以是必须的,也可以不必须。如果一个词汇表是必须的,那么用户在提交节点表单以前必须为节点选择一个词语。如果不是必须的,那么用户提交表单时,可以使用默认词语none.

 

受控的词汇表

当一个词汇表有一个有限的词语时(也就是说,用户不可以添加新的词语),被称为受控词汇表。对于一个受控词汇表,词汇一般都存在于下拉选择按钮中。当然,管理员,或者拥有管理分类权限的用户可以添加,删除,或者修改词语。

自由化标签

自由化标签与受控词汇表相对立。当用户提交一个节点时,可以输入他们自己的词语。如果词语还不是词汇表的一部份的话,它将被添加。当启用自由化标签时,词汇表的用户接口将会以一个文本输入框出现(使用Javascript自动完成),而不是受控词汇表所使用的下拉选择按钮。

 

单独VS多个词语

Drupal允许你设置对于一个给定的节点,是使用单独的一个词语还是使用多个词语进行标签化。选择后者,将使得用户接口的节点提交表单中的单选下拉按钮变为多选下拉按钮。

提示:本选项仅适用于受控词汇表,对于自由化标签不使用

 

 

相关词语

如果一个词汇表允许相关词语,那么当你定义一个新的词语的时候,将会出现一个多选下拉菜单,这样你就可以从已经存在的词语中间选出相关的词语。

 

重量

每一个词汇表都有一个重量,从-1010(如图14-1所示)。这用来控制用户的节点提交表单中的词汇表的布局。词汇表的重量越轻,对应的分类字段集位置越靠上边。重量越大,位置越靠下面。

每一个词语也都有一个重量。词语的在用户的下拉选择按钮中的位置决定于它的重量。这一优先级同样展现在Administer Content management Categories List terms.

14-1 添加词汇表的表单

 

分类的种类

分类有多个种类。最简单的仅有一列词语,而最复杂的则有复杂的层次结构关系。另外,词语可以有同义词或者与它相关的词语。让我们从最简单的开始。

 

扁平结构

一个仅包含了一列词语的词汇表是非常简单的。表14-1展示了我们如何在一个叫做编程语言的简单的扁平的词汇表中对编程语言进行分类。

14-1词汇表中的简单词语

Term ID      Term Name

1                  C

2                  C++

3                  Cobol

 

层次结构

现在,让我们引入一个概念“层次”,在这里每一个词语都与另一个存在一种关系。

 

14-2 词汇编中词语的层次化结构(子词语位于父亲的下面并缩进了)

 

Term ID                      Term Name

1                               Object-Oriented

2                                   C++

3                                   Smalltalk

4                               Procedural

5                                    C

6                                    Cobol

 

14-2明确的展示了这种层次关系。在本例中,Procedural是父亲而Cobol是孩子。注意,每一个词语都有一个ID,这与它是父亲还是孩子没有关系。

14-2 一个层次化的词汇表在词语之间具有父子关系

 

多层次关系

一个词汇表可以有多层次关系而不仅仅是单层次关系。这简单的意味着一个词语可以有多于一个的父亲。例如,假定你往编程语言词汇表中添加PHP。PHP可以使用过程化的方式编码,但是在最近的版本中,面向对象的编程能力也被引入了。我们把它放到面向对象还是过程化的下面?在多层次化关系中,你可以把它放在两者的下面,如图14-3所示

14-3 一个多层次化的词汇表中,词语可以有多于一个的父亲

 

在建立网站的计划阶段,你值得花费大量的时间用来好好的认真考虑一下分类的使用情况,以决定你需要使用哪些分类。

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值