Di Magento 1, sebagai pengembang modul dimungkinkan untuk mengubah template blok menggunakan layout XML code seperti ini
<reference name="block_to_change">
<action method="setTemplate">
<param>/path/to/template.phtml</param>
</action>
</reference>
dan kemudian menambahkan templat Anda ke tema dasar.
app/design/frontend/base/default/template/path/to/template.phtml
Apakah mungkin, sebagai pengembang modul, untuk melakukan hal serupa di Magento 2? Atau apakah saya perlu menggunakan layout XML atau kode PHP untuk menghapus blok yang saya minati, dan menyisipkan blok baru dengan template yang berbeda (yang kelasnya memperpanjang kelas blok asli)
Saya tahu saya bisa membuat tema khusus yang menggantikan templat, tapi saya tertarik membuat modul yang mengubah templat default, tetapi masih mengizinkan tema khusus untuk kemudian mengganti templat itu.
Node tindakan sudah usang, tetapi Anda bisa menggunakan argumen blok
sumber
addtocart.phtml
file sesuai dengan konfigurasi sistem dan juga ingin memperbarui ini menggunakan modul khusus<action method='setTemplate'>
) berfungsi tanpa masalah.Untuk memahami perbedaan antara
<arguments>
dan<action>
Anda harus memahami bagaimana konstruktor objek Magento 2 bekerja. Jika Anda mengganti konstruktor di Magento, Anda akan selalu mendapatkan$data-parameter
yang merupakan array. Ini adalah data yang disediakan dalam file XML dan diterjemahkan ke internal$_data-array
dari\Magento\Framework\DataObject
:Namun, dalam kasus templat, jika
setTemplate()
digunakan dalam konstruktor semu (_construct()
, garis bawah tunggal), ini berarti bahwa$data
ditimpa, tidak peduli apakah itu diatur dalam XML.Dalam skenario itu,
<action>
lebih disukai, karena ini dijalankan setelah konstruktor & konstruktor semu.sumber
Berikut ini berhasil bagi saya di Magento EE 2.2.3
Catatan: jika Anda menggunakan modul khusus untuk mengubah template inti dan Anda menjadi gila karena kode sebelumnya tidak berfungsi, pastikan modul Anda dimuat setelah modul inti yang Anda coba ubah (module.xml) dan Anda dieksekusi
bin/magento setup:upgrade
:)sumber
Saya tidak tahu mengapa, tetapi saya menemukan cara ini untuk menjadi yang terbaik:
sumber
Ini hanya akan berfungsi jika blok Anda tidak ditimpa sebelum menggunakan
setTemplate
metode. Magento 2.2.x dan lebih tinggi.sumber