Saya mencoba mengambil atribut produk saat ini di blok di Magento 2. Saya bisa mendapatkan produk, seperti id 1:
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$product = $objectManager->create('\Magento\Catalog\Model\ProductRepository')->getById(1);
Saya tidak tahu bagaimana cara mendapatkan ID produk saat ini. Bagaimana aku melakukan itu?
getProduct()
inMagento\Catalog\Block\Product\View
Jawaban:
Untuk mendapatkan produk saat ini, salah satu cara yang disarankan adalah:
Magento\Catalog\Block\Product\View\AbstractView
.$block->getProduct()
dalam file phtml Anda.sumber
Meskipun jawaban lain benar, mereka juga bukan solusi yang disarankan / tepat
Menggunakan ObjectManager benar-benar dilarang di Magento 2. Jadi tolong jangan mengandalkan solusi ini, tetapi gunakan DI yang tepat untuk mencapai ini. Untuk mempelajari cara menggunakan DI di Magento 2, lihat sumber daya ini: http://devdocs.magento.com/guides/v2.0/extension-dev-guide/depend-inj.html
Memperluas AbstractView tidak perlu. Jika Anda melihat fungsi asli di AbstractView, Anda dapat melihat Magento menggunakan registri untuk mengambil produk. Anda tidak perlu memperpanjang kelas khusus untuk melakukan ini, cukup menyuntikkan Magento \ Framework \ Registry ke konstruktor Anda dan meminta item registri "produk".
Contoh kode lengkap:
sumber
Jika Anda menggunakan Magento 2.1 atau mayor, Anda dapat menggunakan ini
helper
karena metode lama sudah usang.sumber
Solusi @Wesley Vestjens bekerja untuk saya juga. Pastikan untuk memperhatikan pengubah akses, karena privat mungkin bukan yang Anda inginkan jika Anda gunakan
getProduct()
di templat Anda. Dalam contoh di atas berfungsi sebagaigetProductName()
metode publik untuk digunakan.sumber
getProduct()
bersifat pribadi dangetProductName()
bersifat publik. Dalam versi Magento yang lebih baru (2.2 / 2.3 dan seterusnya) metode ini juga dianggap usang dan Model Tampilan harus digunakan sebagai gantinya.