Je souhaite supprimer un bloc de la mise en page dans magento 2 qui est déclaré dans une extension tierce, mais le bloc n'a pas de nom.
Puis-je faire cela?
Le bloc est déclaré comme ceci
<referenceContainer name="before.body.end">
<block class="Magento\Backend\Block\Template" template="[Vendor_Module]::template.phtml"/>
</referenceContainer>
Je ne peux pas utiliser
<referenceBlock name="..." remove="true" />
car, comme vous pouvez le voir, il n'y a pas de nom dessus.
magento2
magento-2.1
layout
blocks
Marius
la source
la source
[Vendor_Module]::template.phtml
Réponses:
J'ai trouvé ce problème en classe
Magento\Framework\View\Layout\ScheduledStructure\Helper
Il y a une fonction
_generateAnonymousName
:C'est l'appel de la
scheduleStructure
fonction:Dans ce cas, le nom du bloc peut être:
before.body.end_schedule_block1
before.body.end_schedule_block2
Je pense que vous devez définir le bloc des totaux sans le nom sur le conteneur et le nom du bloc de commande doit être supprimé sur le conteneur.
la source
body.before.end
conteneur dans un ordre différent.$name = $this->_generateAnonymousName($parentNode->getElementName() . '_schedule_block');
, Devrait-on passer la classe et le modèle au paramètre?Je vous donne vraiment une mauvaise idée.
Ici l'idée n'est pas d'arrêter la sortie de votre bloc
Utilisation de l'événement
view_block_abstract_to_html_after
Et en utilisant cet observateur, désactivez la sortie de votre bloc
la source
J'ai eu une idée de la réponse d' Amit et je me suis retrouvé avec une solution de travail qui ne semble pas très intrusive et ce n'est pas une surpuissance puisque mon code n'est exécuté qu'une seule fois.
J'ai créé un observateur sur l'événement
layout_generate_blocks_after
qui est exécuté après le chargement des présentations et la génération des blocs.Cela peut avoir un inconvénient car le bloc que j'essaie de supprimer est toujours instancié, mais dans mon cas, je devais juste le supprimer de la page.
J'ai donc le dossier
etc/adminhtml/events.xml
et ma classe d'observateur:
la source