Wann 'name' und wann 'as' zu verwenden sind

26

Ich habe festgestellt, dass ich beim Versuch, die unsetChildMethode zu verwenden, manchmal das Attribut 'name' und andere 'as' verwenden muss. Wenn ein Block normal hinzugefügt wird, verwenden Sie anscheinend 'as'. Wenn er jedoch mithilfe der appendMethode zu einem Block hinzugefügt wird, müssen Sie möglicherweise 'name' verwenden. Ist diese Annahme richtig?

Was ist der Grund dafür und gibt es eine Standardmethode, um zu verstehen, welches Attribut Sie verwenden sollten?

Glo
quelle

Antworten:

15

Block kann immer mit referenziert werden name. Alias ​​( as) wird verwendet, um den langen Namen eines Blocks zu vereinfachen. Der einzige Name unterscheidet sich vom Gültigkeitsbereich. Namemuss innerhalb der Seite und aliasinnerhalb eines übergeordneten Blocks eindeutig sein .

user487772
quelle
5
Ich fürchte, nichts davon ist wahr. In der Vorlage können Sie einen Block nicht anhand seines Namens referenzieren, wenn ein Alias ​​festgelegt ist. Sie können nur den Alias ​​verwenden. Für die Eindeutigkeit des Alias ​​gilt genau das Gegenteil. Der Alias ​​wurde eingeführt, um das Rendern eines anderen Blocks ohne Änderung der Vorlage zu ermöglichen.
Jan Tomka
5
@JanTomka hat die Hauptverwendung von Aliasen angegeben. Es sollte darauf hingewiesen werden, dass während die Aussage, dass "Sie einen Block nicht anhand seines Namens referenzieren können, wenn ein Alias ​​festgelegt ist", im Allgemeinen zutrifft, eine Methode namens existiert, getBlockHtml()die manchmal zum Rendern von Blöcken anhand ihres Namens verwendet wird.
benmarks
6

Wenn Sie as verwenden , können Sie $ this-> getChildHtml ("as_value") in der phtml-Vorlage aufrufen.

Der Name muss eindeutig sein und kann für <reference> -Blöcke, <remove> usw. verwendet werden.

Zum Beispiel (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>

Wenn Sie die Datei catalog / product / view.phtml öffnen, wird Folgendes angezeigt:

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

Siehst du? as = "media" und dann $ this-> getChildHtml ('media') ...

Ricardo Martins
quelle
5

Niemand hat die bestimmte Frage ungefähr unsetChildnoch beantwortet . Methoden im Zusammenhang Kinder eines Blocks immer beziehen sich auf das Kind Blöcke von Alias, die nur an die Mutter bekannt ist und im Gegensatz zu den Namen, die nicht weltweit einzigartig.

Wenn der Block jedoch ohne Definition eines Alias ​​erstellt wurde, wird standardmäßig der Name verwendet.

Kurz gesagt, wenn der untergeordnete Block einen expliziten Alias ​​hat, müssen Sie den Alias ​​verwenden. Wenn nicht, benutze den Namen.

Aliase werden angegeben, as="..."wenn der Block als untergeordneter Block über XML erstellt wurde, oder als Aktionsparameter, wenn sie mit Methoden wie append(), insert()oder verschoben oder dynamisch hinzugefügt wurden setChild().

Fabian Schmengler
quelle