Sejauh yang saya tahu, minicart header akan mendapatkan data dari data pelanggan
vendor / magento / module-checkout / view / frontend / web / js / view / minicart.js
define([
'uiComponent',
'Magento_Customer/js/customer-data',
'jquery',
'ko',
'sidebar'
], function (Component, customerData, $, ko) {
'use strict';
......
this.cart = customerData.get('cart');
......
}
Lihatlah ke data pelanggan vendor/magento/module-customer/view/frontend/web/js/customer-data.js
, kita bisa mendapatkan data pelanggan dari penyimpanan lokal. Misalnya, di konsol browser Anda, jalankan baris:, localStorage.getItem('mage-cache-storage')
kami juga bisa mendapatkan informasi keranjang.
{
"cart": {
"summary_count": 1,
....
"items": [
{
......
"qty": 1,
"item_id": "11728",
"configure_url": "http://magento2-demo/checkout/cart/configure/id/11728/product_id/1817/",
"is_visible_in_site_visibility": true,
"product_name": "Breathe-Easy Tank",
"product_url": "http://magento2-demo/breathe-easy-tank.html",
"product_has_url": true,
"canApplyMsrp": false
}
],
.......
}
}
Arahkan ke
vendor / magento / module-checkout / CustomerData / DefaultItem.php
protected function doGetItemData()
{
.......
return [
'options' => $this->getOptionList(),
'qty' => $this->item->getQty() * 1,
'item_id' => $this->item->getId(),
'configure_url' => $this->getConfigureUrl(),
'is_visible_in_site_visibility' => $this->item->getProduct()->isVisibleInSiteVisibility(),
'product_name' => $this->item->getProduct()->getName(),
'product_url' => $this->getProductUrl(),
'product_has_url' => $this->hasProductUrl(),
.....
}
vendor / magento / module-checkout / CustomerData / AbstractItem.php
/**
* {@inheritdoc}
*/
public function getItemData(Item $item)
{
$this->item = $item;
return \array_merge(
['product_type' => $item->getProductType()],
$this->doGetItemData()
);
}
Untuk mendapatkan item SKU, saya pikir kita perlu menambahkan data ke getItemData()
(Harus coba dengan Plugin ). Dan kemudian menimpa templat html vendor/magento/module-checkout/view/frontend/web/template/minicart/item/default.html
<div class="product-item-details">
<!-- ko text: product_sku --><!-- /ko -->
Perbarui versi Magento 2.1.0
Di Magento 2.1.0, Anda hanya perlu mengganti default.html
. Ini karena metode doGetItemData
sku sudah memiliki produk.
Magento\ConfigurableProduct\CustomerData\ConfigurableItem
dan untuk produk yang dikelompokkan:Magento\GroupedProduct\CustomerData\GroupedItem
!-- ko text: product_sku --><!-- /ko -->
, sku akan ditampilkan untuk produk yang dapat dikonfigurasi. Versi Magento saya adalah 2.1.5.Pertama, penjelasan yang sangat bagus dari @Khoa TruongDinh tentang aliran mendapatkan item dalam template minicart.
Saya menemukan cara bagaimana Anda dapat memperluas template minicart dengan atribut khusus produk. Untuk melakukan itu pertama Anda harus menimpa vendor / magento / module-checkout / CustomerData / DefaultItem.php dengan DI Preferensi
Buat aplikasi / kode / Vendor / Modul / etc / di.xml atau timpa objek DefaultItem
Kemudian buat objek baru untuk mengganti metode doGetItemData () dan tambahkan custom_attribute dengan key product_custom_attribute
File: app / code / Vendor / Module / Preferences / MiniCartItem.php
Perhatikan bahwa saya menyuntikkan
ke metode konstruk karena saya perlu memuat data produk lengkap untuk mengakses custom_attribute saya. Jika ada cara yang lebih baik tolong beri tahu saya.
Dan akhirnya Anda dapat menampilkan atribut baru di
sumber
'product_sku' => $this->item->getProduct()->getSku()
tidak berfungsi untuk menarik sku, jadi sementara saya tidak perlu\Magento\Catalog\Model\Product $productModel
mengambil itu, saya akan menggunakannya untuk mengambil beberapa info produk lainnya. Saya akhirnya dapat preferensi dan berjalan, sehingga metode Anda bekerja seperti pesona!$productModel
memuat produk dengan semua atribut dan kemudian mengambilnya$this->helper
. Jika berhasil, Anda dapat meningkatkan jawaban saya.