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>
それでおしまい!それが役に立てば幸い!
注文の概要にカスタム属性を追加する場合は、オーバーライドする必要があります:(レイアウト)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を追加して、モジュールで次のようなカスタム属性値を取得します:/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;
}
});
}
);
/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;
}