Thêm thuộc tính sản phẩm tùy chỉnh để kiểm tra tóm tắt Magento 2


14

Tôi đang cố gắng thêm thuộc tính sản phẩm tùy chỉnh vào danh sách các mục trên phần tóm tắt trong thanh toán trong Magento 2. Tệp mẫu có tại Magento_Checkout/web/template/summary/item/details.html và tìm cách hiển thị giá trị của thuộc tính tùy chỉnh trước tên sản phẩm. Bất kỳ ý tưởng về cách giá trị này được thêm vào mẫu ko? Có vẻ như có một câu hỏi khác cho điều này ở đây nhưng không bao giờ được trả lời.



1
@Arjun Điều này là khác nhau. Bài viết tham khảo này thực sự cho thấy trang giỏ hàng không thanh toán. Giỏ hàng là một mẫu phtml đơn giản. Thanh toán là một trang ko và đang lấy nguồn từ một nơi khác ngoài mini-cart. Không chắc chắn tại sao tất cả các mục giỏ hàng được hiển thị trong giỏ hàng nhỏ, giỏ hàng và thanh toán tất cả được xây dựng theo những cách khác nhau. Nhưng tóm tắt kiểm tra thực tế là nơi tôi cần xem cách thêm thuộc tính tùy chỉnh.
sudopratt

@sudopratt, Bạn có biết về điều đó không, Làm thế nào để thêm thuộc tính sản phẩm tùy chỉnh vào danh sách các mục trên phần tóm tắt trong thanh toán trong Magento 2?
Sarfaraj Sipai

Câu trả lời:


16

Bạn sẽ phải tạo một plugin cho điều đó. Tôi muốn thêm hương vị sản phẩm để đặt hàng tóm tắt. Đây là cách tôi tạo một plugin và đạt được những gì tôi muốn.

Người bán hàng = Sejal

Các tập tin bạn cần tạo:

  1. Đăng ký.php: app\code\Sejal\Flavor\registration.php
  2. di.xml: app\code\Sejal\Flavor\etc\di.xml
  3. mô-đun: app\code\Sejal\Flavor\etc\module.xml
  4. ConfigProviderPlugin.php: app\code\Sejal\Flavor\Plugin\ConfigProviderPlugin.php
  5. chi tiết.html: bản sao của vendor\magento\module-checkout\view\frontend\web\template\summary\item\details.html

bạn có thể ghi đè tệp này trong chủ đề của bạn như thế này

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

Mã: đăng ký.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>

mô-đun

<?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;
    }

}

chi tiết.html

Copy vendor\magento\module-checkout\view\frontend\web\template\summary\item\details.html 

trong chủ đề và thêm

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

phía dưới

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

Đó là nó! Hy vọng nó giúp!


Tôi đã thử trong phần mở rộng onestepcheck của Aheadworks nhưng nó không hoạt động. Làm thế nào tôi có thể làm được ?
Manish Maheshwari

@Sejal Shah vui lòng trả lời magento.stackexchange.com/questions/279918/NH
Shafeel Sha

@Sejal Shah làm thế nào để thêm nếu có điều kiện ở đây
sumeet bajaj

Điều này hoạt động rất tốt cho bước vận chuyển, nhưng ở bước thanh toán .product-item-hương vị vẫn trống
jonasG

Sejal đã trả lời câu hỏi của tôi ở đây: magento.stackexchange.com/questions/178398/iêu
jonasG

3

nếu bạn muốn thêm thuộc tính tùy chỉnh của mình vào tóm tắt thứ tự, bạn cần ghi đè: (Bố cục) 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) kiểm tra_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>

sau đó thêm js tùy chỉnh để nhận giá trị thuộc tính tùy chỉnh của bạn như thế này trong mô-đun của bạn: tại /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;
        }
    });
}

);

thêm một js khác để tính giá trị với tổng số tiền thanh toán trong: /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());
        }
    });
}

);

Bộ đó bạn sẽ tìm thấy thuộc tính của bạn với giá trị Cảm ơn :)

nhập mô tả hình ảnh ở đây


1
Tôi không nghĩ @sudopratt muốn thêm một hàng trong tổng số coumn thay vì một thuộc tính sản phẩm bên dưới tên sản phẩm như mô tả ngắn.
Sunil Verma

@ Sunil Verma bạn có một giải pháp cho việc này. Tôi cần phải làm chính xác như vậy nhưng không thể có được bất kỳ tài liệu tham khảo nào
Rohit Goel

1

Đối với tôi là $ result ['totalsData'] ['items'] trống. Tôi đã sử dụng thực hiện sau đây thay thế:

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

Tôi cần hiển thị tên sản phẩm đơn giản của cấu hình. Vì vậy, tôi đã sử dụng mã như dưới đây. Nhưng cùng một tên đơn giản sẽ hiển thị khi tôi chọn các tùy chọn cấu hình tương tự trong tóm tắt thứ tự thanh toán. Vì vậy, làm thế nào tôi hiển thị tên sản phẩm đơn giản chính xác?

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;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.