Magento2 Wie zeige ich sku in der Bestellübersicht?

8

Ich möchte sku in der Reihenfolge Zusammenfassung nach dem Produktnamen anzeigen.

Ich habe ein Pluging erstellt, das afterGetConfigzu geänderten totalsData aufruft. Sie können den folgenden Code dafür sehen.

class ConfigProviderPlugin extends \Magento\Framework\Model\AbstractModel
{
    public function afterGetConfig(\Magento\Checkout\Model\DefaultConfigProvider $subject, array $result)
    {
        $items = $result['totalsData']['items'];

        for($i=0;$i<count($items);$i++){
        $items[$i]['sku'] = "dgd";

        }


        return $result;
    }
}

Dann detail.htmlhabe ich hinzugefügt

<div class="details-sku">
                <span class="label"><!-- ko i18n: 'Sku' --><!-- /ko --></span>
                <span class="value" data-bind="text: $parent.sku"></span>
            </div>

Aber ich kann dort keinen Sku-Wert sehen. Ich kann nur Etikett sehen. siehe unten Screenshot. Geben Sie hier die Bildbeschreibung ein

Kul
quelle
Haben Sie in der Konsole window.checkoutconfig.totalsData gesehen? Diese enthalten Wert aller Artikel
Rakesh Jesadiya
@ RakeshJesadiya Nein, ich habe nicht in der Konsole eingecheckt. aber ich habe es in stecken gedruckt und ich kann dort Wert sehen. Ich weiß nicht, wo ich in der Konsole sehen kann. Ich kann dort viele Ajax-Antworten sehen.
Kul
Kann ich SKU bekommen, ohne ein Plugin zu erstellen?
Joey
@ Joey Danke, ich möchte auch zusätzliche Attribute. Dies war nur ein Beispiel. schätzen Ihre Bemühungen.
Kul
@ Kul froh, eine Hilfe zu sein
Joey

Antworten:

12

Überschreiben Sie eine Vorlage (Vereinfachung von Joeys Antwort). Binden Sie direkt an das Objekt object.checkoutConfig.quoteItemData.

app / design / frontend / MyCustomTheme / default / Magento_Checkout / web / template / summary / item / details.html

<!-- ko foreach: window.checkoutConfig.quoteItemData -->
    <!-- ko if: item_id === $parents[1].item_id -->
        <span class="label" data-bind="i18n: 'SKU:'"></span>
        <!-- ko text: sku --><!-- /ko -->
    <!-- /ko -->
<!-- /ko -->
Aydus-Matthew
quelle
1
Nur um dies hinzuzufügen, in meinem Fall item_idist eine Zeichenfolge, während $parents[1].item_ideine Ganzzahl ist, so ===wird nicht funktionieren. Verwendet ==und diese Methode funktioniert super. Vielen Dank
Chris Anderson
11

In Magento 2 können Sie anzeigen, skuohne Plugins zu erstellen. Ich poste nur diese Antwort, um bei Bedarf jemandem zu helfen.

Überschreiben

vendor/magento/module-checkout/view/frontend/web/template/su‌​mmary/item/details.h‌​tml Datei oder finden Sie die relevante Datei in Ihrem Thema. Sie sollten Magento_Checkoutin Ihrem Themenordner haben.

Hinzufügen

<strong class="product-item-sku" data-bind="text: getSku($parent.item_id)"></strong>,

wo immer Sie wollen.

Dann überschreiben vendor/magento/module-checkout/view/frontend/web/js/view/sum‌​mary/item/details.js

Datei oder finden Sie die relevante Datei in Ihrem Thema. Sie sollten Magento_Checkoutin Ihrem Themenordner haben. Fügen getSkuSie dann eine Funktion hinzu.

Ihre details.jsDatei sollte so aussehen mit zusätzlicher getSkuFunktion,

/*** Copyright © 2013-2017 Magento, Inc. All rights reserved.
* See COPYING.txt for license details.*//*jshint browser:true
 jquery:true*//*global alert*/

