Remover bloco do layout no Magento 2

36

No Magento 1, eu poderia remover um bloco adicionado por um arquivo de layout, adicionando-o no meu bloco de layout

<remove ="block_id_here" />

Como posso fazer o mesmo com o Magento 2?
Como um exercício prático, digamos que eu tenho meu próprio módulo do qual desejo remover o bloco do painel da página do administrador.
O bloco é adicionado app/code/Magento/Backend/view/adminhtml/layout/adminhtml_dashboard_index.xmlusando este:

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

Suponho que preciso criar o arquivo view/adminhtml/layout/adminhtml_dashboard_index.xmlno meu módulo, mas o que preciso colocar nele?

Marius
fonte

Respostas:

70

Nas versões mais recentes do Magento2, o método remove é agora:

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

Exemplo:

<?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>

É importante saber se você está tentando fazer algo mais do que apenas remover um elemento. Alterar o namespace para o layout em vez de page_configurationpode não permitir que você faça tudo o que precisa.

Adam Daniels
fonte
Isso funcionou para mim. O mais estranho é, no entanto, que o exemplo declarado em devdocs.magento.com/guides/v2.0/frontend-dev-guide/themes/… realmente use a <remove />tag -t. Erro na documentação?
Giel Berkers
@GielBerkers Muito provavelmente um erro na documentação - informe-os github.com/magento/devdocs #
Alan Storm #
Como posso fazer isso um arquivo phtml
Waqar Ali
8

No ramo de desenvolvimento mais recente do magento 2, tente criar 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"/>

Fonte https://github.com/magento/magento2/search?l=xml&q=remove&utf8=%E2%9C%93

Renon Stewart
fonte
0

Então, digamos que você queira remover o bloco de título da página de sucesso. Primeiro, você precisará encontrar o xml responsável por essa página específica. No nosso caso, serávendor/magento/module-checkout/view/frontend/layout/checkout_onepage_success.xml

E neste arquivo você terá o seguinte conteúdo:

<?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>

Agora você precisará estender esse xml no seu tema. app/design/frontend/.../.../Magento_Checkout/layout/checkout_onepage_success.xml Dentro dele, faça referência ao bloco que você deseja remover page.main.titlee adicionar da seguinte remove="true"forma:

<?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>

Se você deseja remover um bloco específico de todas as páginas do cms, é possível estender o xml padrão vendor/magento/module-theme/view/frontend/layout/default.xml na pasta de temas da seguinte app/design/frontend/.../.../Magento_Theme/layout/default.xmlforma:

<?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>
Andrei
fonte