Est-il possible de supprimer des éléments dans une mise en page dans Magento2?


8

Quand je lis la documentation sur les mises en page ( http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/layouts/layout-types.html#layout-types-page ) je vois que le les instructions suivantes dans ce document XML sont autorisées:

  • <container>
  • <referenceContainer>
  • <move>
  • <update>

Étant donné <referenceBlock name="block.name" remove="true" />qu'aucune des instructions n'est autorisée, comment puis-je supprimer un certain élément dans une mise en page spécifique?

Ce que je veux pour les catégories supérieures, c'est un tout autre design de page. Je n'ai pas besoin de certains conteneurs et blocs pour cette conception. Pour ces catégories, je souhaite uniquement afficher les catégories enfants et non les produits.

La chose que j'ai faite maintenant, c'est d'ajouter les lignes suivantes dans ma mise en page: (in design\frontend\Vendor\Name-of-theme\Magento_Theme\page_layout\catalog-blocks.xml)

<move element="category.image" destination="delete"></move>
<move element="category.description" destination="delete"></move>
<move element="category.products" destination="delete"></move>
<move element="page.main.title" destination="delete"></move>

Dans le design\frontend\Vendor\Name-of-theme\Magento_Theme\layouts.xmlj'ai ajouté:

<layout id="catalog-blocks">
    <label translate="true">Catalog Blocks</label>
</layout>

J'ai donné à toutes les catégories supérieures cette mise en page de page de blocs de catalogue dans l'admin.

Ensuite, dans la mise en page principale ( design\frontend\Vendor\Name-of-theme\Magento_Theme\layout\default.xml), j'ai ajouté:

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

Ainsi, tout le bloc de suppression sera supprimé, avec toutes les choses que j'ai déplacées ici, dans la mise en page. Ça marche bien! Il réalise exactement ce que je veux mais le tout me semble un peu hackish.

Est-ce considéré comme une bonne pratique? Sinon, quelle serait une bonne alternative?

Edit 1 : Changé le remove-tag dans ma question avec le bon pour éviter toute confusion.

Edit 2 : Quelques informations supplémentaires sur les fichiers et les emplacements de fichiers.

Réponses:


12

Qu'en est-il de:

  • créer un nouveau conteneur (au lieu d'un bloc)
  • déplacez vos blocs dans le conteneur
  • retirer le récipient

Quelque chose comme ça:

<container name="delete" htmlTag="div" htmlClass="delete"/>

<move element="category.image" destination="delete"></move>
<move element="category.description" destination="delete"></move>
<move element="category.products" destination="delete"></move>
<move element="page.main.title" destination="delete"></move>

<referenceContainer name="delete" remove="true" />

Oui, c'est exactement ce que j'ai fait. Mon point est: cela semble bizarre. Est-ce la seule solution de contournement? Pourquoi Magento n'a-t-il pas intégré cette fonctionnalité dans la page_layouts et y a-t-il une bonne raison pour ne pas pouvoir supprimer des blocs?
11mb

@ 11mb c'est légèrement différent de ce que vous avez fait car dans mon article je crée et référence un conteneur dans un seul fichier (la mise en page xml) alors que dans votre question vous utilisez un bloc et plusieurs fichiers XML. Cependant, c'est une grande question, je ne sais pas pourquoi Magento n'a pas construit cette fonctionnalité dans la page_layouts
Raphael au Digital Pianism

@ 11mb n'hésitez pas à créer un problème sur le référentiel Magento 2 GitHub pour résoudre ce problème, c'est certainement un problème intéressant et je suis sûr qu'il y a une bonne raison derrière cela
Raphael au Digital Pianism

1
Je vois ce que vous avez fait ici. Je pense que c'est une approche légèrement meilleure. Je vais le tester et revenir ici.
11mb

6

C'est la meilleure pratique pour supprimer tout bloc ou conteneur dans magento 2. Vous pouvez passer à l' name attributeintérieur namedans l'élément ci-dessous.

<referenceBlock name="block.name" remove="true" />

Vous pouvez rechercher dans le système magento 2, vous avez trouvé la syntaxe de nombreux endroits comme ci-dessus.

Sa méthode de recommandation magento. Si l'attribut remove = "true" alors ajoutez l'élément à lister supprimer de cette mise en page.

Dans magento 1 <remove> elementest valide mais dans Magento 2 vous devez définir la même syntaxe que ci-dessus.


THX! Je pense que je dois reformuler un peu la question. Est-il possible d'utiliser <referenceBlock name="block.name" remove="true" />(je me trompais sur la removebalise) dans une mise en page directement car referenceBlockn'est pas autorisé non plus. Je dois toujours moveun élément à un «supprimer-conteneur», puis le supprimer dans le fichier de mise en page principal. Ce qui me semble étrange.
11mb

referenceBlock est utilisé lorsque déjà le bloc est défini avec le nom. sinon ce n'est pas utile. ex. <block class="Magento\Framework\View\Element\Html\Links" name="top.links">, dans ce cas, vous pouvez utiliser<referenceBlock name="top.links" remove="true" />
Rakesh Jesadiya

Je suis conscient que le bloc doit exister au préalable. Mais dans une mise en page, je ne peux pas utiliser toutes les instructions de mise en page génériques décrites ici: devdocs.magento.com/guides/v2.0/frontend-dev-guide/layouts/… . (J'ai édité ma question), donc je ne peux pas utiliser referenceBlock
11mb

dans quelle page travaillez-vous pour l'instant et quel élément voulez-vous supprimer?
Rakesh Jesadiya

J'ai ajouté quelques informations supplémentaires dans la question. Merci pour votre aide!
11mb

1

Les mises en page ne sont censées être utilisées que pour créer une structure filaire / structure de la page et non pour des modifications plus petites telles que la suppression de blocs.

Pour supprimer un bloc uniquement pour votre nouvelle mise en page, je pense que la meilleure façon est de créer votre propre poignée de mise en page et d'y apporter les modifications. Par exemple, vous pouvez créer catalog_category_toplevel.xml qui utilise votre nouvelle structure filaire / disposition et supprimer les blocs qui s'y trouvent.

Comme il s'agit plus d'une tâche principale, je ne me sens pas assez à l'aise pour fournir des instructions pour cette excuse :( Ces deux articles d'Alan Storm peuvent vous aider avec ceci:

TL: DR

Si vous souhaitez le faire et suivre les meilleures pratiques, vous devez créer un nouveau descripteur de présentation.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.