「名前」を使用する場合と「as」を使用する場合


26

unsetChildメソッドを使用しようとすると、「name」属性と「as」属性を使用しなければならないことがあります。ブロックが正常に追加される場合は「as」appendを使用しますが、メソッドを使用してブロックに追加される場合は「name」を使用する必要がある場合があります。この仮定は正しいですか?

この背後にある理由は何ですか?どの属性を使用すべきかを理解する標準的な方法はありますか?

回答:


15

ブロックはいつでも参照できますname。エイリアス(as)は、ブロックの長い名前を簡略化するために使用され、スコープによってのみ異なります。Nameページalias内および親ブロック内で一意である必要があります。


5
私はそれが真実ではないのではないかと心配しています。テンプレートでは、エイリアスセットがある場合、名前でブロックを参照することはできません。エイリアスのみを使用できます。エイリアスの一意性に関しては、まったく逆です。エイリアスは、テンプレートを変更せずに別のブロックをレンダリングできるようにするために導入されました。
ヤントムカ

5
@JanTomkaは、エイリアスの主な用途を提供しています。「エイリアスセットがある場合、その名前でブロックを参照することはできません」というステートメントは一般的に正しいが、名前getBlockHtml()でブロックをレンダリングするために使用されることがあるメソッドがあります。
ベンマーク

6

asを使用する、phtmlテンプレートで$ this-> getChildHtml( "as_value")を呼び出すことができます。

名前は一意である必要があり、そしてのために使用することができます。<参照>ブロック、<削除>、など

例(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>

catalog / product / view.phtmlを開くと、以下が表示されます。

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

分かりますか?as = "media"、そして$ this-> getChildHtml( 'media')...


5

誰もunsetChildまだ特定の質問に答えていません。ブロックのに関連するメソッドは、常にエイリアスによって子ブロックを参照します。エイリアスは親のみに知られ、名前とは異なり、グローバルに一意ではありません。

ただし、エイリアスを定義せずにブロックが作成された場合、エイリアスはデフォルトで名前になります。

つまり、子ブロックに明示的なエイリアスがある場合、要するにエイリアスを使用する必要があります。そうでない場合は、名前を使用します。

エイリアスはas="..."、ブロックがXMLを介して子ブロックとして作成された場合append()insert()または、またはなどのメソッドで移動または動的に追加された場合のアクションパラメーターによって指定されますsetChild()

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.