I have been making modifications to an existing Magento project. I want to add custom attribute to the product in Checkout page's order summary section. For this, I created a plugin following the answer in Magento2 - How can I display a product attribute value in Order Summary block?
After page load completes my custom attribute is not present.
Please help me to solve this issue.
Thanks in advance.....!
Below is my magento2 Code
di.xml
Module.xml
ConfigProviderPlugin.php
<?php
namespace Custom\Checkout\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++){
$qty = $items[$i]['qty'];
$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);
$box_per_lens = $product->getResource()->getAttribute('box_per_lens')->getFrontend()->getValue($product);
$use_quantity_type = $product->getResource()->getAttribute('use_quantity_type')->getFrontend()->getValue($product);
$quantity_type = $product->getResource()->getAttribute('quantity_type')->getFrontend()->getValue($product);
$quantity_type1 ='';
$box_per_lens1 ='';
$qData = '';
if($use_quantity_type == 'No' || $use_quantity_type == 'NA'){
$quantity_type1='Quantity';
$qData = $qty.' '.$quantity_type1;
}else{
if($quantity_type == 'No' || $quantity_type == 'NA'){
$quantity_type1 ='';
}else{
$quantity_type1 = $quantity_type;
}
if($box_per_lens == 'No' || $box_per_lens == 'NA'){
$box_per_lens1 = "";
$qData = $qty.' '.$quantity_type1;
}
else{
$box_per_lens1 = $box_per_lens;
$qData = $qty.' '.$quantity_type1.'('.($qty*$box_per_lens1).' lenses)';
}
}
$items[$i]['flavor'] = "call66";
$items[$i]['qtyData'] = $qData;
}
$result['totalsData']['items'] = $items;
return $result;
}
}
details.html
Override location: app/design/frontend/Theme/luma/Mageplaza_Osc/web/template/container/summary/item/details.html
<td class="a-left product ">
<div class="product-item-detail">
<div class="product-item-inner">
<div class="product-item-name-block">
<!-- ko if: getProductUrl($parent) -->
<a data-bind="attr:{href: getProductUrl($parent)}" target="_blank">
<strong class="product-item-name" data-bind="text: $parent.name"></strong>
</a>
<!-- /ko -->
<!-- ko ifnot: getProductUrl($parent)-->
<strong class="product-item-name" data-bind="text: $parent.name"></strong>
<!-- /ko -->
<!-- <span class="product-item-qty" data-bind="text: $parent.qty"></span> -->
<span class="product-item-qtyData" data-bind="text: $parent.qtyData"></span>
</div>
</div>
</div>
<!-- ko if: isItemAvailable($parent.item_id) -->
<div class="gift-message-item-content">
<div class="gift-message-item" data-bind="attr: { id: 'item' +$parent.item_id, title: giftMessageItemsTitleHover},click: loadGiftMessageItem.bind($data,$parent.item_id)">
<i class="fa fa-gift fa-2x" aria-hidden="true"></i>
</div>
<div style="display: none" data-bind="attr: { id: 'item' + $parent.item_id,title: $parent.name},afterRender: setModalElement">
<div class="gift-options-content">
<div class="fieldset">
<div class="field field-from col-mp mp-6">
<!-- ko ifnot: window.checkoutConfig.oscConfig.isUsedMaterialDesign -->
<label for="gift-message-whole-from" class="label">
<span data-bind="i18n: 'From:'"></span>
</label>
<!-- /ko -->
<div class="control input-field">
<input type="text" id="gift-message-whole-from" class="input-text" required>
<!-- ko if: window.checkoutConfig.oscConfig.isUsedMaterialDesign -->
<label for="gift-message-whole-from" class="label">
<span data-bind="i18n: 'From:'"></span>
</label>
<!-- /ko -->
</div>
</div>
<div class="field field-to col-mp mp-6">
<!-- ko ifnot: window.checkoutConfig.oscConfig.isUsedMaterialDesign -->
<label for="gift-message-whole-to" class="label">
<span data-bind="i18n: 'To:'"></span>
</label>
<!-- /ko -->
<div class="control input-field">
<input type="text" id="gift-message-whole-to" class="input-text" required>
<!-- ko if: window.checkoutConfig.oscConfig.isUsedMaterialDesign -->
<label for="gift-message-whole-to" class="label">
<span data-bind="i18n: 'To:'"></span>
</label>
<!-- /ko -->
</div>
</div>
<div class="field text col-mp mp-12">
<!-- ko ifnot: window.checkoutConfig.oscConfig.isUsedMaterialDesign -->
<label for="gift-message-whole-message" class="label">
<span data-bind="i18n: 'Message:'"></span>
</label>
<div class="control">
<textarea id="gift-message-whole-message" class="input-text" rows="5" cols="10"></textarea>
</div>
<!-- /ko -->
<!-- ko if: window.checkoutConfig.oscConfig.isUsedMaterialDesign -->
<div class="control">
<textarea id="gift-message-whole-message" class="input-text" rows="3" cols="10" data-bind="attr:{placeholder: $t('Message')}"></textarea>
</div>
<!-- /ko -->
</div>
</div>
</div>
<div class="actions-toolbar">
<div class="primary">
<button type="submit" name="update" class="action update" data-bind="click: updateGiftMessageItem.bind($data,$parent.item_id)">
<span data-bind="i18n: 'Update'"></span>
</button>
</div>
<div class="primary">
<button type="submit" name="delete" class="action delete" data-bind="click: deleteGiftMessageItem.bind($data,$parent.item_id)">
<span data-bind="i18n: 'Delete'"></span>
</button>
</div>
</div>
</div>
</div>
<!-- /ko -->
</td>
<!-- <td class="a-center details-qty">
<div class="qty-wrapper">
<a href="javascript:void(0);" class="button-action minus" data-bind="click: minusQty" title="Minus"></a>
<div class="qty-wrap">
<input class="item_qty input-text update value" name="item_qty" data-bind="value: $parent.qty, attr: {id: $parent.item_id}, event: {change: changeQty}" />
</div>
<a href="javascript:void(0);" class="button-action plus" data-bind="click: plusQty" title="Plus"></a>
</div>
</td> -->
<td class="a-center subtotal">
<!-- ko foreach: getRegion('after_details') -->
<!-- ko template: getTemplate() --><!-- /ko -->
<!-- /ko -->
</td>
<td class="a-center last button-remove">
<div class="remove-wrapper">
<a href="javascript:void(0);" class="button-action remove" data-bind="click:function(){removeItem($parent.item_id)}"></a>
</div>
</td>