Usuń blok z układu w Magento 2

36

W Magento 1 mogłem usunąć blok dodany przez plik układu, dodając go do mojego bloku układu

<remove ="block_id_here" />

Jak mogę zrobić to samo dla Magento 2?
Jako ćwiczenie praktyczne powiedzmy, że mam własny moduł, z którego chcę usunąć blok pulpitu nawigacyjnego ze strony panelu administracyjnego.
Blok jest dodawany app/code/Magento/Backend/view/adminhtml/layout/adminhtml_dashboard_index.xmlprzy użyciu tego:

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

Zakładam, że muszę utworzyć plik view/adminhtml/layout/adminhtml_dashboard_index.xmlw moim module, ale co muszę w nim umieścić?

Marius
źródło

Odpowiedzi:

70

W nowszych wersjach Magento2 metoda usuwania jest teraz:

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

Przykład:

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

To ważne, aby wiedzieć, na wypadek, gdybyś próbował zrobić coś więcej niż tylko usunąć element. Zmiana przestrzeni nazw na układ zamiast page_configurationmoże nie pozwolić ci zrobić wszystkiego, co musisz zrobić.

Adam Daniels
źródło
To zadziałało dla mnie. Dziwne jest jednak to, że przykład podany na devdocs.magento.com/guides/v2.0/frontend-dev-guide/themes/… faktycznie używa <remove />-tag. Błąd w dokumentacji?
Giel Berkers,
@GielBerkers Bardzo prawdopodobny błąd w dokumentacji - koniecznie daj im znać github.com/magento/devdocs
Alan Storm
Jak mogę to zrobić, plik phtml
Waqar Ali
8

W najnowszej gałęzi deweloperskiej magento 2, spróbuj utworzyć 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"/>

Źródło https://github.com/magento/magento2/search?l=xml&q=remove&utf8=%E2%9C%93

Renon Stewart
źródło
0

Powiedzmy, że chcesz usunąć tabelkę rysunkową ze strony sukcesu. Najpierw musisz znaleźć plik XML odpowiedzialny za tę konkretną stronę w naszym przypadkuvendor/magento/module-checkout/view/frontend/layout/checkout_onepage_success.xml

W tym pliku będziesz mieć następującą treść:

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

Będziesz teraz musiał rozszerzyć ten plik xml w swoim motywie. app/design/frontend/.../.../Magento_Checkout/layout/checkout_onepage_success.xml W nim odwołaj się do bloku, który musisz usunąć page.main.titlei dodać w następujący remove="true"sposób:

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

Jeśli chcesz usunąć określony blok ze wszystkich stron cms, możesz to osiągnąć, rozszerzając domyślny vendor/magento/module-theme/view/frontend/layout/default.xml plik xml w swoim folderze motywu w następujący app/design/frontend/.../.../Magento_Theme/layout/default.xmlsposób:

<?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
źródło