Удалить блок из макета в Magento 2

36

В Magento 1 я мог удалить блок, добавленный файлом макета, добавив его в свой блок макета.

<remove ="block_id_here" />

Как я могу сделать то же самое для Magento 2?
В качестве практического упражнения, скажем, у меня есть свой собственный модуль, из которого я хочу удалить блок панели мониторинга со страницы панели администратора.
Блок добавлен с app/code/Magento/Backend/view/adminhtml/layout/adminhtml_dashboard_index.xmlпомощью этого:

<referenceContainer name="content">
    <block class="Magento\Backend\Block\Dashboard" name="dashboard"/>
</referenceContainer>

Я предполагаю, что мне нужно создать файл view/adminhtml/layout/adminhtml_dashboard_index.xmlв моем модуле, но что мне нужно поместить в него?

Мариус
источник

Ответы:

70

В более поздних версиях Magento2 метод удаления теперь:

<referenceBlock name="block_name" remove="true"/>

Пример:

<?xml version="1.0"?>
<page layout="1column" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceBlock name="block_name" remove="true"/>
    </body>
</page>

Это важно знать, если вы пытаетесь сделать что-то большее, чем просто удалить элемент. Изменение пространства имен вместо макета page_configurationможет не позволить вам сделать все, что вам нужно.

Адам Дэниелс
источник
Это сработало для меня. Странно, однако, что пример, указанный на devdocs.magento.com/guides/v2.0/frontend-dev-guide/themes/…, на самом деле использует <remove />-tag. Ошибка в документации?
Гиль Беркерс,
@GielBerkers Скорее всего, ошибка в документации - обязательно сообщите им github.com/magento/devdocs
Alan Storm
Как я могу сделать это файл phtml
Вакар Али
8

В самой последней ветке разработки magento 2 попробуйте создать view / adminhtml / layout / adminhtml_dashboard_index.xml

<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="admin-dashboard" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd">
<body>
    <referenceBlock name="dashboard" remove="true"/>

Источник https://github.com/magento/magento2/search?l=xml&q=remove&utf8=%E2%9C%93

Ренон Стюарт
источник
0

Допустим, вы хотите удалить блок заголовка со страницы успеха. Сначала вам нужно будет найти XML, который отвечает за эту конкретную страницу, в нашем случае это будетvendor/magento/module-checkout/view/frontend/layout/checkout_onepage_success.xml

И в этом файле у вас будет следующий контент:

<?xml version="1.0"?>
<!--
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <head>
        <title>Success Page</title>
    </head>
    <body>
        <referenceBlock name="page.main.title">
            <block class="Magento\Checkout\Block\Onepage\Success" name="checkout.success.print.button" template="Magento_Checkout::button.phtml"/>
            <action method="setPageTitle">
                <argument translate="true" name="title" xsi:type="string">Thank you for your purchase!</argument>
            </action>
        </referenceBlock>
        <referenceContainer name="content">
            <block class="Magento\Checkout\Block\Onepage\Success" name="checkout.success" template="Magento_Checkout::success.phtml" cacheable="false">
                <container name="order.success.additional.info" label="Order Success Additional Info"/>
            </block>
            <block class="Magento\Checkout\Block\Registration" name="checkout.registration" template="Magento_Checkout::registration.phtml" cacheable="false"/>
        </referenceContainer>
    </body>
</page>

Теперь вам нужно расширить этот xml в своей теме, app/design/frontend/.../.../Magento_Checkout/layout/checkout_onepage_success.xml а внутри него ссылаться на блок, который вам нужно удалить, page.main.titleи добавить remove="true"вот так:

<?xml version="1.0"?>
<!--
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <head>
    </head>
    <body>
        <referenceBlock name="page.main.title" remove="true" />
    </body>
</page>

Если вы хотите удалить определенный блок со всех страниц CMS, вы можете добиться этого, расширив стандартный XML-файл vendor/magento/module-theme/view/frontend/layout/default.xml в папке вашей темы app/design/frontend/.../.../Magento_Theme/layout/default.xmlследующим образом:

<?xml version="1.0"?>
<!--
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceBlock name="page.main.title" remove="true" />
    </body>
</page>
Андрей
источник