跳转到主要内容

主页内容

Drupal实现多级栏目的内容列表调用

由 webadmin 发布于 阅读 89 次

       在开发网站项目的时候,栏目几乎在每个项目中都有用到,比如在进行企业网站开发的时候,通常会有“新闻资讯”、“产品展示”之类的栏目,用来发布一些新闻或内容。栏目可以把不同数据分类汇总展示。国内的CMS几乎都有栏目的框架。所以实现内容分类展示的时候很容易实现。比如要实现下面这种调用展示关系,国内的CMS都能很轻松实现。但是如果要用Drupal实现的话,相对来说要复杂一些。

产品展示 (xxx.com/products)
——— 水果(xxx.com/products/fruits) 
—————— 苹果(xxx.com/products/fruits/apples) 
—————— 橘子(xxx.com/products/fruits/oranges) 
——— 蔬菜(xxx.com/products/vegetables) 
——— 调味品(xxx.com/products/condiments) 

现在,可以按如下url进行相应的内容访问:
访问https://xxx.com/products 应该列出水果、苹果、橘子、蔬菜、调味品这些分类下的所有内容。
访问https://xxx.comxxx.com/products/fruits 应该列出水果、苹果、橘子这些分类下的所有内容。 
访问https://xxx.com/products/fruits/apples 应该列出所有“苹果”分类下的内容。
......

     Drupal中没有栏目的概念,取而代之的是“分类术语”英文名称:Taxonomy,我们可以把分类术语看作我们熟悉的栏目概念来理解。分类术语同样支持多层级分类划分。因此仍然很容易实现上面这种层级关系。因为我们在建立一个term(术语)的时候,可以给这个术语配置别名。例如:

    新建一个“产品展示”术语,配置别名:/products就实现了访问这个分类的url。我们可以用网址加上这个别名直接访问到“产品展示”栏目。在这里没有配置Relations(关系)选项,默认添加的是root(根)分类术语,我们可以理解为顶级栏目。

添加完成后点击Save(保存),这就相当于新建了一个顶级栏目。

      点击Add term(添加术语),新建“水果”栏目,配置别名/products/fruits,关系列表中选择上级栏目“产品展示”。

按上面的操作,继续添加完其他栏目,需要注意配置他们的层级关系以及为分类术语配置别名(url)。

(中间省略.....),本文核心在下面↓↓↓↓↓

    经过上面那一系列的操作,访问xxx.com/products/fruits/apples可以显示所有“苹果”分类下的内容,访问`xxx.com/products/fruits`应该显示“苹果”、“橘子”两个栏目的内容。经过测试,并没有如我所愿的显示两个栏目的内容列表。

    Drupal默认只支持一级栏目下的内容调用,并不支持二级或者更多级的栏目内容自动调用。想要实现这种效果需要安装一个Views Taxonomy Term Name Depth模块。模块地址:https://www.drupal.org/project/views_taxonomy_term_name_depth

安装composer require 'drupal/views_taxonomy_term_name_depth:^7.2'

(1)、安装并启用模块

(2)、进入Views中,找到列表中的“分类术语”并点击右侧的【编辑】(Edit)按钮进入Views编辑界面。

(3)、点击右侧的【高级】(Advanced展开高级配置,点击【上下文过滤器】(Contextual filters)后面的【新增】(Add)按钮。

(4)、在弹出的【添加语境过滤器】(Add contextual filters)中搜索“taxonomy”,在列表中找到Has taxonomy term ID (with depth)(含有分类术语ID(带深度))并勾选,点击【应用】(Apply (all displays))按钮。

(5)、在弹出的“Configure contextual filter: Content: Has taxonomy term ID (with depth)”(配置语境过滤器: 内容: 含有分类术语ID(带深度))框中的Depth(深度)选项设置为1(深度将与层次结构中用术语标记的节点相匹配。 例如,如果您使用术语 "水果 "和小项术语 "苹果 ",深度为1(或更高),则术语 "水果 "的过滤将获得带有 "苹果 "以及 "水果 "。 如果为负,则为正; 如果深度为-1(或更低),则搜索 "apple "也将选择标有 "fruit "的节点。)点击“When the filter value IS in the URL or a default is provided”(在 URL 提供了过滤器值或提供了默认过滤器值的时候)展开选项,勾选“Override title”(覆盖标题),在下方的文本框中填入:{{ arguments.term_node_tid_depth }}。点击“Apply (all displays)”(应用)保存以上设置。