Magento 2 - nome do bloco vs como nome

10

Tenho feito alguns trabalhos no Magento 2 e substituindo alguns módulos que instalei (no frontend).

No entanto, hoje acabei de encontrar algo que não encontrei antes. O módulo que eu estou usando tem um bloco dentro dele que tem o seguinte:

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

Ele define seu nome:

posts.tab

e então usa o as para permitir que ele seja chamado via:

as = "blog.posts"

Quando eu tentei fazer referência ao bloco a ser removido usando o como nome notei que não era removê-lo da página:

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

então eu fui ver o que a página realmente chamou no frontend (apenas no caso de ela estar sendo renomeada em outro lugar ou não estar usando o nome posts.tab) - o nome do bloco está sendo chamado com posts.tab , o que é bom como eu posso apenas referenciar esse bloco para removê-lo. Isso funcionou bem.

Mas minha pergunta é: por que o bloco não está sendo puxado usando as e, em vez disso, está sendo puxado usando o nome .

Em segundo lugar, qual é o sentido do as , porque obviamente os blocos não podem ter nomes conflitantes de qualquer maneira e devem ser únicos - mas eu posso estar totalmente errado.

Andy Jones
fonte

Respostas:

2

Nesse caso, parece que o atributo as é inútil (a menos que seja usado em outro lugar), não acho que faça diferença se for chamado via nome ou alias; portanto, cabe ao desenvolvedor escolher o que usar - observe que se um alias estiver definido, você precisará usá-lo ao ligar getChildHtml.

Pessoalmente, usarei o alias apenas para encurtar um nome longo de bloco e / ou torná-lo facilmente legível ao renderizá-lo por meio de um modelo. Por exemplo, se checkout.header.logo.textprecisar ser usado como logo.texte header.logo.textjá estiver sendo usado, você poderá usar o alias logoTextem todos os blocos. Isso não afetaria a renderização dos outros blocos usando o mesmo alias, a menos que eles sejam definidos no mesmo identificador e referência de layout.

TL: DR Não faz muita diferença, é mais para legibilidade / abreviação de nomes.

Notas

Esta pergunta M1 tem um pouco mais de informação para - Quando usar 'name' e quando usar 'as'

Não tenho certeza se isso se aplica ao M2, mas no M1 havia pelo menos um argumento chamado aliasque usava o asatributo, acho que estava relacionado à inserção ou desmarcação de blocos.

De acordo com Fabian Schmengler: "Se o bloco foi criado sem definir um apelido, o apelido é o nome padrão". Isso se refere a M1, mas presumo que o mesmo se aplique a M2.

Ben Crook
fonte
Agora, na versão 2.3.1, não consegui getChildHtml pelo nome, porque o bloco tinha o apelido "como". Somente depois de excluir o alias eu poderia obter o bloco em um modelo.
TheKitMurkit 11/06/19
Bom ponto @TheKitMurkit - adicionei um pouco à minha resposta que afirma "se um alias estiver definido, você precisará usá-lo ao chamar getChildHtml.". Obrigado.
Ben Crook