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

时间:2016-04-13 09:35:28

标签: magento 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中执行此操作?

1 个答案:

答案 0 :(得分:8)

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/