Saya mencoba mengambil atribut produk di templat keranjang. Tapi saya tidak bekerja! Atribut diatur ke Terlihat pada Halaman Katalog di Storefront = yes dan Digunakan di Daftar Produk = ya
Saya menggunakan modul khusus untuk mengganti template berikut:
/vendor/magento/module-checkout/view/frontend/templates/cart/item/default.phtml
Saya punya produk:
$_item = $block->getItem();
$product = $_item->getProduct();
Biasanya saya akan mengharapkan atribut khusus (tipe teks-daerah dalam kasus ini) dengan kode atribut 'sample_attr' tersedia dengan salah satu dari ini:
$product->getData('sample_attr');
atau
$product->getSampleAttr();
Beberapa atribut tersedia menggunakan ini (sku, berat, harga ..), tetapi untuk atribut khusus tidak berfungsi. Penolong yang disertakan (\ Magento \ Msrp \ Helper \ Data) juga tidak memiliki metode atribut.
Saya bisa mendapatkan semua kode atribut menggunakan:
$attributes = $product->getAttributes();
foreach($attributes as $a)
{
var_dump($a->getName());
}
Saya juga sudah mencoba:
$attribute = $product->getResource()->getAttribute('sample_attr');
var_dump($attribute->getFrontend()->getValue($product));
tapi ini mengembalikan nol.
Jadi, bagaimana saya mendapatkan nilai atribut?
Saya sudah mencoba ini: Dapatkan atribut spesifik untuk setiap produk di halaman katalog
Keluarkan atribut teks khusus di catalog list.phtml (Magento 2)
sumber
magento setup:di:compile
agar ini berhasil, tetapi itu masuk akal. Anda mengubah pohon ketergantungan di sini.Jadi saya menemukan cara untuk mendapatkan informasi yang saya cari. Saya harus memuat produk lengkap dari ProductRepository! Perhatikan bahwa jika Anda mencoba dan memuatnya,
\Magento\Catalog\Model\Product
akan berperilaku seperti orang tunggal, selalu memberi Anda produk yang sama untuk setiap loop.Saya menggunakan kelas pembantu modul saya karena mendefinisikan metode berikut untuk memuat produk dari productId:
Saya menyertakan helper dalam templat:
Saya memuat produk lengkap:
Dan sekarang saya bisa menggunakan:
dan
untuk mendapatkan data.
sumber
Bagi mereka yang mendarat di sini mencari solusi sederhana, begitulah cara saya bekerja
Saya ditambahkan ke saya
default.phtml
(dimodule-checkout/view/frontend/templates/cart/item
) ini:maka Anda dapat menelepon
$customProduct->getData('your_attribute');
seperti biasasumber
Dengan pengaturan admin yang benar, atribut khusus dimuat di objek produk di halaman Checkout jika model sumber dalam
eav_attribute
tabel sql diatur keNULL
. Jadi, Anda dapat mengakses langsung$product->getSampleAttr()
di Halaman Checkout.Tetapi jika atribut memiliki model sumber sebagai
Magento\Eav\Model\Entity\Attribute\Source\Table
, Anda harus memuat produk dari repositori.Buat pembantu baru dan tambahkan gudang produk di konstruktor masih bekerja pada 2.2.6 (sebagai solusi tecjam)
Harap perhatikan bahwa masalahnya sama jika Anda mencoba untuk mengganti penyaji item (disebut di Halaman Checkout) dan menambahkan gudang produk di sini.
sumber
Atribut khusus tidak termasuk dalam objek produk yang ditemukan dalam Kutipan / Keranjang, sehingga Anda tidak bisa mendapatkannya melalui fungsi getData ('custom_attribute'). yang perlu Anda lakukan adalah mendapatkan ID produk yang dikembalikan dari objek produk Kutipan dan memuat produk menggunakan repositori produk, setelah Anda memuat produk melalui repositori maka Anda bisa mendapatkan semua data termasuk atribut khusus yang ditugaskan untuk itu, nanti Anda bisa menggunakan fungsi getData ('custom_attribute') untuk mendapatkannya.
Semoga ini masuk akal.
sumber