You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PrestaShop 1.8购物车:如何按最小数量增减商品数量?

解决PrestaShop 1.8购物车按最小数量步进增减的问题

1. 修正购物车模板的输入框属性

找到你当前主题的购物车商品模板,路径一般是themes/你的主题/templates/cart/cart-product.tpl,定位到数量输入框代码,确保min和data-step都绑定{$product.minimal_quantity},同时可套用你详情页的默认值判断逻辑:

<input type="number" 
       id="quantity_wanted_{$product.id_product}_{$product.id_product_attribute}" 
       class="form-control input-xs" 
       name="quantity_{$product.id_product}_{$product.id_product_attribute}" 
       value="{if in_array($product->id, array(xxx,xxx,xxx))}{$product.minimal_quantity}{else}{$product.quantity}{/if}" 
       min="{$product.minimal_quantity}" 
       data-step="{$product.minimal_quantity}">

2. 修改前端JS的增减逻辑

问题核心是PrestaShop默认购物车JS会忽略data-step,强制按1步进。找到主题的购物车JS文件(一般是themes/你的主题/assets/js/cart.js),替换加减按钮的点击事件逻辑:

// 处理加号按钮
$('.product-quantity .btn-plus').off('click').on('click', function() {
  var $input = $(this).closest('.product-quantity').find('input');
  var step = parseInt($input.data('step')) || 1;
  var min = parseInt($input.attr('min')) || 1;
  $input.val(parseInt($input.val()) + step);
  if (parseInt($input.val()) < min) {
    $input.val(min);
  }
  $input.trigger('change');
});

// 处理减号按钮
$('.product-quantity .btn-minus').off('click').on('click', function() {
  var $input = $(this).closest('.product-quantity').find('input');
  var step = parseInt($input.data('step')) || 1;
  var min = parseInt($input.attr('min')) || 1;
  var newVal = parseInt($input.val()) - step;
  $input.val(Math.max(newVal, min));
  $input.trigger('change');
});

可选:添加输入框手动输入验证

防止用户手动输入不符合步进的数量,给输入框绑定change事件:

$('.product-quantity input').off('change').on('change', function() {
  var $input = $(this);
  var step = parseInt($input.data('step')) || 1;
  var min = parseInt($input.attr('min')) || 1;
  var val = parseInt($input.val());

  if (isNaN(val) || val < min) {
    $input.val(min);
  } else {
    // 将输入值调整为最近的步进倍数(这里用向上取整,可按需改为向下)
    var remainder = val % step;
    if (remainder !== 0) {
      val = Math.ceil(val / step) * step;
      $input.val(val);
    }
  }
  // 保留原有购物车更新逻辑
  updateCartQuantity($input);
});

3. 后端验证(防止绕过前端限制)

前端修改后,需确保后端不会接收不符合步进的数量,推荐用钩子实现(无需修改核心文件):

  1. 创建或使用现有自定义模块,添加actionCartUpdateQuantity钩子:
public function hookActionCartUpdateQuantity($params)
{
    $id_product = $params['id_product'];
    $quantity = $params['quantity'];
    $product = new Product($id_product);
    $min_qty = $product->minimal_quantity;

    if ($quantity % $min_qty !== 0) {
        // 调整为最近的倍数,且不小于最小数量
        $adjusted_qty = round($quantity / $min_qty) * $min_qty;
        $params['quantity'] = max($adjusted_qty, $min_qty);
    }
}
  1. 启用该模块,后端会自动校验并调整数量。

4. 清除缓存

修改完成后,在PrestaShop后台「高级参数→性能」中清除缓存,确保修改生效。

内容的提问来源于stack exchange,提问作者redpillcoders

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 21:13:17