在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中执行此操作?
答案 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/