Hi
In magento2 how to make shipping method radio buttons in cart to dropdown in cart.
yes please find attached image
Hi @sanganagouda,
The template you're looking for is:
vendor/magento/module-checkout/view/frontend/web/template/cart/shipping-rates.html
Maybe you can override the file within your theme?
No its not working as required, after changing in shipping-reates.html code of
<input
type="radio"
class="radio"
data-bind="click: $parents[1].selectVirtualMethod,
attr: {
value: carrier_code + '_' + method_code,
id: carrier_code + '_' + method_code,
name: 'estimate_method' + $parentContext.$index()
}
"/>
to
<select
data-bind="
options: $parents[1].selectShippingMethod,
optionsText:attr: {for: 's_method_' + method_code},
value: $parents[1].selectedShippingMethod,
attr: {
value: carrier_code + '_' + method_code,
id: 's_method_' + method_code
}
">
</select>
but it showing dropdown for each method like
so not able to set option values to select
Hi @sanganagouda and guys
In order to implement this requirement, we can follow up on the following steps:
1. Copy file: Magento_Checkout/web/template/cart/shipping-rates.html and then change input[type="radio"] to select
<form id="co-shipping-method-form" data-bind="blockLoader: isLoading, visible: isVisible()"> <p class="field note" data-bind="visible: (!isLoading() && shippingRates().length <= 0)"> <!-- ko text: $t('Sorry, no quotes are available for this order at this time')--><!-- /ko --> </p> <fieldset class="fieldset rate" data-bind="visible: (shippingRates().length > 0)"> <div class="field"> <select name="mg-shipping-method-list" id="mg-shipping-method-list" data-bind="options: shippingRates() , optionsCaption: 'Please select a rate...', optionsText: function(item) { return item.carrier_title + ' - ' + item.method_title + ' : ' +element.getFormattedPrice(item.price_incl_tax) }, optionsValue:function(item) { return item.carrier_code + '_' + item.method_code; }, ko-value: function(item) { return item.carrier_code + '_' + item.method_code; }, value:selectedShippingMethod, event:{ change:shippingSelectionChanged }"> </select> </div> </fieldset> </form>
2. Declare a mixin in file app/code/[Vendor]/Themes/view/frontend/requirejs-config.js
var config = { config: { mixins: { 'Magento_Checkout/js/view/cart/shipping-rates': { '[Vendor]_[Module]/js/view/cart/shipping-rates-mixin': true } }, } };
3. Create a mixin file app/code/[Vendor]/[Module]/view/frontend/web/js/view/cart/shipping-rates-mixin.js
define([ 'jquery', 'ko', 'underscore', 'uiComponent', 'Magento_Checkout/js/model/shipping-service', 'Magento_Catalog/js/price-utils', 'Magento_Checkout/js/model/quote', 'Magento_Checkout/js/action/select-shipping-method', 'Magento_Checkout/js/checkout-data' ], function ($,ko, _, Component, shippingService, priceUtils, quote, selectShippingMethodAction, checkoutData) { "use strict"; return function (target) { return target.extend({ /** * Add method for shipping method dropdown * @param newvalue */ shippingSelectionChanged: function(newvalue){ var self = this; var shippingRatescollection = self.shippingRates(); var selectedVal = $("#mg-shipping-method-list").val(); if(selectedVal!=='' ){ var arrcarierCode = selectedVal.split("_"); var selectedCarrierCode = arrcarierCode[0] var selectedMethodCode = arrcarierCode[1]; $.each(shippingRatescollection,function( index, shippingMethod ) { if(shippingMethod.carrier_code==selectedCarrierCode && shippingMethod.method_code==selectedMethodCode){ self.selectShippingMethod(shippingMethod); } }); } }, }); } });