Tambahkan atribut produk khusus ke checkout checkout Magento 2

14

Saya mencoba untuk menambahkan atribut produk khusus ke daftar item pada bagian ringkasan di checkout di Magento 2. File template di Magento_Checkout/web/template/summary/item/details.htmldan mencari untuk menampilkan nilai atribut kustom sebelum nama produk. Adakah ide tentang bagaimana nilai ini ditambahkan ke template ko? Sepertinya ada pertanyaan lain untuk ini di sini tetapi tidak pernah dijawab.

sudopratt
sumber
1
@ Arjun Ini berbeda. Artikel yang direferensikan ini benar-benar menunjukkan halaman kereta tidak checkout. Keranjang adalah templat phtml sederhana. Checkout adalah halaman ko dan mendapatkan sumbernya dari tempat lain selain kereta mini. Tidak yakin mengapa semua item kereta yang ditampilkan dalam kereta mini, kereta, dan checkout semuanya dibuat dengan cara yang berbeda. Tetapi ringkasan checkout yang sebenarnya adalah di mana saya perlu melihat cara menambahkan atribut khusus.
sudopratt
@sudopratt, Sudahkah Anda mengetahui hal itu, Bagaimana cara menambahkan atribut produk khusus ke daftar item pada bagian ringkasan di checkout di Magento 2?
Sarfaraj Sipai

Jawaban:

16

Anda harus membuat plugin untuk itu. Saya ingin menambahkan rasa produk ke ringkasan pesanan. Ini adalah cara saya membuat plugin dan mencapai apa yang saya inginkan.

Vendor = Sejal

File yang perlu Anda buat:

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

Anda dapat mengganti file ini dalam tema Anda seperti ini

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

Kode: registrasi.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 

dalam tema dan tambahkan

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

di bawah

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

Itu dia! Semoga ini bisa membantu!

Sejal Shah
sumber
Saya telah mencoba ekstensi Aheadworks onestepcheck tetapi tidak berfungsi. Bagaimana saya bisa melakukannya?
Manish Maheshwari
@Sejal Shah tolong jawab magento.stackexchange.com/questions/279918/...
Shafeel Sha
@ See Shah bagaimana cara menambahkan jika kondisi di sini
sumeet bajaj
1
Ini berfungsi baik untuk langkah pengiriman, tetapi pada tahap penagihan .produk-item-rasa tetap kosong
jonasG
Sejal menjawab pertanyaan saya di sini: magento.stackexchange.com/questions/178398/…
jonasG
3

jika Anda ingin menambahkan atribut khusus dalam ringkasan pesanan, Anda perlu mengganti: (Tata Letak) 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>

kemudian tambahkan js khusus untuk mendapatkan nilai atribut khusus Anda seperti ini di modul Anda: di /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;
        }
    });
}

);

tambahkan js lain untuk menghitung nilai dengan jumlah total tagihan di: /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());
        }
    });
}

);

Set itu Anda akan menemukan Anda atribut dengan nilai Terima kasih :)

masukkan deskripsi gambar di sini

Ronak Chauhan
sumber
1
Saya tidak berpikir @sudopratt ingin menambahkan baris dalam total kolom daripada atribut produk di bawah nama produk seperti deskripsi singkat.
Sunil Verma
@ Sunil Verma Anda punya solusi untuk ini. Saya perlu melakukan hal yang persis sama tetapi tidak bisa mendapatkan referensi
Rohit Goel
Ya, itu menunjukkan atribut khusus tetapi ketika pindah ke langkah berikutnya untuk pembayaran # maka atribut kustom menghilang. Mengapa?
HaFiz Umer
1

Bagi saya $ result ['totalsData'] ['items'] kosong. Saya menggunakan implementasi berikut sebagai gantinya:

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

Saya perlu menampilkan nama produk yang mudah dikonfigurasi. Jadi saya menggunakan kode seperti di bawah ini. Tetapi nama sederhana yang sama ditampilkan ketika saya memilih opsi yang dapat dikonfigurasi yang sama dalam ringkasan pesanan checkout. Jadi Bagaimana saya menampilkan nama produk sederhana yang benar?

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
sumber