Supprimer le bloc de la mise en page dans Magento 2

36

Dans Magento 1, je pouvais supprimer un bloc ajouté par un fichier de mise en page en l'ajoutant dans mon bloc de mise en page.

<remove ="block_id_here" />

Comment puis-je faire la même chose pour Magento 2?
Comme exercice pratique, supposons que j’ai mon propre module à partir duquel je souhaite supprimer un bloc de tableau de bord de la page du tableau de bord de l’administrateur.
Le bloc est ajouté en app/code/Magento/Backend/view/adminhtml/layout/adminhtml_dashboard_index.xmlutilisant ceci:

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

Je suppose que j'ai besoin de créer le fichier view/adminhtml/layout/adminhtml_dashboard_index.xmldans mon module, mais de quoi ai-je besoin pour le mettre?

Marius
la source

Réponses:

70

Dans les versions plus récentes de Magento2, la méthode de suppression est la suivante:

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

Exemple:

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

Il est important de savoir si vous essayez de faire autre chose que de supprimer un élément. Changer l’espace de noms en layout au lieu de page_configurationne vous permettra peut - être pas de faire tout ce que vous devez faire.

Adam Daniels
la source
Cela a fonctionné pour moi. Ce qui est étrange, c’est que l’exemple donné sur devdocs.magento.com/guides/v2.0/frontend-dev-guide/themes/… utilise en fait le <remove />-tag. Erreur dans la documentation?
Giel Berkers
@GielBerkers Très probablement une erreur dans la documentation - informez-les github.com/magento/devdocs
Alan Storm le
Comment puis-je faire cela un fichier phtml
Waqar Ali
8

Dans la branche de développement la plus récente de magento 2, essayez de créer les options 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"/>

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

Renon Stewart
la source
0

Supposons donc que vous souhaitiez supprimer le cartouche de la page de réussite. Vous devez d’abord trouver le xml responsable de cette page spécifique. Dans notre cas, ce seravendor/magento/module-checkout/view/frontend/layout/checkout_onepage_success.xml

Et dans ce fichier, vous aurez le contenu suivant:

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

Vous devez maintenant étendre ce xml dans votre thème app/design/frontend/.../.../Magento_Checkout/layout/checkout_onepage_success.xml et y faire référence au bloc que vous devez supprimer page.main.titleet ajouter remove="true"comme suit:

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

Si vous souhaitez supprimer un bloc spécifique de toutes les pages cms, vous pouvez y parvenir en étendant le code XML par défaut vendor/magento/module-theme/view/frontend/layout/default.xml dans votre dossier de thèmes de la app/design/frontend/.../.../Magento_Theme/layout/default.xmlmanière suivante:

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