将块插入 Magento2 中的自定义位置

Inserting blocks into custom places in Magento2

在 Magento 1 中

我可以这样编辑 local.xml

<default>
    <reference name="root">
        <block type="core/template" name="above_main" template="page/html/banner.phtml" />
    </reference>
</default>

我可以像这样编辑模板文件:

<body<?php echo $this->getBodyClass()?' class="'.$this->getBodyClass().'"':'' ?>>
<?php echo $this->getChildHtml('after_body_start') ?>
<div class="wrapper">
    <?php echo $this->getChildHtml('global_notices') ?>
    <div class="page">
        <?php echo $this->getChildHtml('header') ?>

        <?php // MY EDIT: ?>
        <?php echo $this->getChildHtml('above_main');

        <div class="main-container col2-left-layout">
            <div class="main">
                <?php echo $this->getChildHtml('breadcrumbs') ?>

<!-- rest of page... -->

最后 page/html/banner.phtml 处的文件将被插入模板中我自己的自定义位置 above_main

好的,我的问题是:

如何在 Magento 2 中执行此操作?

Magento 2 中不再有 local.xml。Magento 选择将所有 XML 包含在模块中。如果你想修改一个模块的 XML,你必须在你的等效主题目录中创建一个新的 XML 同名文件,并在那里进行修改。

将模板插入特定页面的方法有很多种。

选项 1
假设您要在产品详细信息页面上添加模板。您需要在模块中创建新的 xml 文件 catalog_product_view.xml。您 xml 代码可能如下所示:

<?xml version="1.0"?>
<body>
    <referenceContainer name="product.info.main">
        <block class="Lapisbard\Catalog\Block\Product\View\Extra"
               name="product.view.extra"
               template="Lapisbard_Catalog::product/view/extra.phtml"
               after="product.info.overview">
        </block>
    </referenceContainer>
</body>

这里我要在产品页面上插入一个自定义模板。您可以使用 before/after 标签根据您想要放置模板的位置来安排您的容器。您可以通过类似的方式在模块帐户中创建布局文件来处理页面。例如:您可以使用 cms_index_index.xml 作为主页。

备选方案 2
您可以使用以下代码在任何其他模板文件中调用您的自定义模板文件:

echo $this->getLayout()
          ->createBlock('Lapisbard\Catalog\Block\Product\View\Extra')
          ->setTemplate('Lapisbard_Catalog::product/view/extra.phtml')
          ->toHtml();

选项 3
查看本教程,其中重点介绍了如何利用 default.xml 进行结构更改 https://gielberkers.com/creating-blocks-in-magento-2/