Fügen Sie der Checkout-Zusammenfassung Magento 2 ein benutzerdefiniertes Produktattribut hinzu

14

Ich versuche, der Liste der Elemente im Abschnitt "Zusammenfassung" an der Kasse in Magento 2 ein benutzerdefiniertes Produktattribut hinzuzufügen. Die Vorlagendatei befindet sich in Magento_Checkout/web/template/summary/item/details.htmlund versucht, den Wert des benutzerdefinierten Attributs vor dem Produktnamen anzuzeigen. Haben Sie eine Idee, wie dieser Wert zur Ko-Vorlage hinzugefügt wird? Es sieht so aus, als gäbe es hier eine andere Frage , die aber nie beantwortet wurde.

Sudopratt
quelle
1
@Arjun Das ist anders. Dieser Artikel, auf den verwiesen wird, zeigt wirklich, dass die Warenkorbseite nicht zur Kasse ist. Der Warenkorb ist eine einfache HTML-Vorlage. Die Kasse ist eine Ko-Seite und bezieht ihre Quelle von einem anderen Ort als dem Mini-Cart. Ich bin mir nicht sicher, warum alle im Mini-Warenkorb, im Warenkorb und an der Kasse angezeigten Warenkorbartikel auf unterschiedliche Weise erstellt wurden. In der eigentlichen Checkout-Zusammenfassung muss ich jedoch sehen, wie das benutzerdefinierte Attribut hinzugefügt wird.
Sudopratt
@sudopratt, Haben Sie eine Vorstellung davon? Wie füge ich ein benutzerdefiniertes Produktattribut zur Liste der Elemente im Abschnitt "Zusammenfassung" an der Kasse in Magento 2 hinzu?
Sarfaraj Sipai

Antworten:

16

Sie müssen dafür ein Plugin erstellen. Ich wollte der Bestellübersicht Produktgeschmack hinzufügen. Auf diese Weise habe ich ein Plugin erstellt und erreicht, was ich wollte.

Verkäufer = Sejal

Dateien, die Sie erstellen müssen:

  1. Registration.php: app\code\Sejal\Flavor\registration.php
  2. di.xml: app\code\Sejal\Flavor\etc\di.xml
  3. module.xml: app\code\Sejal\Flavor\etc\module.xml
  4. ConfigProviderPlugin.php: app\code\Sejal\Flavor\Plugin\ConfigProviderPlugin.php
  5. details.html: Kopie von vendor\magento\module-checkout\view\frontend\web\template\summary\item\details.html

Sie können diese Datei in Ihrem Thema wie folgt überschreiben

app\design\frontend\Vendor\themename\Magento_Checkout\web\template\summary\item\details.html

Code: register.php

<?php

\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Sejal_Flavor',
    __DIR__
);

di.xml

<?xml version="1.0"?>

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Checkout\Model\DefaultConfigProvider">
        <plugin name="AddAttPlug" type="Sejal\Flavor\Plugin\ConfigProviderPlugin" />
    </type>
</config>

module.xml

<?xml version="1.0"?>

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="Sejal_Flavor" setup_version="1.0.0">
    </module>
</config>

ConfigProviderPlugin.php

<?php

namespace Sejal\Flavor\Plugin;

class ConfigProviderPlugin extends \Magento\Framework\Model\AbstractModel
{

    public function afterGetConfig(\Magento\Checkout\Model\DefaultConfigProvider $subject, array $result)
    {

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

        $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
        for($i=0;$i<count($items);$i++){

            $quoteId = $items[$i]['item_id'];
            $quote = $objectManager->create('\Magento\Quote\Model\Quote\Item')->load($quoteId);
            $productId = $quote->getProductId();
            $product = $objectManager->create('\Magento\Catalog\Model\Product')->load($productId);
            $productFlavours = $product->getResource()->getAttribute('flavors')->getFrontend()->getValue($product);         
            if($productFlavours == 'No' || $productFlavours == 'NA'){
                $productFlavours = '';
            }
            $items[$i]['flavor'] = $productFlavours;
        }
        $result['totalsData']['items'] = $items;
        return $result;
    }

}

