Quand utiliser 'nom' et quand utiliser 'comme'

26

J'ai découvert qu'en essayant d'utiliser la unsetChildméthode, je dois parfois utiliser l'attribut 'name' et d'autres 'as'. Il semble que si un bloc est ajouté normalement, vous utilisez «comme» mais s'il est ajouté à un bloc à l'aide de la appendméthode, vous devrez peut-être utiliser «nom». Cette hypothèse est-elle correcte?

Quel est le raisonnement derrière cela et existe-t-il un moyen standard de comprendre quel attribut vous devez utiliser?

Glo
la source

Réponses:

15

Le bloc peut toujours être référencé par name. Alias ​​( as) est utilisé pour simplifier le nom long d'un bloc et le seul diffère avec la portée. Namedoit être unique dans la page et aliasdans un bloc parent.

user487772
la source
5
Je crains que rien de tout cela ne soit vrai. Dans le modèle, vous ne pouvez pas référencer un bloc par son nom s'il a un alias défini. Vous ne pouvez utiliser que l'alias. Quant à l'unicité de l'alias, c'est tout le contraire qui est vrai - l'alias a été introduit pour permettre le rendu d'un bloc différent sans changer de modèle.
Jan Tomka
5
@JanTomka a donné l'utilisation principale des alias. Il convient de souligner que si la déclaration selon laquelle "vous ne pouvez pas référencer un bloc par son nom s'il a un ensemble d'alias" est généralement vraie, il existe une méthode nommée getBlockHtml()qui est parfois utilisée pour rendre les blocs par leur nom.
benmarks
6

Lorsque vous utilisez as , vous pouvez appeler $ this-> getChildHtml ("as_value") sur le modèle phtml.

Le nom doit être unique et peut être utilisé pour les blocs <référence> , <supprimer> , etc.

Par exemple (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 vous ouvrez catalogue / produit / view.phtml, vous verrez:

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

Tu vois? as = "media", puis $ this-> getChildHtml ('media') ...

Ricardo Martins
la source
5

Personne n'a encore répondu à la question particulière unsetChild. Les méthodes liées aux enfants d'un bloc font toujours référence aux blocs enfants par alias, qui n'est connu que du parent et contrairement au nom, qui n'est pas globalement unique.

Mais si le bloc a été créé sans définir d'alias, l'alias prend par défaut le nom.

Donc, en bref, si le bloc enfant a un alias explicite, vous devez utiliser l'alias. Sinon, utilisez le nom.

Les alias sont donnés par as="..."si le bloc a été créé en tant que bloc enfant via XML, ou par paramètre d'action s'ils ont été déplacés ou ajoutés dynamiquement avec des méthodes comme append(), insert()ou setChild().

Fabian Schmengler
la source