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?

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.


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') ...


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().

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.