How can we disable Quantity Box for specific product from checkout cart and minicart?
I have already search for the solution but it will disable quantity for all products reference URL
Your help will be greatly appreciated, Thanks.
How can we disable Quantity Box for specific product from checkout cart and minicart?
I have already search for the solution but it will disable quantity for all products reference URL
Your help will be greatly appreciated, Thanks.
In your custom module, do following steps.
Vendor/ModuleName/view/frontend/requirejs-config.js
var config = {
map: {
"*": {
'Magento_Checkout/template/minicart/item/default.html': '[Vendor]_[Module]/template/minicart/item/default.html'
}
}
};
Vendor/ModuleName/view/frontend/web/template/minicart/item/default.html
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<li class="item product product-item" data-role="product-item">
<div class="product">
<!-- ko if: product_has_url -->
<a data-bind="attr: {href: product_url, title: product_name}" tabindex="-1" class="product-item-photo">
<!-- ko foreach: $parent.getRegion('itemImage') -->
<!-- ko template: {name: getTemplate(), data: item.product_image} --><!-- /ko -->
<!-- /ko -->
</a>
<!-- /ko -->
<!-- ko ifnot: product_has_url -->
<span class="product-item-photo">
<!-- ko foreach: $parent.getRegion('itemImage') -->
<!-- ko template: {name: getTemplate(), data: item.product_image} --><!-- /ko -->
<!-- /ko -->
</span>
<!-- /ko -->
<div class="product-item-details">
<strong class="product-item-name">
<!-- ko if: product_has_url -->
<a data-bind="attr: {href: product_url}, html: product_name"></a>
<!-- /ko -->
<!-- ko ifnot: product_has_url -->
<!-- ko text: product_name --><!-- /ko -->
<!-- /ko -->
</strong>
<!-- ko if: options.length -->
<div class="product options" data-mage-init='{"collapsible":{"openedState": "active", "saveState": false}}'>
<span data-role="title" class="toggle"><!-- ko i18n: 'See Details' --><!-- /ko --></span>
<div data-role="content" class="content">
<strong class="subtitle"><!-- ko i18n: 'Options Details' --><!-- /ko --></strong>
<dl class="product options list">
<!-- ko foreach: { data: options, as: 'option' } -->
<dt class="label"><!-- ko text: option.label --><!-- /ko --></dt>
<dd class="values">
<!-- ko if: Array.isArray(option.value) -->
<span data-bind="html: option.value.join('<br>')"></span>
<!-- /ko -->
<!-- ko ifnot: Array.isArray(option.value) -->
<span data-bind="html: option.value"></span>
<!-- /ko -->
</dd>
<!-- /ko -->
</dl>
</div>
</div>
<!-- /ko -->
<div class="product-item-pricing">
<!-- ko if: canApplyMsrp -->
<div class="details-map">
<span class="label" data-bind="i18n: 'Price'"></span>
<span class="value" data-bind="i18n: 'See price before order confirmation.'"></span>
</div>
<!-- /ko -->
<!-- ko ifnot: canApplyMsrp -->
<!-- ko foreach: $parent.getRegion('priceSidebar') -->
<!-- ko template: {name: getTemplate(), data: item.product_price, as: 'price'} --><!-- /ko -->
<!-- /ko -->
<!-- /ko -->
<div class="details-qty qty">
<label class="label" data-bind="i18n: 'Qty', attr: {
for: 'cart-item-'+item_id+'-qty'}"></label>
<input data-bind="attr: {
id: 'cart-item-'+item_id+'-qty',
'data-cart-item': item_id,
'data-item-qty': qty,
'data-cart-item-id': product_sku
}, value: qty, enable: isCustomizedEnabledQtyBox"
type="number"
size="4"
class="item-qty cart-item-qty">
<button data-bind="attr: {
id: 'update-cart-item-'+item_id,
'data-cart-item': item_id,
title: $t('Update')
}"
class="update-cart-item"
style="display: none">
<span data-bind="i18n: 'Update'"></span>
</button>
</div>
</div>
<div class="product actions">
<!-- ko if: is_visible_in_site_visibility -->
<div class="primary">
<a data-bind="attr: {href: configure_url, title: $t('Edit item')}" class="action edit">
<span data-bind="i18n: 'Edit'"></span>
</a>
</div>
<!-- /ko -->
<div class="secondary">
<a href="#" data-bind="attr: {'data-cart-item': item_id, title: $t('Remove item')}"
class="action delete">
<span data-bind="i18n: 'Remove'"></span>
</a>
</div>
</div>
</div>
</div>
</li>
Vendor/ModuleName/etc/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">
<preference for="Magento\Checkout\CustomerData\DefaultItem" type="[Vendor]\[Module]\Plugin\Magento\Checkout\CustomerData\DefaultItem" />
</config>
Vendor/ModuleName/Plugin/Magento/Checkout/CustomerData/DefaultItem.php
<?php
namespace [Vendor]\[Module]\Plugin\Magento\Checkout\CustomerData;
class DefaultItem extends \Magento\Checkout\CustomerData\DefaultItem
{
protected function doGetItemData()
{
$result = parent::doGetItemData();
$result['isCustomizedEnabledQtyBox'] = $this->isQtyBoxEnabled($this->item->getProduct()->getSku());
return $result;
}
protected function isQtyBoxEnabled($sku)
{
$disabled = ['24-MB02'];
if(!in_array($sku, $disabled))
return 1;
else
return 0;
}
}
After this,
rm -rf generated/ var/view_preprocessed/ pub/static/frontend/
php bin/magento setup:static-content-deploy -f
php bin/magento c:f
Clear all your browser cache and check. This should work.
@yash Shah : thanks for your solution, it's great ! However, how to inject an helper in file
Vendor/ModuleName/Plugin/Magento/Checkout/CustomerData/DefaultItem.php To get the sku list ? I tried to add it in __construct like usual injections but everytime my helper is null. Thanks
<?php
namespace [Vendor]\[Module]\Plugin\Magento\Checkout\CustomerData;
class DefaultItem extends \Magento\Checkout\CustomerData\DefaultItem
{
protected $myHelper;
public function __construct(
\Magento\Catalog\Helper\Image $imageHelper,
\Magento\Msrp\Helper\Data $msrpHelper,
\Magento\Framework\UrlInterface $urlBuilder,
\Magento\Catalog\Helper\Product\ConfigurationPool $configurationPool,
\Magento\Checkout\Helper\Data $checkoutHelper,
\Magento\Framework\Escaper $escaper = null,
\Magento\Catalog\Model\Product\Configuration\Item\ItemResolverInterface $itemResolver = null,
\[Vendor]\[Module]\Helper\Data $myHelper = null
) {
$this->myHelper = $myHelper;
parent::__construct($imageHelper, $msrpHelper, $urlBuilder, $configurationPool, $checkoutHelper, $escaper, $itemResolver);
}
protected function doGetItemData()
{
$result = parent::doGetItemData();
$result['isCustomizedEnabledQtyBox'] = $this->isQtyBoxEnabled($this->item->getProduct()->getSku());
return $result;
}
protected function isQtyBoxEnabled($sku)
{
$disabled = explode([' , ',' ,',', ',','],$this->myHelper->getDisabledSkus());
if(!in_array($sku, $disabled))
return 1;
else
return 0;
}
}
$this->myHelper is always null on line $disabled = ...