Magento 2 - nombre de bloque vs como nombre

10

He estado trabajando en Magento 2 y he sobrescrito algunos módulos que he instalado (en la interfaz).

Sin embargo, hoy acabo de encontrar algo que no había encontrado antes. El módulo que he estado usando tiene un bloque dentro que tiene lo siguiente:

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

Establece su nombre:

posts.tab

y luego usa el as para permitir que se llame a través de

como = "blog.posts"

Cuando intenté hacer referencia al bloque que se eliminará con el nombre como , noté que no lo estaba eliminando de la página:

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

así que fui a ver cómo se llamaba realmente la página en la interfaz (solo en caso de que fuera renombrada en otro lugar o no usara el nombre posts.tab): el nombre del bloque se llama con posts.tab , lo cual está bien como puedo hacer referencia a ese bloque para eliminarlo. Eso funcionó bien.

Pero mi pregunta es, ¿por qué no se extrae el bloque usando as y en su lugar se extrae usando el nombre ?

En segundo lugar, cuál es el punto en el as , porque obviamente los bloques no pueden tener nombres en conflicto de todos modos y deberían ser únicos, pero podría estar totalmente equivocado.

andy jones
fuente

Respuestas:

2

En este caso, parece que el atributo as es inútil (a menos que se use en otro lugar), no creo que haga una diferencia si se llama por nombre o alias, por lo que depende del desarrollador elegir qué usar, solo tenga en cuenta que si se establece un alias, deberá usarlo cuando llame getChildHtml.

Personalmente, solo usaré un alias para acortar un nombre de bloque largo y / o hacerlo fácilmente legible cuando lo represente a través de una plantilla. Por ejemplo, si checkout.header.logo.textnecesita usarse como logo.texty header.logo.textya se usa, puede usar el alias logoTexten todos los bloques. Esto no afectaría la representación de los otros bloques con el mismo alias a menos que estén configurados en el mismo controlador y referencia de diseño.

TL: DR No hace mucha diferencia, es más por legibilidad / acortar nombres.

Notas

Esta pregunta M1 tiene un poco más de información para: cuándo usar 'nombre' y cuándo usar 'como'

No estoy seguro de si esto se aplica a M2 pero en M1 había al menos un argumento llamado aliasque usaba el asatributo, creo que estaba relacionado con la inserción o el desarmado de bloques.

Según Fabian Schmengler: "Si el bloque se creó sin definir un alias, el alias predeterminado es el nombre". Eso se refiere a M1 pero supongo que lo mismo se aplica a M2.

Ben Crook
fuente
Justo ahora en 2.3.1 no pude obtener ChhildHtml por nombre porque el bloque tenía un alias "como". Solo después de eliminar el alias pude obtener el bloque en una plantilla.
TheKitMurkit
Buen punto @TheKitMurkit: agregué un poco a mi respuesta que dice "si se establece un alias, deberá usarlo cuando llame a getChildHtml". Gracias.
Ben Crook