Quando usar 'nome' e quando usar 'como'

26

Descobri que, ao tentar usar o unsetChildmétodo, às vezes tenho que usar o atributo 'name' e outros 'como'. Parece que se um bloco é adicionado normalmente, você usa 'como', mas se ele é adicionado a um bloco usando o appendmétodo, pode ser necessário usar 'nome'. Essa suposição está correta?

Qual é o raciocínio por trás disso e existe uma maneira padrão de entender qual atributo você deve usar?

Glo
fonte

Respostas:

15

Bloco sempre pode ser referenciado por name. Alias ​​( as) é usado para simplificar o nome longo de um bloco e o único difere do escopo. Namedeve ser exclusivo dentro da página e aliasdentro de um bloco pai.

user487772
fonte
5
Receio que nada disso seja verdade. No modelo, você não pode fazer referência a um bloco por seu nome se ele tiver um alias definido. Você só pode usar o alias. Quanto à exclusividade do alias, o oposto é verdadeiro - o alias foi introduzido para possibilitar a renderização de um bloco diferente sem alterar o modelo.
Jan Tomka
5
@JanTomka forneceu o principal uso de aliases. Deve-se salientar que, embora a afirmação de que "você não pode fazer referência a um bloco por seu nome se ele tiver um conjunto de alias" geralmente é verdadeira, existe um método nomeado getBlockHtml()que às vezes é usado para renderizar blocos por nome.
benmarks
6

Quando você usa como , pode chamar $ this-> getChildHtml ("as_value") no modelo phtml.

O nome deve ser exclusivo e pode ser usado para blocos <reference> , <remove> , etc.

Por exemplo (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>

Se você abrir catalog / product / view.phtml, verá:

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

Entende? as = "media" e, em seguida, $ this-> getChildHtml ('media') ...

Ricardo Martins
fonte
5

Ninguém respondeu a uma pergunta em particular unsetChildainda. Os métodos relacionados aos filhos de um bloco sempre se referem a filhos por apelido, que é conhecido apenas pelo pai e, diferentemente do nome, não é globalmente exclusivo.

Mas se o bloco foi criado sem definir um alias, o alias será padronizado com o nome.

Portanto, se o bloco filho tiver um alias explícito, você deverá usá-lo. Caso contrário, use o nome

Os aliases são dados as="..."se o bloco foi criado como bloco filho via XML ou por parâmetro de ação se eles foram movidos ou adicionados dinamicamente com métodos como append(), insert()ou setChild().

Fabian Schmengler
fonte