Aggiungi l'attributo del prodotto personalizzato al riepilogo del checkout Magento 2


14

Sto provando ad aggiungere un attributo di prodotto personalizzato all'elenco di articoli nella sezione di riepilogo nel checkout in Magento 2. Il file modello è su Magento_Checkout/web/template/summary/item/details.htmle sto cercando di visualizzare il valore dell'attributo personalizzato prima del nome del prodotto. Qualche idea su come questo valore viene aggiunto al modello ko? Sembra che ci sia un'altra domanda per questo qui, ma non ha mai avuto risposta.



1
@Arjun Questo è diverso. Questo articolo di riferimento mostra davvero che la pagina del carrello non è stata verificata. Il carrello è un semplice modello phtml. Il checkout è una pagina ko e sta ottenendo la sua fonte da qualche altra parte rispetto al mini-cart. Non sono sicuro del motivo per cui tutti gli articoli del carrello visualizzati nel mini carrello, nel carrello e nella cassa sono costruiti in diversi modi. Ma il riepilogo del checkout reale è dove devo vedere come aggiungere l'attributo personalizzato.
sudopratt,

@sudopratt, hai idea di questo, Come aggiungere un attributo di prodotto personalizzato all'elenco degli articoli nella sezione di riepilogo alla cassa in Magento 2?
Sarfaraj Sipai,

Risposte:


16

Dovrai creare un plugin per quello. Volevo aggiungere il sapore del prodotto al riepilogo dell'ordine. Questo è il modo in cui ho creato un plugin e ottenuto ciò che volevo.

Venditore = Sejal

File che devi creare:

  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: copia di vendor\magento\module-checkout\view\frontend\web\template\summary\item\details.html

puoi sovrascrivere questo file nel tuo tema in questo modo

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

Codice: registration.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 

nel tema e aggiungere

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

sotto

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

Questo è tutto! Spero che sia d'aiuto!


Ho provato con l'estensione onestepcheck di Aheadworks ma non funziona. Come posso fare ?
Manish Maheshwari,

@Sejal Shah, per favore, rispondi a magento.stackexchange.com/questions/279918/…
Shafeel Sha

@Sejal Shah come aggiungere se la condizione qui
sumeet bajaj

1
Funziona benissimo per la fase di spedizione, ma nella fase di fatturazione .product-item-flavour rimane vuoto
jonasG

Sejal ha risposto alla mia domanda qui: magento.stackexchange.com/questions/178398/…
jonasG

3

se vuoi aggiungere il tuo attributo personalizzato nel riepilogo dell'ordine devi sovrascrivere: (Layout) 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>

quindi aggiungi js personalizzati per ottenere il valore dell'attributo personalizzato in questo modo nel modulo: 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;
        }
    });
}

);

aggiungi un altro js per calcolare il valore con l'importo totale della fatturazione in: /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());
        }
    });
}

);

Quel set troverai l'attributo con valore Grazie :)

inserisci qui la descrizione dell'immagine


1
Non credo che @sudopratt voglia aggiungere una riga tra i totali, piuttosto un attributo del prodotto sotto il nome del prodotto come una breve descrizione.
Sunil Verma,

@ Sunil Verma hai una soluzione per questo. Devo fare esattamente lo stesso, ma non riesco a trovare alcun riferimento
Rohit Goel,

Sì, mostra l'attributo personalizzato ma quando passa al passaggio successivo per #payment, l'attributo personalizzato scompare. perché?
HaFiz Umer il

1

Per me era $ risultato ['totalsData'] ['items'] vuoto. Ho usato invece la seguente implementazione:

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

0

Devo visualizzare il nome prodotto semplice del configurabile. Quindi ho usato il codice come di seguito. Ma lo stesso nome semplice viene visualizzato quando scelgo le stesse opzioni configurabili nel riepilogo dell'ordine di pagamento. Quindi, come visualizzo i nomi corretti dei prodotti semplici?

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;
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.