Saya mencoba menambahkan templat khusus ke halaman produk di bawah bagian berbagi sosial. Dalam modul saya, saya sudah mengikuti kode dalam file layout default.xml
<body>
<referenceContainer name="product.info.social">
<block class="Magento\Framework\View\Element\Template" name="product.info.custom" template="Lapisbard_Product::social.phtml" after="product.info.addtocart">
</block>
</referenceContainer>
</body>
konten social.phtml
<p>Hey there !</p>
<?php //$_product = $block->getProduct();
Ini berfungsi dengan baik dan menampilkan konten template di halaman produk. Ketika saya menggunakan kelas blok Magento\Catalog\Block\Product\View
alih-alih Magento\Framework\View\Element\Template
agar saya bisa mendapatkan objek produk dalam templat saya gunakan $block->getProduct();
, itu menunjukkan halaman kosong.
1. Kesalahan apa yang saya lakukan di sini?
2. Apa cara terbaik untuk memodifikasi halaman produk?
3. Apakah ada file tata letak referensi yang dapat saya gunakan untuk menambahkan template baru ke bagian mana pun dari kode tata letak halaman produk dalam modul saya?
$_product = $block->getProduct();
ketika saya menggunakanMagento\Catalog\Block\Product\View
blok.Jawaban:
Kesalahan "halaman putih" muncul karena
Magento\Framework\View\Element\Template
tidak memilikigetProduct()
metode.Jadi saya pikir cara "terbersih" untuk melakukannya adalah membuat modul khusus dengan blok, tata letak, dan template khusus (jangan khawatir ini hanya perlu beberapa menit dan Anda telah melakukan beberapa bagian)
File Modul:
(Saya akan melewati
/etc/module.xml
danregistration.php
karena sepele, namun Anda dapat menemukan contoh lengkap di sini .)Mari kita mulai dengan file Block php:
Seperti yang dapat Anda lihat, itu hanya kelas beton perluasan (IMO) Blok Abstrak Produk paling ringan. Anda juga dapat memperluas
Magento\Framework\View\Element\Template
tetapi dalam hal ini Anda harus menerapkangetProduct()
metode dan mengubah konteks dalam konstruktor untuk mendapatkan akses ke registri.Jadi mari kita pindah ke file Layout:
Dan akhirnya file templat:
Seperti yang Anda lihat adalah sangat mudah, paling sederhana dari M1-
Ingat bahwa semua logika khusus Anda harus diimplementasikan di
Extra.php
kelas blok agar tampilan tetap bersih.yaitu:
sumber
Tambahan untuk Jawaban yang Diterima
Jawaban yang diterima baik, tetapi
AbstractProduct
sudah usang sekarang.Jadi, kita harus menggunakan
Magento\Framework\Registry
untuk mencapai Blok , sampel Blok di bawah ini:sumber