define(['uiComponent'], function(Component) {
    "use strict";
    return Component.extend({
        defaults: {
            template: 'Magento_Checkout/summary/item/details'
        },
        getValue:

            function(quoteItem) {
                return quoteItem.name;
            },
        getSku: function(itemId) {
            var itemsData = window.checkoutConfig.quoteItemData;
            var prodSku = null;
            itemsData.forEach(function(item) {
                if (item.item_id == itemId) {
                    prodSku = item.sku;
                }
            });
            if (prodSku != null) {
                return 'SKU: ' + prodSku;
            } else {
                return '';
            }
        }
    });
});

Vielen Dank an Milan Pattani für seine große Hilfe

Joey
quelle
Es hat bei Magento 2.3.1 für mich funktioniert, da ich auf der Zahlungsüberprüfungsseite keine benutzerdefinierten Felddaten erhalten habe.
D Singh
1

Ich habe eine Lösung gefunden. unten ist Arbeitscode.

class ConfigProviderPlugin extends \Magento\Framework\Model\AbstractModel
{
    public function afterGetConfig(\Magento\Checkout\Model\DefaultConfigProvider $subject, array $result)
    {
        $items = $result['totalsData']['items'];

        for($i=0;$i<count($items);$i++){
        $items[$i]['sku'] = "dgd";

        }

        $result['totalsData']['items'] = $items;
        return $result;
    }
}

Hoffe das hilft anderen Menschen.

Kul
quelle
Können Sie mir bitte beim Erstellen des Plugins helfen? Ich muss der Bestellübersicht unter dem Produktnamen ein benutzerdefiniertes Produktattribut hinzufügen.
Sejal Shah
1

Da ich mich diesem Problem selbst stellte und keine klare Antwort fand, dachte ich, ich würde posten, wie ich dieses Problem angegangen bin. Das Problem, das ich bei der akzeptierten Antwort sehe, ist, dass die gesamte Produktressource neu geladen wird, nur um die SKU zu erhalten.

Um zu verhindern, dass dieser Leistungsaufwand auftritt (und was ich für einen "saubereren" Ansatz zur Lösung dieses Problems halte):

Erstellen Sie in Ihren Modulen etc / di.xml eine Voreinstellung für \ Magento \ Quote \ Model \ Cart \ Totals \ Item

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\Quote\Model\Cart\Totals\Item"
            type="Your\Module\ClassOverrides\Quote\Model\Cart\Totals\Item"/>
</config>

Erstellen Sie in dieser Klasse eine Set- und Get-Methode für sku

<?php
namespace Your\Module\ClassOverrides\Quote\Model\Cart\Totals;

class Item extends \Magento\Quote\Model\Cart\Totals\Item
{
    public function getSku()
    {
        return $this->_get('sku');
    }

    public function setSku($sku)
    {
        return $this->setData('sku', $sku);

    }
}

und presto: Die SKU wird jetzt der von getItems () zurückgegebenen Elementsammlung hinzugefügt und ist über knockout.js in Vorlagen wie Magento_Checkout / template / summary / item / details.html über Folgendes zugänglich:

<div>
    Sku:
    <span data-bind="text: $parent.sku"></span>
</div>

Normalerweise versuche ich, Klassenüberschreibungen aufgrund der Aktualisierbarkeit zu vermeiden, aber dies ändert wirklich nichts an den Kernmethoden, indem ich der Klasse nur einen Setter und einen Getter für SKU hinzufüge. Ich gehe davon aus, dass dies auch mit jedem anderen Produktattribut funktioniert.

Offiziell
quelle
0

versuche $result['totalsData']['items'][$i]['sku']="dgd";statt$items[$i]['sku'] = "dgd";

Ich hoffe das hilft

nil108
quelle
Vielen Dank. Aber ich fand das Problem anders. $items = $result['totalsData']['items']; for($i=0;$i<count($items);$i++){ $items[$i]['sku'] = "dgd"; } $result['totalsData']['items'] = $items;
Kul