Dodaj niestandardowy atrybut produktu do podsumowania zamówienia Magento 2

14

Próbuję dodać niestandardowy atrybut produktu do listy pozycji w sekcji podsumowania w kasie w Magento 2. Plik szablonu znajduje się Magento_Checkout/web/template/summary/item/details.htmli szukam wyświetlenia wartości atrybutu niestandardowego przed nazwą produktu. Masz pomysł, jak ta wartość jest dodawana do szablonu ko? Wygląda na to, że jest tu inne pytanie , ale nigdy nie udzielono na nie odpowiedzi.

sudopratt
źródło
1
@Arjun To jest inne. Ten artykuł, o którym mowa, naprawdę pokazuje stronę koszyka, a nie kasę. Koszyk to prosty szablon phtml. Do kasy jest strona ko i jej źródło pochodzi z innego miejsca niż mini-wózek. Nie wiesz, dlaczego wszystkie elementy koszyka wyświetlane w mini koszyku, koszyku i kasie wszystkie są zbudowane na różne sposoby. Ale w faktycznym podsumowaniu płatności muszę zobaczyć, jak dodać niestandardowy atrybut.
sudopratt
@sudopratt, masz pojęcie o tym, jak dodać niestandardowy atrybut produktu do listy produktów w sekcji podsumowania w kasie w Magento 2?
Sarfaraj Sipai,

Odpowiedzi:

16

Będziesz musiał stworzyć do tego wtyczkę. Chciałem dodać smak produktu do podsumowania zamówienia. W ten sposób stworzyłem wtyczkę i osiągnąłem to, co chciałem.

Sprzedawca = Sejal

Pliki, które musisz utworzyć:

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

możesz zastąpić ten plik w swoim motywie w ten sposób

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

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

w motywie i dodaj

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

poniżej

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

Otóż ​​to! Mam nadzieję, że to pomoże!

Sejal Shah
źródło
Próbowałem w rozszerzeniu Aestworks onestepcheck, ale nie działa. Jak mogę to zrobić?
Manish Maheshwari,
@Sejal Shah, proszę odpowiedzieć magento.stackexchange.com/questions/279918/…
Shafeel Sha
@Sejal Shah jak dodać, jeśli tutaj warunek
sumeet bajaj
1
Działa to świetnie na etapie wysyłki, ale na etapie fakturowania. Smak produktu pozostaje pusty
jonasG
Sejal odpowiedział na moje pytanie tutaj: magento.stackexchange.com/questions/178398/...
jonasG
3

jeśli chcesz dodać niestandardowy atrybut do podsumowania zamówienia, musisz zastąpić: (Układy) 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>

następnie dodaj niestandardowy plik js, aby uzyskać niestandardową wartość atrybutu w następujący sposób: w /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;
        }
    });
}

);

dodaj kolejny js, aby obliczyć wartość z całkowitą kwotą rozliczeniową w: /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());
        }
    });
}

);

Ten zestaw znajdziesz w atrybucie o wartości Dzięki :)

wprowadź opis zdjęcia tutaj

Ronak Chauhan
źródło
1
Nie sądzę, że @sudopratt chce dodać wiersz sumy zamiast raczej atrybutu produktu pod nazwą produktu, takiego jak krótki opis.
Sunil Verma
@ Sunil Verma, czy masz na to rozwiązanie. Muszę zrobić dokładnie to samo, ale nie mogę uzyskać żadnej referencji
Rohit Goel,
Tak, jego atrybut niestandardowy pokazuje, ale po przejściu do następnego kroku dla #płatności atrybut niestandardowy zniknie. dlaczego?
HaFiz Umer
1

Dla mnie $ wynik ['totalsData'] ['items'] był pusty. Zamiast tego użyłem następującej implementacji:

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
źródło
0

Muszę wyświetlić prostą nazwę konfigurowalnego produktu. Więc użyłem kodu jak poniżej. Ale ta sama prosta nazwa wyświetla się, gdy wybieram te same konfigurowalne opcje w podsumowaniu zamówienia. Jak wyświetlić prawidłowe proste nazwy produktów?

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
źródło