Magento 2-ブロック名vs名前


10

私はMagento 2でいくつかの作業を行っており、(フロントエンドに)インストールしたモジュールを上書きしています。

しかし、今日私は今までに出会ったことのない何かに出くわしました。私が使用しているモジュールには、次のようなブロックが含まれています。

<referenceBlock name="product.info.details">
    <block class="Vender\Module\Block\Catalog\Related" name="posts.tab" as="blog.posts"
               template="Vender_Module::catalog/posts.phtml" group="detailed_info">
    </block>
</referenceBlock>

それはその名前を設定します:

posts.tab

次にasを使用し、次のようにして呼び出せるようにします。

as = "blog.posts"

asの名前を使用し削除するブロックを参照しようとしたときに、ページから削除されていないことに気付きました。

<referenceBlock name="product.info.details">
    <referenceBlock as="blog.posts" remove="true"/>
</referenceBlock>

それで、フロントエンドで実際にページが呼び出されているところを見に行きました(他の場所で名前が変更されていたり、posts.tab名を使用していない場合に備えて)-ブロック名は、posts.tabで呼び出されています。私はそのブロックを参照して削除することができます。それはうまくいきました。

しかし、私の質問は、なぜブロックは使用して引っ張られていないされ、代わりに使用して引かれる名前を

2番目に、asのポイントは何ですか?明らかに、ブロックはとにかく競合する名前を持つことができず、一意である必要があります-しかし、私は完全に間違っているかもしれません。

回答:


2

この例では、as属性は役に立たないようです(他で使用されていない限り)。名前またはエイリアス経由で呼び出された場合、違いがあるとは思わないため、使用するものを選択するのは開発者次第です。エイリアスが設定されている場合は、を呼び出すときにそれを使用する必要がありますgetChildHtml

個人的には、エイリアスを使用して、長いブロック名を短くしたり、テンプレートを介してレンダリングするときに読みやすくしたりします。たとえば、としてcheckout.header.logo.text使用する必要がlogo.textありheader.logo.text、すでに使用されている場合、logoTextすべてのブロックでエイリアスを使用できます。同じレイアウトハンドルと参照で設定されていない限り、同じエイリアスを使用する他のブロックのレンダリングには影響しません。

TL:DR大きな違いはありませんが、読みやすさ/名前の短縮のためです。

ノート

このM1の質問には、もう少し情報があります- 「名前」を使用する場合と「名前」を使用する場合

これがM2に当てはまるかどうかはわかりませんが、M1にはaliasas属性を使用する呼び出された引数が少なくとも1つありました。これは、ブロックの挿入または設定解除に関連していると思います。

Fabian Schmenglerによれば、「エイリアスを定義せずにブロックが作成された場合、エイリアスはデフォルトで名前になります。」これはM1を指しますが、同じことがM2にも当てはまると思います。


ちょうど2.3.1で、ブロックに「as」エイリアスがあるため、名前でgetChildHtmlを取得できませんでした。エイリアスを削除した後でのみ、テンプレートでブロックを取得できました。
TheKitMurkit

良い点@TheKitMurkit-「エイリアスが設定されている場合、getChildHtmlを呼び出すときにそれを使用する必要があります。」という回答を少し追加しました。ありがとう。
Ben Crook
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.