Kiedy używać „nazwy”, a kiedy „jako”

26

Przekonałem się, że kiedy próbuję użyć tej unsetChildmetody, czasami muszę użyć atrybutu „name”, a innych „as”. Wydaje się, że jeśli blok jest dodawany normalnie, używasz „jak”, ale jeśli jest dodawany do bloku za pomocą appendmetody, być może będziesz musiał użyć „nazwy”. Czy to założenie jest prawidłowe?

Jakie jest tego uzasadnienie i czy istnieje standardowy sposób zrozumienia, którego atrybutu należy użyć?

Glo
źródło

Odpowiedzi:

15

Do bloku zawsze można się odwoływać name. Alias ​​( as) służy do uproszczenia długiej nazwy bloku, a jedyny różni się zakresem. Namemusi być unikalny na stronie i aliasw bloku nadrzędnym.

użytkownik487772
źródło
5
Obawiam się, że nic z tego nie jest prawdą. W szablonie nie można odwoływać się do bloku według jego nazwy, jeśli ma ustawiony alias. Możesz używać tylko aliasu. Jeśli chodzi o wyjątkowość aliasu, jest odwrotnie - alias został wprowadzony, aby umożliwić renderowanie innego bloku bez zmiany szablonu.
Jan Tomka
5
@JanTomka podał głównie użycie aliasów. Należy zauważyć, że chociaż stwierdzenie, że „nie można odwoływać się do bloku według jego nazwy, jeśli ma on ustawiony alias”, jest ogólnie prawdziwe, istnieje metoda o nazwie, getBlockHtml()która czasami jest używana do renderowania bloków według nazwy.
zyskuje
6

Kiedy używasz jako , możesz wywołać $ this-> getChildHtml („as_value”) na szablonie phtml.

Nazwa musi być unikalna i może być stosowany do <odniesienia> bloki, <Remove> , itd.

Na przykład (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>

Jeśli otworzysz katalog / produkt / widok.phtml zobaczysz:

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

Zobaczysz? as = "media", a następnie $ this-> getChildHtml ('media') ...

Ricardo Martins
źródło
5

Nikt jeszcze nie odpowiedział na to pytanie unsetChild. Metody związane z dziećmi w bloku zawsze odnoszą się do bloków podrzędnych przez alias, który znany jest tylko do rodzica i w przeciwieństwie do nazwy, a nie globalnie unikalne.

Ale jeśli blok został utworzony bez zdefiniowania aliasu, domyślnym aliasem jest nazwa.

Krótko mówiąc, jeśli blok potomny ma jawny alias, musisz go użyć. Jeśli nie, użyj nazwy.

Pseudo są podane as="...", czy blok został utworzony jako blok dzieci poprzez XML lub parametrem działania, czy zostały one przemieszczane lub dynamicznie dodano metod, takich jak append(), insert()czy setChild().

Fabian Schmengler
źródło