Cuándo usar 'nombre' y cuándo usar 'como'

26

Descubrí que cuando trato de usar el unsetChildmétodo, a veces tengo que usar el atributo 'nombre' y otros 'como'. Parece que si un bloque se agrega normalmente, usa 'como' pero si se agrega a un bloque usando el appendmétodo, es posible que deba usar 'nombre'. ¿Es correcta esta suposición?

¿Cuál es el razonamiento detrás de esto y hay una forma estándar de entender qué atributo debe usar?

Glo
fuente

Respuestas:

15

El bloque siempre puede ser referenciado por name. Alias ​​( as) se usa para simplificar el nombre largo de un bloque y el único difiere con el alcance. Nametiene que ser único dentro de la página y aliasdentro de un bloque padre.

usuario487772
fuente
55
Me temo que nada de eso es cierto. En la plantilla, no puede hacer referencia a un bloque por su nombre si tiene un conjunto de alias. Solo puede usar el alias. En cuanto a la unicidad del alias, todo lo contrario es cierto: el alias se introdujo para hacer posible que se represente un bloque diferente sin cambiar la plantilla.
Jan Tomka
55
@ JanTomka ha dado el uso principal de alias. Cabe señalar que si bien la afirmación de que "no se puede hacer referencia a un bloque por su nombre si tiene un conjunto de alias" es generalmente cierta, existe un método llamado getBlockHtml()que a veces se usa para representar bloques por nombre.
puntos de referencia
6

Cuando usa as , puede llamar a $ this-> getChildHtml ("as_value") en la plantilla phtml.

El nombre debe ser único y puede usarse para bloques <referencia> , <eliminar> , etc.

Por ejemplo (catalog.xml):

<block type="catalog/product_view" name="product.info" template="catalog/product/view.phtml">
    <block type="catalog/product_view_media" name="product.info.media" as="media" template="catalog/product/view/media.phtml"/>
</block>

Si abre catalog / product / view.phtml, verá:

<div class="product-img-box">
    <?php echo $this->getChildHtml('media') ?>
</div>

¿Lo ves? as = "media", y luego $ this-> getChildHtml ('media') ...

Ricardo Martins
fuente
5

Nadie ha respondido la pregunta particular sobre unsetChildtodavía. Los métodos relacionados con los hijos de un bloque siempre se refieren a los bloques hijos por alias, que solo es conocido por el padre y, a diferencia del nombre, no es globalmente único.

Pero si el bloque se creó sin definir un alias, el alias predeterminado es el nombre.

En resumen, si el bloque secundario tiene un alias explícito, debe usar el alias. Si no, usa el nombre.

Los alias se dan as="..."si el bloque se creó como bloque secundario a través de XML, o por parámetro de acción si se movieron o se agregaron dinámicamente con métodos como append(), insert()o setChild().

Fabian Schmengler
fuente