Magento 2 - blocca il nome contro il nome


10

Ho lavorato in Magento 2 e ho sovrascritto alcuni moduli che ho installato (sul frontend).

Tuttavia oggi ho appena incontrato qualcosa che non avevo mai visto prima. Il modulo che sto usando ha un blocco al suo interno che ha il seguente:

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

Imposta il suo nome:

posts.tab

e quindi usa il come per consentirne la chiamata tramite:

come = "blog.posts"

Quando ho provato a fare riferimento al blocco da rimuovere usando il nome come ho notato che non lo stava rimuovendo dalla pagina:

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

quindi sono andato a vedere come si chiamava effettivamente la pagina sul frontend (nel caso in cui fosse stata rinominata da qualche altra parte o non stesse usando il nome posts.tab) - il nome del blocco viene chiamato con posts.tab , che va bene come posso solo fare riferimento a quel blocco per rimuoverlo. Funzionava bene.

Ma la mia domanda è: perché il blocco non viene rimosso usando as e invece viene tirato attraverso usando il nome .

In secondo luogo, qual è il punto in quanto , perché ovviamente i blocchi non possono avere nomi in conflitto comunque e dovrebbero essere univoci, ma potrei sbagliarmi totalmente.

Risposte:


2

In questo caso sembra che l'attributo as sia inutile (a meno che non sia usato altrove), non penso che faccia la differenza se viene chiamato tramite il nome o l'alias, quindi spetta allo sviluppatore scegliere cosa usare - basta notare che se viene impostato un alias, sarà necessario utilizzarlo durante la chiamata getChildHtml.

Personalmente userò l'alias solo per abbreviare un nome di blocco lungo e / o per renderlo facilmente leggibile durante il rendering tramite un modello. Ad esempio, se checkout.header.logo.textdeve essere utilizzato come logo.texte header.logo.textgià utilizzato, è possibile utilizzare l'alias logoTextsu tutti i blocchi. Ciò non influirebbe sul rendering degli altri blocchi utilizzando lo stesso alias a meno che non siano impostati nella stessa maniglia e riferimento dello stesso layout.

TL: DR Non fa molta differenza, è più per la leggibilità / abbreviazione dei nomi.

Appunti

Questa domanda M1 ha un po 'più di informazioni su - Quando usare' name 'e quando usare' as '

Non sono sicuro che ciò si applichi a M2 ma in M1 c'era almeno un argomento chiamato aliasche utilizzava l' asattributo, penso che fosse correlato all'inserimento o al disinserimento di blocchi.

Secondo Fabian Schmengler: "Se il blocco è stato creato senza definire un alias, l'alias viene impostato automaticamente sul nome". Ciò si riferisce a M1 ma presumo che la stessa cosa si applichi a M2.


Proprio ora su 2.3.1 non sono riuscito a ottenere ChildHtml per nome perché il blocco aveva l'alias "as". Solo dopo aver eliminato l'alias ho potuto ottenere il blocco in un modello.
TheKitMurkit l'

Buon punto @TheKitMurkit - Ho aggiunto un po 'alla mia risposta che afferma "se è impostato un alias dovrai usarlo quando chiami getChildHtml.". Grazie.
Ben Crook,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.