Kapan menggunakan 'nama' dan kapan menggunakan 'sebagai'

26

Saya menemukan bahwa ketika mencoba menggunakan unsetChildmetode ini, kadang-kadang saya harus menggunakan atribut 'name' dan yang lain 'sebagai'. Tampaknya jika blok ditambahkan secara normal, Anda menggunakan 'sebagai' tetapi jika ditambahkan ke blok menggunakan appendmetode, Anda mungkin harus menggunakan 'nama'. Apakah asumsi ini benar?

Apa alasan di balik ini dan apakah ada cara standar untuk memahami atribut mana yang harus Anda gunakan?

Glo
sumber

Jawaban:

15

Blokir selalu dapat dirujuk oleh name. Alias ​​( as) digunakan untuk menyederhanakan nama panjang blok dan hanya berbeda dengan ruang lingkup. Nameharus unik di dalam halaman dan di aliasdalam blok induk.

pengguna487772
sumber
5
Saya khawatir tidak ada yang benar. Di templat, Anda tidak bisa mereferensikan blok dengan namanya jika memiliki set alias. Anda hanya dapat menggunakan alias. Untuk keunikan alias, kebalikannya benar - alias diperkenalkan untuk memungkinkan blok yang berbeda untuk di-render tanpa mengubah template.
Jan Tomka
5
@JanTomka telah memberikan penggunaan utama alias. Harus ditunjukkan bahwa walaupun pernyataan bahwa "Anda tidak dapat mereferensikan blok dengan namanya jika memiliki set alias" secara umum benar, ada metode bernama getBlockHtml()yang kadang-kadang digunakan untuk merender blok berdasarkan nama.
patokan
6

Saat Anda menggunakan as , Anda dapat memanggil $ this-> getChildHtml ("as_value") pada templat phtml.

The Nama harus unik, dan dapat digunakan untuk <referensi> blok, <menghapus> , dll

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

Jika Anda membuka katalog / produk / view.phtml Anda akan melihat:

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

Kamu melihat? sebagai = "media", dan kemudian $ this-> getChildHtml ('media') ...

Ricardo Martins
sumber
5

Belum ada yang menjawab pertanyaan khusus tentang unsetChilditu. Metode yang terkait dengan anak - anak dari sebuah blok selalu merujuk ke blok anak-anak dengan alias, yang hanya diketahui orang tua dan tidak seperti namanya, tidak unik secara global.

Tetapi jika blok dibuat tanpa mendefinisikan alias, alias default ke nama.

Jadi singkatnya, jika blok anak memiliki alias eksplisit, Anda harus menggunakan alias. Jika tidak, gunakan namanya.

Alias ​​diberikan oleh as="..."jika blok dibuat sebagai blok anak melalui XML, atau dengan parameter tindakan jika dipindahkan atau ditambahkan secara dinamis dengan metode seperti append(), insert()atau setChild().

Fabian Schmengler
sumber