Agregue un atributo de producto personalizado al resumen de pago Magento 2

14

Estoy tratando de agregar un atributo de producto personalizado a la lista de elementos en la sección de resumen en el pago en Magento 2. El archivo de plantilla está en Magento_Checkout/web/template/summary/item/details.htmly está buscando mostrar el valor del atributo personalizado antes del nombre del producto. ¿Alguna idea de cómo se agrega este valor a la plantilla ko? Parece que hay otra pregunta para esto aquí, pero nunca fue respondida.

sudopratt
fuente
1
@Arjun Esto es diferente. Este artículo al que se hace referencia realmente muestra que la página del carrito no finaliza la compra. El carrito es una plantilla phtml simple. El pago es una página ko y está obteniendo su fuente de otro lugar que no sea el mini-carrito. No estoy seguro de por qué todos los artículos del carrito que se muestran en mini carrito, carrito y finalización de compra están construidos de diferentes maneras. Pero el resumen de pago real es donde necesito ver cómo agregar el atributo personalizado.
sudopratt
@sudopratt, ¿Tiene alguna idea al respecto? ¿Cómo agregar un atributo de producto personalizado a la lista de elementos en la sección de resumen en el pago en Magento 2?
Sarfaraj Sipai

Respuestas:

16

Tendrás que crear un complemento para eso. Quería agregar sabor del producto al resumen del pedido. Esta es la forma en que creé un complemento y logré lo que quería.

Vendedor = Sejal

Archivos que necesita crear:

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

puede anular este archivo en su tema como este

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

Código: registro.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;
    }

}

detalles.html

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

en tema y agregar

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

abajo

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

¡Eso es! ¡Espero eso ayude!

Sejal Shah
fuente
He intentado en la extensión onestepcheck de Aheadworks pero no funciona. Como lo puedo hacer ?
Manish Maheshwari
@Sejal Shah por favor conteste magento.stackexchange.com/questions/279918/…
Shafeel Sha
@Sejal Shah cómo agregar si la condición aquí
sumeet bajaj
1
Esto funciona muy bien para la etapa de envío, pero en el último escalón de facturación estancias .product-elemento-de sabor vaciar
jonasG
Sejal respondió mi pregunta aquí: magento.stackexchange.com/questions/178398/…
jonasG
3

si desea agregar su atributo personalizado en el resumen del pedido, debe anular: (Diseños) 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>

luego agregue js personalizados para obtener su valor de atributo personalizado como este en su módulo: en /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;
        }
    });
}

);

agregue otro js para calcular el valor con el monto total de facturación en: /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());
        }
    });
}

);

Ese conjunto te encontrará atributo con valor Gracias :)

ingrese la descripción de la imagen aquí

Ronak Chauhan
fuente
1
No creo que @sudopratt quiera agregar una fila en totales más bien un atributo de producto debajo del nombre del producto como una breve descripción.
Sunil Verma
@ Sunil Verma, ¿tienes una solución para esto? Necesito hacer exactamente lo mismo, pero no puedo obtener ninguna referencia
Rohit Goel
Sí, muestra el atributo personalizado, pero cuando se mueve al siguiente paso para #pago, el atributo personalizado desaparece. ¿por qué?
HaFiz Umer
1

Para mí, $ result ['totalsData'] ['items'] está vacío. En su lugar, he usado la siguiente implementación:

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

Necesito mostrar el nombre simple del producto configurable. Así que usé el código de la siguiente manera. Pero se muestra el mismo nombre simple cuando elijo las mismas opciones configurables en el resumen del pedido de pago. Entonces, ¿cómo muestro los nombres de productos simples correctos?

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
fuente