进阶篇53. Drupal中的排版9——我的layout builder模块使用心得
Drupal8.7刚发布,layout builder模块也刚刚稳定下来,在这里大谈使用经验是不道德的,这里仅仅只根据之前几个星期的试用来谈一下个人体会。
关于layout builder模块的使用方法,前几节已经讲了,这一节,主要是对前面内容的补充和延伸,也顺便回答一些我们在第2篇第47节中提出的问题。这意味着所讲的东西更加抽象(也更加没有用)。
Panels的取代者
在我看来,layout builder模块最大的成功之处在于,他的功能其实跟Panels差不多,但是使用的简单程度却远远高于Panels。而这其中最明显的差别是,layout builder模块能够提供实时预览,让你直接通过拖动来排版并且直接看到排版后的效果。可以说layout builder模块做到了Panels一直想做,但是却一直做得不怎么样的事情。因此,从这个角度来说,除非一些特殊情况,基本上layout builder模块可以直接替代Panels。
在layout builder模块出现之前,Panels的拥护者一直都是那些不擅长前端CSS的使用者,而现在layout builder模块依然可以很好的为这些人服务。但是,Panels的反对者们,却不会像反对Panels那样去反对layout builder模块,因为通过layout builder模块做出来的页面,前端代码并没有很大的变化,也就是加了几个用于排版的Class而已,但是,如果要排版,不加class名的话,几乎是无法排版的。注意,我这里说的是几乎,如果使用CSS grid layout,则可以避免添加class名,或者尽可能的避免。
非小白也需要
那么下一个问题又来了,对于熟练掌握CSS的前端开发者,他们对CSS grid layout这样的技术显然已经驾轻就熟了,对于他们来说,还有必要使用layout builder模块吗?我认为,layout builder模块虽然不是必要的工具,但是还是有用的。因为,layout builder模块的另一个大的特点(或者说功能)就是使得对某个特殊页面进行单独的版式设计成为可能,这一点,在以前只能通过覆写模板来完成。因此,这个多出来的选择,自然会在不同的需求和场合中,显示出自己的意义和价值。而且,就算我们撇开这个特点不算,layout builder模块和我们之前讲过的模块化主题开发方式也完全不冲突,而正是由于layout builder模块的存在,我们在“搭积木”的时候就会更加方便。(这个搭积木的梗如果你看不懂,说明你还应该学习前面有关模块化主题开发方式的知识点。模块化主题开发方式是比Layout builder模块更加重要的知识点,所以请一定不要忽视它。)
全都是区块
另外,layout builder模块的核心功能其实可以很简单的概括为:为用户提供一个UI界面,让他们可以在这个界面上通过拖拽区块来实现排版。
这里所说的区块,和传统意义上大家熟知的区块还有一些差别。首先,在Drupal8中,区块都是实体,这意味着区块也是可以有字段的,它和Drupal7中的区块是有区别的。其次,layout builder模块中,字段也被当成了一个区块可以被拖动,英文叫field block。再次,传统意义上的区块是全局性的,你可以在区域布局或者自定义区块页面上找到、并使用它。但是,layout builder模块的界面中,你还可以自定义非全局的区块,英文叫做inline block。这个区块只能在拥有当前版式的页面上看见。你可以把这个区块加入到你新创建的排版中,并不需要担心它会出现在别的版式中。对于那些需要单独排版的页面,这个功能显然是很实用的。
而对于layout builder模块来说,所有上面提到的区块,还包括系统、核心、第三方模块生成的区块,layout builder模块都一视同仁,用户都可以通过layout builder模块所提供的界面,调用所有这些区块,并通过拖拽来实现排版。那么,这里又会出现一个问题,对于不同权限的网站用户,从安全的角度考虑以及用户使用体验的角度,我们很显然不会希望在layout builder模块中向所有用户开放所有区块,任由他们使用。为了解决这个问题,我们可以借助以下两个模块:Block Blacklist和Layout Builder Restrictions。从另一个角度来说,如果你讨厌使用区块,那layout builder模块对于你来说就没有什么太大的用处了。在《进阶篇13. 用预处理函数添加模板建议》我们给出了一段代码,使用它,你可以很方便的为你自定义的区块添加模板建议。使用Paragraph blocks模块,你还可以把Paragraph创建的段落也当成区块,并把他们任意打印到页面不同的位置上,从而实现对段落的排版。
默认(系统自带)版式,自定义版式
在我们前面章节的演示中,读者们可以看到,layout builder模块提供默认的4种排版选择,即:一栏布局、两栏布局、三栏布局和四栏布局,其中两栏布局和三栏布局还可以选择每一栏所占的百分比。这些选择综合到一起,基本上涵盖了大部分的网页排版方式。
我们还可以自定义其他的排版方式,与之相关的功能是由核心中的Layout Discovery模块提供的。这个模块是layout builder模块的依赖模块,也就是说,当你开启layout builder模块的时候,你必须同时开启layout discovery模块。它可以读取主题中的.layouts.yml文件。通过.layout.yml文件定义的版式,我们可以更加精确的控制页面的排版以及元素的位置。具体的定义方法,请看下一节。
对传统的Drupal主题学习过程并没有大的影响
那么最后一个问题,既然Layout builder模块“那么强大那么屌炸天那么反人类”,那么对于初学者来说,既然有了Layout builder模块,那传统的Drupal主题开发所必须的知识体系就可以丢掉了么——我给出的答案是,不能。而且我也从来没有觉得Layout builder模块有多么强大,除非他能让我像用InDesign一样的对页面进行排版,不然Layout builder模块最多也只能达到隔壁wordpress的Gutenberg编辑器,或者Elementor同样的水平,而至少目前,这并不是事实。我们只能满怀希望,憧憬未来。
但是,Layout builder模块还是能让我们更加方便的排版和输出字段,如果你已经熟练掌握了前面提过的模块化主题开发方式,那你会发现,Layout builder模块会是你的好帮手。如果你还没有掌握模块化的主题开发方式,你将会发现Layout builder模块能让你更容易学会和上手模块化的主题开发方式。
当然,一切的一切,前提是——你愿意去学。