Sometimes you need a custom variable add-in window.checkoutConfig dynamically and display on the checkout page according to requirement, follow steps to add custom select box in window.checkoutConfig on Checkout.
Step 1 : Create di.xml file and add below code
File : Vendor/Module/etc/frontend/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="CustomCheckoutModelDefaultConfigProvider" type="Vendor\Module\Plugin\Checkout\Model\DefaultConfigProvider" sortOrder="100"/> </type> </config>
Step 2 : Create AdditionalConfigVars.php file and add below code
File : Vendor/Module/Model/AdditionalConfigVars.php
namespace Vendor\Module\Plugin\Checkout\Model; use Magento\Checkout\Model\Session as CheckoutSession; use Magento\Customer\Model\Session as CustomerSession; use Magento\Framework\Exception\LocalizedException; use Magento\Quote\Model\QuoteIdMaskFactory; use Magento\Sales\Api\OrderRepositoryInterface; use Magento\Customer\Model\GroupRegistry; class DefaultConfigProvider { protected $checkoutSession; protected $customerSession; protected $quoteIdMaskFactory; protected $orderRepository; /** * @param CheckoutSession $checkoutSession * @param CustomerSession $customerSession * @param QuoteIdMaskFactory $quoteIdMaskFactory * @param OrderRepositoryInterface $orderRepository */ public function __construct( CheckoutSession $checkoutSession, CustomerSession $customerSession, QuoteIdMaskFactory $quoteIdMaskFactory, OrderRepositoryInterface $orderRepository, ) { $this->checkoutSession = $checkoutSession; $this->customerSession = $customerSession; $this->quoteIdMaskFactory = $quoteIdMaskFactory; $this->orderRepository = $orderRepository; } /** * @param CheckoutSession $subject * @param array $configData */ public function afterGetConfig( \Magento\Checkout\Model\DefaultConfigProvider $subject, $configData ) { $configData['customvalue']['customdata'] = '['test1','test2','test2']'; return $configData; } }
Step 3 : Create custom.js file and add below code
File : Vendor/Module/view/frontend/web/js/view/payment/method-renderer/custom.js
define( [ 'Magento_Checkout/js/view/payment/default', 'jquery', 'mage/validation'], function (Component, $,) { 'use strict'; return Component.extend({ defaults: { template: 'Vendor_Module/payment/custom', customdata: '' }, initObservable: function() { this._super().observe([ 'customdata' ]); if ( window.checkoutConfig.hasOwnProperty('customvalue') && window.checkoutConfig.customvalue.hasOwnProperty('customdata') ) { this.customdata = window.checkoutConfig.customvalue.customdata; } return this; } }); } );
Step 4 : Create custom.html file and add below code
File : Vendor/Module/view/frontend/web/template/payment/custom.html
<div class="field field-user-email required"> <label for="customdata" class="label"> <span><!-- ko i18n: 'customdata data'--><!-- /ko --></span> </label> <div class="control"> <select id="customdata" name="payment[customdata]" data-bind="value: customdata, options: customdata"> </select> </div> </div>
Note : Run setup upgrade and deploy command, then check on browser console type window.checkoutConfig.customvalue.customdata
Related Post :Customer Login Programmatically In Magento