Ödeme özetine özel ürün özelliği ekleme Magento 2


14

Magento 2'de ödeme bölümünde özet bölümündeki öğeler listesine özel bir ürün özniteliği eklemeye çalışıyorum. Şablon dosyası Magento_Checkout/web/template/summary/item/details.htmlve ürün adından önce özel özniteliğin değerini görüntülemek istiyor. Bu değerin ko şablonuna nasıl eklendiği hakkında bir fikriniz var mı? Burada bunun için başka bir soru var gibi görünüyor ama asla cevaplanmadı.



1
@Arjun Bu farklı. Başvurulan bu makale, alışveriş sepeti sayfasında ödeme olmadığını gösterir. Sepet basit bir phtml şablonu. Ödeme bir ko sayfasıdır ve kaynağını mini arabadan başka bir yerden alıyor. Mini alışveriş sepeti, alışveriş sepeti ve ödeme kutusundaki tüm alışveriş sepeti öğelerinin neden farklı şekillerde oluşturulduğundan emin değilim. Ancak gerçek ödeme özeti, özel özniteliğin nasıl ekleneceğini görmem gereken yerdir.
sudopratt

@sudopratt, Bununla ilgili bir fikriniz var mı, Magento 2'deki ödeme bölümündeki özet bölümündeki öğeler listesine nasıl özel bir ürün özelliği eklenir?
Sarfaraj Sipai

Yanıtlar:


16

Bunun için bir eklenti oluşturmanız gerekecek. Sipariş özetine ürün aroması eklemek istedim. Bu bir eklenti yaratma ve istediğimi elde etme şeklim.

Satıcı = Sejal

Oluşturmanız gereken dosyalar:

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

temanızdaki bu dosyayı şu şekilde geçersiz kılabilirsiniz

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

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

Tema ve ekleme

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

altında

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

Bu kadar! Umarım yardımcı olur!


Aheadworks onestepcheck uzantısında denedim ama çalışmıyor. Nasıl yapabilirim ?
Manish Maheshwari


@Sejal Shah burada şartlar nasıl eklenir
sumeet bajaj

1
Bu, nakliye adımı için harika çalışıyor, ancak faturalandırma adımında. Ürün-ürün-lezzet boş kalıyor
jonasG


3

özel özelliğinizi sipariş özetine eklemek istiyorsanız geçersiz kılmanız gerekir: (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) satış_sipariş_görünümü:

<referenceContainer name="order_totals">
        <block class="Dedicated\Processingfee\Block\Sales\Order\ProcessingFee" name="processingfee"/>
    </referenceContainer>

ardından modülünüzde böyle özel özellik değerinizi almak için özel j'ler ekleyin: atview / 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;
        }
    });
}

);

toplam fatura tutarını kullanarak değeri hesaplamak için başka bir js ekleyin: /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());
        }
    });
}

);

Bu set size değer ile öznitelik bulacaksınız Teşekkürler :)

resim açıklamasını buraya girin


1
@Sudopratt'ın kısa bir açıklama gibi ürün adının altında bir ürün özelliği yerine toplamlar sütununa bir satır eklemek istediğini sanmıyorum.
Sunil Verma

@ Sunil Verma bunun için bir çözümünüz var mı? Tam olarak aynı şeyi yapmam gerekiyor ama herhangi bir referans alamıyorum
Rohit Goel

Evet, özel özelliğini göster ancak # ödeme için sonraki adıma geçildiğinde özel özellik kayboluyor. neden?
HaFiz Umer

1

Benim için $ sonuç ['totalsData'] ['öğeler'] boştu. Bunun yerine aşağıdaki uygulamayı kullandım:

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

Yapılandırılabilir ürünün basit ürün adını göstermem gerekiyor. Bu yüzden aşağıdaki gibi kod kullandım. Ancak, ödeme talimatı özetinde aynı yapılandırılabilir seçenekleri belirlediğimde aynı basit ad görüntüleniyor. Peki doğru ürün adlarını nasıl görüntülerim?

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;
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.