第14章:Drupal的分类法2

根据词语(term)查看内容

你可以通过进入一个词语的URL来查看该词语下面的所有节点。例如,在URL http://example.com/?q=taxonomy/term/5,5是你希望查看的词语的term ID。结果将是一列包含了每个使用该词作为标签的节点的标题和Teaser。

在URL中使用AND和OR

构建支持AND和OR的分类(taxonomy)URL的语法为,分别使用逗号“,”和加号“+”。下面是一些例子。

指定了词语ID为5和6的所有节点的展示,使用下面的URL:

http://example.com/?q=taxonomy/term/5,6

使用下面的URL展示指定了词语ID为1或2,或者3的所有节点

http://example.com/?q=taxonomy/term/1+2+3

taxonomy.module对混合使用AND和OR目前还没有提供支持。

提示:使用path模块,来为你这些分类URL设置用户友好的URL,这样他们后面就不会有这些令人害怕的数字了。

为多层级词汇表声明深度

在前面的例子中,我们是用了一个隐含的参数。例如,URL http://example.com/?q=taxonomy/term/5实际上是

http://example.com/?q=taxonomy/term/5/0

当为了展示准备结果集时,最后一个参数0就是所要搜索的层级数;如果参数为all时,这意味着包括所有的层级。假定你有一个多层级词汇表,如表14-3所示。

表 14-3.一个地理多层级词汇表

(子词语为它们父亲后面,缩进了)

Term ID Name

1 Canada

2 British Columbia

3 Vancouver

4 Ontario

5 Toronto

第一层级是国家(Canada);它有两个孩子,British Columbia 和 Ontario省。每一个省都包含一个孩子,一个Drupal异常活跃的加拿大的重要城市。下面是修改URL的深度参数所起到的作用。

所有标记了Vancouver的节点使用下面的URL:

http://example.com?q=taxonomy/term/3 or http://example.com?q=taxonomy/term/3/0

为了展示所有标记了British Columbia(但是没有标记Vancouver)的节点,使用下面的URL:

http://example.com?q=taxonomy/term/2

为了展示所有标记了British Columbia(包含标记Vancouver的)的节点(注意我们这里将层级深度设为了1),使用下面的URL:

http://example.com?q=taxonomy/term/2/1

任何标记了Canada或者标记了任意一个加拿大省份或者城市的节点都可使用下面的URL来展示:

http://example.com?q=taxonomy/term/1/all

注意 结果集是作为普通的节点列表展示出来的。如果你想层次化的展示节点标题或者teaser,你需要自己编写一个定制的主题函数,或者使用views模块(http://drupal.org/project/views)。

自动的RSS种子

每个词语都有一个自动的RSS种子,用来展示最近标记了该词语的节点。例如,词语ID的种子位于

http://example.com/?q=taxonomy/term/3/0/feed

注意深度参数(这里为0)是必须的.和期望的一样,你可以使用AND或者OR来联合词语构建一个联合的种子,下面是词语2 或 4的种子,包含了所有的儿子(不包括儿子的儿子。。。):

http://example.com/?q=taxonomy/term/2+4/1/feed

下面是包含所有子孙的种子:

http://example.com/?q=taxonomy/term/2+4/all/feed

分类的存储

如果你不想局限于Drupal 内置的分类能力,那么这将驱使着你去理解分类是如何存储在数据库中的。在一个典型的非Drupal数据库中,你可能通过简单的向数据库表中添加一列来创建一个扁平的分类。正如你所看到的那样,Drupal使用普通的数据库表来添加一个分类。图14-4展示了数据库表结构


图14-4 Drupal分类的数据库表。主键使用了粗体

下列表组成了Drupal的分类存储系统:

• vocabulary:这个表存储了词汇表的相关信息,通过Drupal后台的分类接口可以修改词汇表。

(译者:葛红儒 来源:http://zhupou.cn/)


同步内容