Magento 2 - nama blok vs sebagai nama

10

Saya telah melakukan beberapa pekerjaan di Magento 2 dan telah menimpa beberapa modul yang telah saya instal (di frontend).

Namun hari ini saya baru saja menemukan sesuatu yang belum pernah saya temui sebelumnya. Modul yang saya gunakan memiliki blok di dalamnya yang memiliki yang berikut:

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

Ini menetapkan namanya:

posts.tab

dan kemudian menggunakan as untuk mengizinkannya dipanggil melalui:

as = "blog.posts"

Ketika saya mencoba referensi blok yang akan dihapus menggunakan nama as saya perhatikan bahwa itu tidak menghapusnya dari halaman:

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

jadi saya pergi untuk melihat apa halaman yang sebenarnya dipanggil di frontend (hanya memetikan itu sedang diganti namanya di tempat lain atau tidak menggunakan nama posts.tab) - nama blok dipanggil dengan posts.tab , yang baik-baik saja karena saya hanya bisa referensi yang memblokir untuk menghapusnya. Itu bekerja dengan baik.

Tapi pertanyaan saya adalah, mengapa blok tidak ditarik menggunakan sebagai dan bukannya ditarik menggunakan nama .

Kedua apa gunanya di saat , karena jelas blok tidak dapat memiliki nama bertentangan pula dan harus unik - tetapi saya mungkin benar-benar salah.

andy jones
sumber

Jawaban:

2

Dalam contoh ini sepertinya atribut as tidak berguna (kecuali jika digunakan di tempat lain), saya tidak berpikir itu membuat perbedaan jika dipanggil melalui nama atau alias jadi terserah pengembang untuk memilih apa yang akan digunakan - hanya perlu dicatat bahwa jika alias diatur, Anda harus menggunakannya saat menelepon getChildHtml.

Secara pribadi saya hanya akan menggunakan alias untuk mempersingkat nama blok panjang dan / atau untuk membuatnya mudah dibaca saat merendernya melalui templat. Misalnya, jika checkout.header.logo.textperlu digunakan logo.textdan header.logo.textsudah digunakan, Anda bisa menggunakan alias logoTextdi semua blok. Ini tidak akan mempengaruhi rendering dari blok lain menggunakan alias yang sama kecuali jika mereka diatur dalam pegangan dan referensi tata letak yang sama.

TL: DR Itu tidak membuat banyak perbedaan, itu lebih untuk pembacaan / pemendekan nama.

Catatan

Pertanyaan M1 ini memiliki sedikit info lebih lanjut - Kapan menggunakan 'nama' dan kapan menggunakan 'sebagai'

Saya tidak yakin apakah ini berlaku untuk M2 tetapi di M1 ada setidaknya satu argumen yang disebut aliasyang menggunakan asatribut, saya pikir itu terkait dengan menyisipkan atau membatalkan blok.

Menurut Fabian Schmengler: "Jika blok dibuat tanpa mendefinisikan alias, alias default ke nama." Itu mengacu pada M1 tapi saya kira hal yang sama berlaku untuk M2.

Ben Crook
sumber
Baru saja pada 2.3.1 saya tidak bisa mendapatkanChildHtml dengan nama karena blok memiliki alias "sebagai". Hanya setelah menghapus alias saya bisa mendapatkan blok di templat.
TheKitMurkit
Poin bagus @TheKitMurkit - Saya telah menambahkan sedikit jawaban saya yang menyatakan "jika sebuah alias diset, Anda harus menggunakannya saat memanggil getChildHtml.". Terima kasih.
Ben Crook