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


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 -->

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


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.


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.


0

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

Ich hoffe das hilft


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.