Drupal8三级面包屑的定制开发

  默认情况下,drupal8.7.6自带了一个面包屑导航的区块Breadcrumbs,比较简单。
 
  白龙研究发现,该区块出现在首页时,输出的面包屑为“首页”;出现在列表页时,输出的面包屑为“首页>当前栏目名称”;出现在内容页时,输出的面包屑为“首页>文章标题”。
 
  由此可见,Breadcrumbs区块只能输出两级面包屑,且不能输出中间路径。例如,用户需求是输出“首页>学校环境>宿舍环境”形式的面包屑,如果用Breadcrumbs来输出,那么显示结果为“首页>宿舍环境”。很显然,这不满足用户的需求。当然,可以对该区块进行二次开发,这另当别论了。
 
  如果二次开发的话,时间一般来不及。接下来分享了一个简单的方法来分别动态输出列表页、内容页的三级面包屑导航。即:中间变量+分类标题。
 
  使用这个方法实现三级面包屑导航(以“首页>学校环境>宿舍环境”为例),前提是二级页面要用page页面实现(例如,page--A.html.twig、page--B.html.twig、page--C.html.twig等等),三级页面要用分类实体实现(page--taxonomy--term--1.html.twig、page--taxonomy--term--2.html.twig等等)。
 
  在content实体中添加一个通用的link类型的二级栏目变量two_grade_breadcrumb,并设置好Linktext和URL,通过content节点动态输出二级栏目名称及链接地址;再添加一个taxonomy类型的三级栏目变量three_grade_taxonomy,用于动态输出当前栏目,即三级栏目;其它变量根据需求额外添加即可。
 
  有了上述物料的准备,接下来输出三级面包屑导航就很容易了。
 
  要在列表页实现三级面包屑导航,只需要通过一个视图动态的输出相应变量即可。如果其它栏目也要输出类似的三级面包屑导航,只需要复制该视图区块,修改机器名、标题、内容类型、所属栏目等参数即可。
 
  内容页输出“首页>学校环境>宿舍环境”这种类型的三级面包屑导航稍微麻烦些。一是公共的代码内容要放在page--node.html.twig模板中,二是面包屑要与文章放在同一个node模板中,然后分别通过{{content.two_grade_breadcrumb}}、{{content.three_grade_taxonomy}}分别动态的输出二级栏目与三级栏目名称,从而组合实现三级面包屑导航功能。
 
  这个思路同样适用于二级、四级、五级等多级面包屑导航。当然,官网也有相应很多现成的面包屑模块实现类似的功能,可以参考一下。