details.html

Copy vendor\magento\module-checkout\view\frontend\web\template\summary\item\details.html 

im Thema und hinzufügen

<div class="product-item-flavor" data-bind="text: $parent.flavor"></div>

unten

<strong class="product-item-name" data-bind="text: $parent.name"></strong>

Das ist es! Ich hoffe es hilft!

Sejal Shah
quelle
Ich habe in Aheadworks onestepcheck-Erweiterung versucht, aber es funktioniert nicht. Wie kann ich ?
Manish Maheshwari
@ Sejal Shah bitte antworten magento.stackexchange.com/questions/279918/…
Shafeel Sha
@ Sejal Shah, wie man hier Bedingung hinzufügt
sumeet bajaj
Dies funktioniert gut für den Versandschritt, aber im Abrechnungsschritt bleibt
.product
Sejal beantwortete meine Frage hier: magento.stackexchange.com/questions/178398/…
jonasG
3

Wenn Sie Ihr benutzerdefiniertes Attribut in der Auftragszusammenfassung hinzufügen möchten, müssen Sie Folgendes überschreiben: (Layouts) 1) checkout_cart_index:

<referenceBlock name="checkout.cart.totals">
        <arguments>
            <argument name="jsLayout" xsi:type="array">
                <item name="components" xsi:type="array">
                    <item name="block-totals" xsi:type="array">
                        <item name="children" xsi:type="array">
                            <item name="processingfee" xsi:type="array">
                                <item name="component"  xsi:type="string">Dedicated_Processingfee/js/view/checkout/cart/totals/processingfee</item>
                                <item name="sortOrder" xsi:type="string">20</item>
                                <item name="config" xsi:type="array">
                                    <item name="template" xsi:type="string">Dedicated_Processingfee/checkout/cart/totals/processingfee</item>
                                    <item name="title" xsi:type="string" translate="true">Processing Fee</item>
                                </item>
                            </item>
                        </item>
                    </item>
                </item>
            </argument>
        </arguments>
    </referenceBlock>

2) checkout_index_index:

<referenceBlock name="checkout.root">
        <arguments>
            <argument name="jsLayout" xsi:type="array">
                <item name="components" xsi:type="array">
                    <item name="checkout" xsi:type="array">
                        <item name="children" xsi:type="array">

                            <item name="sidebar" xsi:type="array">
                                <item name="children" xsi:type="array">
                                    <item name="summary" xsi:type="array">
                                        <item name="children" xsi:type="array">
                                            <item name="totals" xsi:type="array">
                                                <item name="children" xsi:type="array">
                                                    <item name="processingfee" xsi:type="array">
                                                        <item name="component"  xsi:type="string">Dedicated_Processingfee/js/view/checkout/cart/totals/processingfee</item>
                                                        <item name="sortOrder" xsi:type="string">20</item>
                                                        <item name="config" xsi:type="array">
                                                            <item name="template" xsi:type="string">Dedicated_Processingfee/checkout/cart/totals/processingfee</item>
                                                            <item name="title" xsi:type="string" translate="true">Processing Fee</item>
                                                        </item>
                                                    </item>
                                                </item>
                                            </item>
                                            <item name="cart_items" xsi:type="array">
                                                <item name="children" xsi:type="array">
                                                    <item name="details" xsi:type="array">
                                                        <item name="children" xsi:type="array">
                                                            <item name="subtotal" xsi:type="array">
                                                                <item name="component" xsi:type="string">Magento_Tax/js/view/checkout/summary/item/details/subtotal</item>
                                                            </item>
                                                        </item>
                                                    </item>
                                                </item>
                                            </item>
                                        </item>
                                    </item>
                                </item>
                            </item>
                        </item>
                    </item>
                </item>
            </argument>
        </arguments>
    </referenceBlock>

3) sales_order_view:

<referenceContainer name="order_totals">
        <block class="Dedicated\Processingfee\Block\Sales\Order\ProcessingFee" name="processingfee"/>
    </referenceContainer>

