Até onde eu sei, o minicart do cabeçalho obterá os dados dos dados do cliente
fornecedor / magento / check-out do módulo / 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');
......
}
Olhe para os dados do cliente js vendor/magento/module-customer/view/frontend/web/js/customer-data.js
, podemos obter os dados do cliente a partir do armazenamento local. Por exemplo, no console do navegador, execute a linha localStorage.getItem('mage-cache-storage')
:, também podemos obter as informações do carrinho.
{
"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
}
],
.......
}
}
Navegue para
vendor / magento / check-module / 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(),
.....
}
fornecedor / magento / check-out do módulo / CustomerData / AbstractItem.php
/**
* {@inheritdoc}
*/
public function getItemData(Item $item)
{
$this->item = $item;
return \array_merge(
['product_type' => $item->getProductType()],
$this->doGetItemData()
);
}
Para obter o item SKU, acho que precisamos adicionar dados a getItemData()
(deve tentar com o plug-in ). E, em seguida, substitua o modelo html vendor/magento/module-checkout/view/frontend/web/template/minicart/item/default.html
<div class="product-item-details">
<!-- ko text: product_sku --><!-- /ko -->
Update Magento 2.1.0 version
No Magento 2.1.0, você só precisa substituir default.html
. Isso ocorre porque o método doGetItemData
já possui o sku do produto.
Magento\ConfigurableProduct\CustomerData\ConfigurableItem
e para o produto agrupados:Magento\GroupedProduct\CustomerData\GroupedItem
!-- ko text: product_sku --><!-- /ko -->
, o sku será exibido para produtos configuráveis. Minha versão do Magento é 2.1.5.Em primeiro lugar, uma explicação muito boa de @Khoa TruongDinh sobre o fluxo de obtenção de itens no modelo minicart.
Encontrei uma maneira de estender o modelo de minicart com atributos personalizados do produto. Para fazer isso primeiro, você precisa substituir vendor / magento / module-checkout / CustomerData / DefaultItem.php pelas preferências do DI
Criar aplicativo / código / Fornecedor / Módulo / etc / di.xml ou substituir o objeto DefaultItem
Em seguida, crie um novo objeto para substituir o método doGetItemData () e inclua custom_attribute com a chave product_custom_attribute
Arquivo: app / code / Vendor / Module / Preferences / MiniCartItem.php
Observe que estou injetando
para o método de construção porque preciso carregar dados completos do produto para acessar meu atributo customizado. Se houver uma maneira melhor, por favor me diga.
E, finalmente, você pode exibir o novo atributo em
fonte
'product_sku' => $this->item->getProduct()->getSku()
funciona para puxar o sku, então, enquanto eu não precisar\Magento\Catalog\Model\Product $productModel
pegar isso, vou usá-lo para pegar outras informações do produto. Finalmente, tenho a preferência em funcionamento, para que seu método funcione como um encanto!$productModel
carregar o produto com todos os atributos e recuperá-los$this->helper
. Se estiver funcionando, você pode votar na minha resposta.