Magento 2의 체크 아웃에서 요약 섹션에있는 항목 목록에 사용자 정의 제품 속성을 추가하려고합니다. 템플리트 파일이 Magento_Checkout/web/template/summary/item/details.html
있으며 제품 이름 앞에 사용자 정의 속성 값을 표시하려고합니다. 이 값이 ko 템플릿에 어떻게 추가되는지에 대한 아이디어가 있습니까? 여기에 대한 또 다른 질문이 있지만 대답하지 않은 것 같습니다.
Magento 2의 체크 아웃에서 요약 섹션에있는 항목 목록에 사용자 정의 제품 속성을 추가하려고합니다. 템플리트 파일이 Magento_Checkout/web/template/summary/item/details.html
있으며 제품 이름 앞에 사용자 정의 속성 값을 표시하려고합니다. 이 값이 ko 템플릿에 어떻게 추가되는지에 대한 아이디어가 있습니까? 여기에 대한 또 다른 질문이 있지만 대답하지 않은 것 같습니다.
답변:
이를위한 플러그인을 만들어야합니다. 주문 요약에 제품 맛을 추가하고 싶었습니다. 이것이 플러그인을 만들고 원하는 것을 달성 한 방법입니다.
공급 업체 = Sejal
작성해야 할 파일 :
app\code\Sejal\Flavor\registration.php
app\code\Sejal\Flavor\etc\di.xml
app\code\Sejal\Flavor\etc\module.xml
app\code\Sejal\Flavor\Plugin\ConfigProviderPlugin.php
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>
그게 다야! 그것이 도움이되기를 바랍니다!
주문 요약에 사용자 정의 속성을 추가하려면 다음을 대체해야합니다. (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());
}
});
}
);
그 값을 설정하면 감사합니다 :)
저에게는 $ 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;
}
구성 가능한 간단한 제품 이름을 표시해야합니다. 그래서 아래 코드를 사용했습니다. 그러나 결제 주문 요약에서 동일한 구성 가능한 옵션을 선택하면 동일한 간단한 이름이 표시됩니다. 그렇다면 올바른 간단한 제품 이름을 어떻게 표시합니까?
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;
}