Насколько я знаю, заголовок миникарты получит данные из данных клиентов
продавец / Magento / модуль-контроль / просмотр / интерфейс / веб / JS / просмотр / minicart.js
define([
'uiComponent',
'Magento_Customer/js/customer-data',
'jquery',
'ko',
'sidebar'
], function (Component, customerData, $, ko) {
'use strict';
......
this.cart = customerData.get('cart');
......
}
Посмотрите данные о клиентах JS vendor/magento/module-customer/view/frontend/web/js/customer-data.js
, мы можем получить данные о клиентах из локального хранилища. Например, в консоли браузера запустите строку:, localStorage.getItem('mage-cache-storage')
мы также можем получить информацию о корзине.
{
"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
}
],
.......
}
}
Перейдите к
поставщику / 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(),
.....
}
продавец / Magento / модуль-контроль / CustomerData / AbstractItem.php
/**
* {@inheritdoc}
*/
public function getItemData(Item $item)
{
$this->item = $item;
return \array_merge(
['product_type' => $item->getProductType()],
$this->doGetItemData()
);
}
Я думаю, что для получения элемента SKU нам нужно добавить данные getItemData()
(следует попробовать с плагином ). А затем переопределить шаблон HTML vendor/magento/module-checkout/view/frontend/web/template/minicart/item/default.html
<div class="product-item-details">
<!-- ko text: product_sku --><!-- /ko -->
Обновите версию Magento 2.1.0
В Magento 2.1.0 вам нужно только переопределить default.html
. Это потому, что метод doGetItemData
уже имеет товарный код.
Magento\ConfigurableProduct\CustomerData\ConfigurableItem
и для сгруппированного продукта:Magento\GroupedProduct\CustomerData\GroupedItem
!-- ko text: product_sku --><!-- /ko -->
, sku покажет для настраиваемого продукта. Моя версия Magento - 2.1.5.Во-первых, очень хорошее объяснение от @Khoa TruongDinh о том, как получить элемент в шаблоне мини-карты.
Я нашел способ, как можно расширить шаблон миникарты с помощью пользовательских атрибутов продукта. Для этого сначала нужно переопределить vendor / magento / module-checkout / CustomerData / DefaultItem.php с настройками DI
Создать приложение / код / поставщик / модуль / etc / di.xml или переопределить объект DefaultItem
Затем создайте новый объект для переопределения метода doGetItemData () и добавьте custom_attribute с ключом product_custom_attribute
Файл: app / code / Vendor / Module / Preferences / MiniCartItem.php
Обратите внимание, что я делаю инъекцию
к методу конструкции, потому что мне нужно загрузить полные данные продукта для доступа к моему custom_attribute. Если есть лучший способ, пожалуйста, скажите мне.
И, наконец, вы можете отобразить новый атрибут в
источник
'product_sku' => $this->item->getProduct()->getSku()
действительно работает, чтобы получить в sku, так что, хотя мне не нужно,\Magento\Catalog\Model\Product $productModel
чтобы захватить это, я буду использовать его, чтобы получить некоторую другую информацию о продукте. Я наконец-то получил настройку и запустил ее, так что ваш метод работает как шарм!$productModel
загрузить продукт со всеми атрибутами, а затем получить их с помощью$this->helper
. Если это работает, вы можете поднять мой ответ.