เพิ่มคุณสมบัติผลิตภัณฑ์ที่กำหนดเองเพื่อสรุปการชำระเงินวีโอไอพี 2


14

ฉันกำลังพยายามเพิ่มแอตทริบิวต์ผลิตภัณฑ์ที่กำหนดเองลงในรายการของรายการในส่วนสรุปในการชำระเงินใน Magento 2 ไฟล์เทมเพลตอยู่ที่Magento_Checkout/web/template/summary/item/details.htmlและกำลังมองหาเพื่อแสดงค่าของแอตทริบิวต์ที่กำหนดเองก่อนชื่อผลิตภัณฑ์ มีความคิดเกี่ยวกับวิธีเพิ่มค่านี้ลงในเทมเพลต ko หรือไม่? ดูเหมือนว่ามีคำถามอื่นสำหรับที่นี่แต่ก็ไม่เคยตอบ



1
@Arjun นี้แตกต่าง บทความที่อ้างอิงนี้แสดงให้เห็นว่าหน้ารถเข็นไม่ได้ชำระเงิน รถเข็นเป็นเทมเพลต PHP แบบง่าย ชำระเงินเป็นหน้า ko และได้รับแหล่งที่มาจากที่อื่นนอกเหนือจากมินิรถเข็น ไม่แน่ใจว่าทำไมรายการรถเข็นทั้งหมดแสดงในรถเข็นขนาดเล็กรถเข็นและเช็คเอาต์ทั้งหมดถูกสร้างขึ้นในรูปแบบที่แตกต่างกัน แต่สรุปการชำระเงินจริงคือที่ฉันต้องดูวิธีการเพิ่มแอตทริบิวต์ที่กำหนดเอง
sudopratt

@sudopratt, คุณมีความคิดเกี่ยวกับวิธีการเพิ่มแอตทริบิวต์ของผลิตภัณฑ์ที่กำหนดเองในรายการของรายการในส่วนสรุปในการชำระเงินใน Magento 2?
Sarfaraj Sipai

คำตอบ:


16

คุณจะต้องสร้างปลั๊กอินสำหรับสิ่งนั้น ฉันต้องการเพิ่มรสชาติของผลิตภัณฑ์เพื่อสรุปการสั่งซื้อ นี่คือวิธีที่ฉันสร้างปลั๊กอินและบรรลุสิ่งที่ฉันต้องการ

ผู้ขาย = Sejal

ไฟล์ที่คุณต้องการสร้าง:

  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: สำเนาของ vendor\magento\module-checkout\view\frontend\web\template\summary\item\details.html

คุณสามารถแทนที่ไฟล์นี้ในธีมของคุณเช่นนี้

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

รหัส: 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 

ในรูปแบบและเพิ่ม

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

ด้านล่าง

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

แค่นั้นแหละ! หวังว่ามันจะช่วย!


ฉันได้ลองในส่วนขยายของ Aheadworks onestepcheck แล้ว แต่มันไม่ทำงาน ฉันจะทำอย่างไร
Manish Maheshwari


@Sejal Shah วิธีการเพิ่มเงื่อนไขถ้านี่
sumeet bajaj

1
วิธีนี้ใช้งานได้ดีสำหรับขั้นตอนการจัดส่ง แต่ในขั้นตอนการเรียกเก็บเงินสินค้า - รายการรสชาติจะยังคงว่างเปล่าอยู่
jonasG

Sejal ตอบคำถามของฉันที่นี่: magento.stackexchange.com/questions/178398/…
jonasG

3

หากคุณต้องการที่จะเพิ่มแอตทริบิวต์ที่กำหนดเองของคุณในการสรุปคำสั่งซื้อคุณจะต้องแทนที่: (เลย์เอาต์) 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>

จากนั้นเพิ่ม js ที่กำหนดเองเพื่อรับค่าแอตทริบิวต์ที่กำหนดเองของคุณเช่นนี้ในโมดูลของคุณ: ที่ /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;
        }
    });
}

);

เพิ่ม js อื่นเพื่อคำนวณมูลค่าด้วยจำนวนเงินที่เรียกเก็บรวมใน: /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());
        }
    });
}

);

ชุดนั้นคุณจะได้พบกับคุณสมบัติที่มีคุณค่าขอบคุณ :)

ป้อนคำอธิบายรูปภาพที่นี่


1
ฉันไม่คิดว่า @sudopratt ต้องการเพิ่มแถวเป็นผลรวมมากกว่าแอตทริบิวต์ของผลิตภัณฑ์ด้านล่างชื่อผลิตภัณฑ์เช่นคำอธิบายสั้น ๆ
Sunil Verma

@ Sunil Verma มีวิธีแก้ปัญหาสำหรับคุณแล้ว ฉันต้องทำอย่างเดียวกัน แต่ไม่สามารถรับการอ้างอิงใด ๆ
Rohit Goel

ใช่มันแสดงแอตทริบิวต์ที่กำหนดเอง แต่เมื่อย้ายไปที่ขั้นตอนถัดไปสำหรับ #payment แอตทริบิวต์ที่กำหนดเองจะหายไป ทำไม?
HaFiz Umer

1

สำหรับฉันคือ$ result ['totalsData'] ['items']ว่างเปล่า ฉันใช้การติดตั้งต่อไปนี้แทน:

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

ฉันต้องการแสดงชื่อผลิตภัณฑ์อย่างง่ายของการกำหนดค่าได้ ดังนั้นฉันจึงใช้รหัสดังนี้ แต่ชื่อง่าย ๆ เดียวกันจะปรากฏขึ้นเมื่อฉันเลือกตัวเลือกที่กำหนดค่าได้เหมือนกันในสรุปคำสั่งซื้อเช็คเอาต์ ดังนั้นฉันจะแสดงชื่อผลิตภัณฑ์ที่เรียบง่ายถูกต้องได้อย่างไร

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;
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.