체크 아웃 요약 Magento 2에 사용자 정의 제품 속성 추가


14

Magento 2의 체크 아웃에서 요약 섹션에있는 항목 목록에 사용자 정의 제품 속성을 추가하려고합니다. 템플리트 파일이 Magento_Checkout/web/template/summary/item/details.html있으며 제품 이름 앞에 사용자 정의 속성 값을 표시하려고합니다. 이 값이 ko 템플릿에 어떻게 추가되는지에 대한 아이디어가 있습니까? 여기에 대한 또 다른 질문이 있지만 대답하지 않은 것 같습니다.



1
@Arjun 이것은 다릅니다. 이 참조 기사는 실제로 장바구니 페이지가 체크 아웃되지 않음을 보여줍니다. 장바구니는 간단한 phtml 템플릿입니다. 체크 아웃은 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

코드 : 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 

테마로 추가

<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는 magento.stackexchange.com/questions/279918/…에 답변 하십시오
Shafeel Sha

@Sejal 샤 어떻게하면 여기에 조건 추가
sumeet의 바자

1
이는 배송 단계에서는 효과적이지만 청구 단계에서는 .product-item-flavor가 비어 있습니다
jonasG

Sejal은 여기 내 질문에 대답했습니다 : magento.stackexchange.com/questions/178398/…
jonasG

3

주문 요약에 사용자 정의 속성을 추가하려면 다음을 대체해야합니다. (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>

그런 다음 사용자 정의 js를 추가하여 모듈에서 다음과 같은 사용자 정의 속성 값을 얻으십시오.

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

    return Component.extend({

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

);

/view/frontend/web/js/view/checkout/summary/processingfee.js에 총 청구 금액으로 값을 계산하기 위해 다른 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.