Magento的布局系统在Magento 2中得到了极大的改进,使其更易于访问,更强大,更精简。但是,由于某些原因,在Magento 2 Admin(更确切地说,分类布局XML更新)中只提供了非常小的布局函数子集。在这篇博客中,我们将展示一个绕过这种讨厌的限制的非常简单的方法。
Magento 2 Admin中的布局更新限制
为了保持示例简单明了,假设我们要从特定类别中删除页面标题元素。在Magento 2 admin中,在类别布局更新XML字段中,我们添加以下行。
<referenceBlock name="page.main.title" remove="true" />
当我们点击保存时,我们收到以下错误:
Please correct the XML data and try again. Element ‘referenceBlock’: This element is not expected. Expected is one of (referenceContainer, container, update, move ). Line: 1
要注意的是,如果在主题中使用XML文件,则此XML将是有效的。看来,在Magento 2后台和主题布局文件中适用不同的标准。
因此,只允许以下XML:
- referenceContainer - 我们可以引用现有的容器
- 容器 - 我们可以创建新的容器
- 更新 - 我们可以包含各种布局句柄
- 移动 - 我们可以移动现有的块
此信息将帮助我们绕过限制。
绕过布局更新限制
我们可以通过 在referenceContainer 代码中包装referenceBlock代码 来绕过这个限制。但是我们需要找到包含页面标题元素的容器。通过在IDE中进行简单搜索,我们找到以下代码段。
<referenceContainer name="columns.top">
<!-- ... -->
<block class="Magento\Theme\Block\Html\Title" name="page.main.title" template="html/title.phtml"/>
<container name="page.messages" htmlTag="div" htmlClass="page messages">
<block class="Magento\Framework\View\Element\Template" name="ajax.message.placeholder" template="Magento_Theme::html/messages.phtml"/>
<block class="Magento\Framework\View\Element\Messages" name="messages" as="messages" template="Magento_Theme::messages.phtml"/>
</container>
<!-- ... -->
</referenceContainer>
我们使用columns.top容器并在Admin中的Layout Update XML中引用它并将其包装在我们的初始代码中。
<referenceContainer name="columns.top">
<referenceBlock name="page.main.title" remove="true" />
</referenceContainer>
保存此配置时,我们不会在Admin中的类别页面上出现任何错误,并且会删除该特定类别的页面标题栏。