Drupal9一个页面放置多个区块·简化开发流程提升工作效率

  对于页面布局,Drupal9的一般逻辑是,每个页面分为多个区域,每个区域可以放多个区块,每个区块可以配置多个字段。区域、区块、字段都有对应的模板或者后台可以配置。
 
  白龙网在使用drupal开发的过程中,经常会遇到这样的列表页面:头部区域、导航区域、面包屑民航区域、列表区域、分页区域、底部区域等。对于初学者而言,可能会分别新建各个区域以及对应的视图区块。这样做固然没有错,但是会让视图菜单臃肿庞大,又臭又长,不利于后期的维护管理。基于这个现状,我们可以使用drupal页面布局的基本逻辑来解决这个问题。
 
  假如,要在一个视图页面(list_spot)上新建/添加两个视图区块:面包屑区块、列表区块。那么操作方法是:
 
  一、新建页面视图
 
  在“管理->结构->视图”中新建一个机器名为list_spot的页面视图(Create a page),目的是解决列表页面title的显示并且用来分类管理多个视图区块。
 
  二、新建视图区块
 
  在新建视图页面的同时,勾选Create a block,同时创建一个视图区块——面包屑区块,list_spot视图页面下第一个面包屑导航视图区块默认的机器名为block_1。
 
  与该视图区块相关的模板有两个,面包屑导航视图区块的标题模板:block--views-block--list-spot-block-1.html.twig,需要注意,模板名称中的list-spot是视图页面list_spot的机器名,这里list与spot中间要用中划线;另外面包屑导航视图区块的名称是block-1,同时要明白block与1之间仍然要用中划线。
 
  另外,还有一个面包屑导航视图区块循环输出的内容模板:views-view-unformatted—list_spot--block_1.html.twig。因为是视图模板,所以要使用视图页面的机器名list_spot来标识,这与区块标题模块中中划线命名格式不同;区块名是机器名block_1标识第一个区块。
 
  三、添加视图区块
 
  在上述操作下,视图页面下已经有了一个机器名为block_1视图区块。因此,我们继续在该视图页面下添加第二个视图区块后,那么,默认情况下,第二个视图区块的机器名为block_2。视图区块的标题与循环内容仍然分别对应一个模板:block--views-block--list-spot-block-2.html.twig、views-view-unformatted—list_spot--block_2.html.twig。
 
  观察这两个模板,我们不难发现,不管是在标题模板,还是在循环体模板的名称中,两个模板名称的最后一段显示的是视图区块的名称:block-2、block_2;而区块名称前面的一段则表示视图页面的机器名。不同的是,视图页面的机器名list_spot在视图区块标题名称中显示为list-spot,在视图区块循环体模板名称中原样显示list_spot。
 
  这个案例说明两个问题,一是视图页面与视图区块的机器名一般是由字母、下划线、数字组成;二是当视图页面与视图区块的机器名出现在模板名称中时,如果遇到区块模板名称,则用中划线;如果遇到视图模板则用下划线。
 
  四、添加其它区块
 
  根据上述操作,可以继续在list_spot视图页面下添加其它多个视图区块,其机器名则分别为block_3、block_4、block_5、block_6……然后,根据模板的命名规则,分别制作标题、循环体模板即可原样打印静态页中的内容。
 
  需要说明的是,在循环体模板views-view-unformatted—list_spot--block-2.html.twig中,一般使用{{rows}}循环输出内容,它对应视图区块中循环输出的变量。当然,循环体模板中{{rows}}代码外可以出现部分静态代码,以确保目标代码原样输出。
 
  在此基础上扩展下,既然多个视图区块可以放到同一个视图页面中。那么多个区块也就可以放到同一个区域中。只是在区块放置到区域中时,需要根据debug提示,配置下相应模板即可。