1 Magento 2 核心布局是什么?

页面的基本组件是布局、容器和块。布局表示网页的结构。容器代表该网页结构中的占位符。块代表容器占位符内的 UI 控件或组件。

在这篇博客中,我们将解释如何覆盖 Magento 2 布局。Magento 2 中的布局 xml 文件描述了页面结构。

强烈建议您在想要完全取消使用核心的布局文件并定义自己的布局时覆盖布局文件。

不要重写 Magento 2 核心文件。为了保证您的修改安全,您应该覆盖或扩展自定义主题中的布局文件。

2 2 种 Magento 2 核心布局:基础布局和主题布局

Magento 2 布局分为两种类型的布局:基本布局主题布局这是它们之间的主要区别。

2.1 基地布局

基本布局文件由模块提供。我们可以在这个路径上找到这些文件: 

  • 配置和一般布局文件: {module_dir}/view/frontend/layout/
  • 页面布局文件: {module_dir}/view/frontend/page_layout/

2.2 主题布局

主题布局由 Magento 主题提供。我们可以在这条路径上找到它们:

  • 配置和一般布局文件: {theme_dir}/Namespace_Module/layout/
  • 页面布局文件: {theme_dir}/Namespace_Module/page_layout/

3 覆盖核心布局

当我们执行自定义时,我们可以覆盖布局,这意味着您放置在主题中的新文件将被使用,而不是父主题布局文件或基础布局文件。

3.1 覆盖基础布局

添加覆盖的基本布局文件(覆盖模块提供的基本布局):

将同名的布局文件放在以下位置:

<theme_dir> 
  |__/<Namespace_Module> 
     |__/layout 
       |__/override 
          |__/base 
            |--<layout1>.xml 
            |--<layout2>.xml

这些文件覆盖以下布局:

  • <module_dir>/view/frontend/layout/<layout1>.xml
  • <module_dir>/view/frontend/layout/<layout2>.xml

例如:

  • <theme_dir>/Magento_Customer/layout/override/base/default.xml 将覆盖
  • vendor/magento/module-customer/view/frontend/layout/default.xml (或 app/code/Magento/Customer/view/frontend/layout/default.xml 如果您使用 github 版本)

3.2 覆盖主题布局

要覆盖父主题布局:

将同名的布局文件放在以下位置:

<theme_dir>

  |__/<Namespace_Module>

     |__/layout

       |__/override

         |__/theme

             |__/<Parent_Vendor>

                |__/<parent_theme>

                   |--<layout1>.xml

                  |--<layout2>.xml

这些文件覆盖以下布局:

  • <parent_theme_dir>/<Namespace>_<Module>/layout/<layout1>.xml
  • <parent_theme_dir>/<Namespace>_<Module>/layout/<layout2>.xml

要覆盖页面布局文件,请使用 page_layout 目录名称而不是布局。

4 结论

覆盖布局文件为主题定制创造了有利条件。但是,您需要记住,覆盖的布局文件不受对主文件的任何更改的影响,如果您不仔细检查正在更新的文件,这反过来可能会导致将来升级 Magento 2 时出现问题。

因此,应该非常小心地使用覆盖,并且只在真正需要并且不能没有它的情况下使用。