Magento 2 - nom de bloc vs nom


10

J'ai fait du travail dans Magento 2 et j'ai écrasé certains modules que j'ai installés (sur le frontend).

Mais aujourd'hui, je viens de tomber sur quelque chose que je n'ai jamais rencontré auparavant. Le module que j'utilise a un bloc à l'intérieur qui a les éléments suivants:

<referenceBlock name="product.info.details">
    <block class="Vender\Module\Block\Catalog\Related" name="posts.tab" as="blog.posts"
               template="Vender_Module::catalog/posts.phtml" group="detailed_info">
    </block>
</referenceBlock>

Il définit son nom:

posts.tab

puis utilise le as pour lui permettre d'être appelé via:

as = "blog.posts"

Lorsque j'ai essayé de référencer le bloc à supprimer en utilisant le nom as, j'ai remarqué qu'il ne le supprimait pas de la page:

<referenceBlock name="product.info.details">
    <referenceBlock as="blog.posts" remove="true"/>
</referenceBlock>

donc je suis allé voir ce que la page appelait réellement sur le frontend (juste au cas où elle était renommée ailleurs ou n'utilisait pas le nom posts.tab) - le nom du bloc est appelé avec posts.tab , ce qui est bien car je peux simplement référencer ce bloc pour le supprimer. Cela a bien fonctionné.

Mais ma question est, pourquoi le bloc n'est-il pas tiré à l'aide de as et au lieu de cela à l'aide du nom .

Deuxièmement, à quoi sert le as , car de toute évidence, les blocs ne peuvent pas avoir de noms contradictoires et devraient être uniques - mais je peux me tromper totalement.

Réponses:


2

Dans ce cas, il semble que l'attribut as soit inutile (sauf s'il est utilisé ailleurs), je ne pense pas que cela fasse une différence s'il est appelé via le nom ou l'alias, il appartient donc au développeur de choisir quoi utiliser - notez simplement que si un alias est défini, vous devrez l'utiliser lors de l'appel getChildHtml.

Personnellement, je n'utiliserai que l'alias pour raccourcir un nom de bloc long et / ou pour le rendre facilement lisible lors du rendu via un modèle. Par exemple, si elle checkout.header.logo.textdoit être utilisée en tant que logo.textet header.logo.textest déjà utilisée, vous pouvez alors utiliser l'alias logoTextsur tous les blocs. Cela n'affecterait pas le rendu des autres blocs utilisant le même alias, sauf s'ils sont définis dans la même poignée de mise en page et la même référence.

TL: DR Cela ne fait pas beaucoup de différence, c'est plus pour la lisibilité / raccourcissement des noms.

Remarques

Cette question M1 contient un peu plus d'informations - Quand utiliser 'nom' et quand utiliser 'comme'

Je ne sais pas si cela s'applique à M2 mais dans M1, il y avait au moins un argument appelé aliasqui utilisait l' asattribut, je pense qu'il était lié à l'insertion ou à la suppression de blocs.

Selon Fabian Schmengler: "Si le bloc a été créé sans définir d'alias, l'alias par défaut est le nom." Cela fait référence à M1, mais je suppose que la même chose s'applique à M2.


Tout à l'heure sur 2.3.1, je ne pouvais pas obtenirChildHtml par nom car le bloc avait un alias "as". Ce n'est qu'après avoir supprimé l'alias que j'ai pu obtenir le bloc dans un modèle.
TheKitMurkit

Bon point @TheKitMurkit - J'ai ajouté un peu à ma réponse qui dit "si un alias est défini, vous devrez l'utiliser lors de l'appel à getChildHtml.". Merci.
Ben Crook
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.