Вставка блоков в произвольные места в Magento2

В Мадженто 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?


person Jimmery    schedule 13.04.2016    source источник
comment
Для этого вы можете использовать default.xml.   -  person amitshree    schedule 15.04.2016
comment
@amitshree покажи мне как и я поставлю тебе галочку   -  person Jimmery    schedule 15.04.2016


Ответы (1)


В 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/

person amitshree    schedule 15.04.2016