Pour autant que je sache, le mini-chariot d'en-tête obtiendra les données des données client
fournisseur / 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');
......
}
Regardez les données client js vendor/magento/module-customer/view/frontend/web/js/customer-data.js
, nous pouvons obtenir les données client du stockage local. Par exemple, dans la console de votre navigateur, exécutez la ligne:, localStorage.getItem('mage-cache-storage')
nous pouvons également obtenir les informations du panier.
{
"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
}
],
.......
}
}
Accédez à
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(),
.....
}
vendeur / magento / module-checkout / CustomerData / AbstractItem.php
/**
* {@inheritdoc}
*/
public function getItemData(Item $item)
{
$this->item = $item;
return \array_merge(
['product_type' => $item->getProductType()],
$this->doGetItemData()
);
}
Pour obtenir l'article SKU, je pense que nous devons ajouter des données à getItemData()
(devrait essayer avec le plugin ). Et puis remplacer le modèle html vendor/magento/module-checkout/view/frontend/web/template/minicart/item/default.html
<div class="product-item-details">
<!-- ko text: product_sku --><!-- /ko -->
Mettre à jour la version de Magento 2.1.0
Dans Magento 2.1.0, il vous suffit de remplacer default.html
. En effet, la méthode doGetItemData
a déjà le produit sku.
Magento\ConfigurableProduct\CustomerData\ConfigurableItem
et pour les produits groupés:Magento\GroupedProduct\CustomerData\GroupedItem
!-- ko text: product_sku --><!-- /ko -->
, le sku s'affichera pour le produit configurable. Ma version de Magento est 2.1.5.Tout d'abord, une très bonne explication de @Khoa TruongDinh sur le flux d'obtention de l'élément dans le modèle de mini-cart.
J'ai trouvé un moyen d'étendre le modèle de minicart avec des attributs personnalisés du produit. Pour ce faire, vous devez d'abord remplacer vendor / magento / module-checkout / CustomerData / DefaultItem.php avec les préférences DI
Créer une application / un code / un fournisseur / un module / etc / di.xml ou remplacer l'objet DefaultItem
Créez ensuite un nouvel objet pour remplacer la méthode doGetItemData () et ajoutez custom_attribute avec la clé product_custom_attribute
Fichier: app / code / Vendor / Module / Preferences / MiniCartItem.php
Notez que j'injecte
à la méthode de construction, car je dois charger les données complètes du produit pour accéder à mon custom_attribute. S'il y a une meilleure façon, dites-le moi.
Et enfin, vous pouvez afficher le nouvel attribut dans
la source
'product_sku' => $this->item->getProduct()->getSku()
fonctionne pour récupérer le sku, donc même si je n'ai pas besoin de le\Magento\Catalog\Model\Product $productModel
saisir, je vais l'utiliser pour récupérer d'autres informations sur le produit. J'ai finalement obtenu la préférence et fonctionne, donc votre méthode fonctionne comme un charme!$productModel
charger le produit avec tous les attributs, puis les récupérer avec$this->helper
. Si cela fonctionne, vous pouvez voter pour ma réponse.