Fügen Sie dann benutzerdefinierte js hinzu, um Ihren benutzerdefinierten Attributwert wie folgt in Ihrem Modul zu erhalten: at /view/frontend/web/js/view/checkout/cart/totals/processingfee.js:

define(
[
    'Dedicated_Processingfee/js/view/checkout/summary/processingfee'
],
function (Component) {
    'use strict';

    return Component.extend({

        /**
        * @override
        */
        isDisplayed: function () {
            return true;
        }
    });
}

);

Fügen Sie ein weiteres js hinzu, um den Wert mit dem Gesamtabrechnungsbetrag zu berechnen: /view/frontend/web/js/view/checkout/summary/processingfee.js

define(
[
    'Magento_Checkout/js/view/summary/abstract-total',
    'Magento_Checkout/js/model/quote',
    'Magento_Catalog/js/price-utils',
    'Magento_Checkout/js/model/totals'
],
function (Component, quote, priceUtils, totals) {
    "use strict";
    return Component.extend({
        defaults: {
            isFullTaxSummaryDisplayed: window.checkoutConfig.isFullTaxSummaryDisplayed || false,
            template: 'Dedicated_Processingfee/checkout/summary/processingfee'
        },
        totals: quote.getTotals(),
        isTaxDisplayedInGrandTotal: window.checkoutConfig.includeTaxInGrandTotal || false,
        isDisplayed: function() {
            return this.isFullMode();
        },
        getValue: function() {
            var price = 0;
            if (this.totals()) {
                price = totals.getSegment('processingfee').value;
            }
            return this.getFormattedPrice(price);
        },
        getBaseValue: function() {
            var price = 0;
            if (this.totals()) {
                price = this.totals().base_fee;
            }
            return priceUtils.formatPrice(price, quote.getBasePriceFormat());
        }
    });
}

);

Dieses Set finden Sie Ihr Attribut mit Wert Danke :)

Geben Sie hier die Bildbeschreibung ein

Ronak Chauhan
quelle
1
Ich glaube nicht, dass @sudopratt eine Zeile in der Gesamtspalte hinzufügen möchte, sondern ein Produktattribut unter dem Produktnamen wie eine kurze Beschreibung.
Sunil Verma
@ Sunil Verma hast du eine Lösung dafür. Ich muss genau das Gleiche tun, kann aber keine Referenz bekommen
Rohit Goel
1

Für mich war $ result ['totalsData'] ['items'] leer. Ich habe stattdessen folgende Implementierung verwendet:

public function afterGetConfig(
    \Magento\Checkout\Model\DefaultConfigProvider $subject,
    array $result

) {
    foreach ($result['quoteItemData'] as $index => $itemData) {
        $product = $this->productRepository->getById($itemData['product_id']);
        $result['quoteItemData'][$index]['flavor'] = $product->getFlavor();
    }
    return $result;
}
ulzii
quelle
0

Ich muss den einfachen Produktnamen des konfigurierbaren anzeigen. Also habe ich den folgenden Code verwendet. Der gleiche einfache Name wird jedoch angezeigt, wenn ich in der Zusammenfassung der Bestellreihenfolge dieselben konfigurierbaren Optionen auswähle. Wie zeige ich korrekte einfache Produktnamen an?

public function afterGetConfig(\Magento\Checkout\Model\DefaultConfigProvider $subject, array $result)
{

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

    $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
    for($i=0;$i<count($items);$i++){

        $quoteId = $items[$i]['item_id'];
        $quote = $objectManager->create('\Magento\Quote\Model\Quote\Item')->load($quoteId);
        $productId = $quote->getProductId();
        $product = $objectManager->create('\Magento\Catalog\Model\Product')->load($productId);
        $productTypeInstance = $product->getTypeInstance();
        $usedProducts = $productTypeInstance->getUsedProducts($product);

        foreach ($usedProducts  as $child) {
            $childName = $child->getName(); //Child Product Name
        }           

        $items[$i]['childname'] = $childName;
    }
    $result['totalsData']['items'] = $items;
    return $result;
}
Hasitha Anuruddha
quelle