Magento中Group Product关联单品无法单独加入购物车的求助
解决Magento分组商品单个加购按钮同时加入多个商品的问题
我帮你分析下问题出在哪,以及怎么修复:
问题根源
你当前的代码里,每个关联商品的加购表单输入框用了super_group[<?= $_item->getId() ?>]作为name属性——这是Magento分组商品批量加购的专属字段标识。当你点击任意一个Add to Cart按钮时,浏览器会自动收集页面上所有带super_group前缀的输入框值一起提交,所以才会出现点击第一个按钮,两个商品同时被加入购物车的情况。
修复方案
我们需要把每个关联商品的加购逻辑改成普通Simple商品的独立加购模式,具体调整如下:
1. 修改表单核心代码
替换你原代码中<div class="control qty">内部的内容,改成下面的代码:
<div class="control qty"> <?php // 获取单个商品的加购地址 $objectManager = \Magento\Framework\App\ObjectManager::getInstance(); $listBlock = $objectManager->get('\Magento\Catalog\Block\Product\ListProduct'); $addToCartUrl = $listBlock->getAddToCartUrl($_item); ?> <form data-role="tocart-form" action="<?= $block->escapeUrl($addToCartUrl) ?>" method="post"> <?= $block->getBlockHtml('formkey')?> <input type="number" name="qty" data-selector="qty" value="<?= /* @escapeNotVerified */ $_item->getQty() * 1 ?>" title="<?= /* @escapeNotVerified */ __('Qty') ?>" class="input-text qty" data-validate="{'validate-number':true, 'validate-greater-than-zero':true}" data-errors-message-box="#validation-message-box"/> <button type="submit" title="<?= $block->escapeHtml(__('Add to Cart')) ?>" class="addtocart"> <?= $block->escapeHtml(__('Add to Cart')) ?> </button> </form> </div>
2. 移除重复的商品加载逻辑
你代码里同时加载了两次关联商品数据:
<?php $_associatedProducts = $block->getAssociatedProducts(); ?> <?php $grouped = $_product->load($_product->getId()); ?> <?php $associatedProducts = $grouped->getTypeInstance()->getAssociatedProducts($grouped); ?>
建议保留第一行,然后把循环的foreach ($associatedProducts as $_item):改成foreach ($_associatedProducts as $_item):,避免重复查询数据库,提升页面性能。
3. 清理无用代码
你原代码里有一个被注释掉的额外加购按钮单元格,可以直接删掉这个<td class="addtocart">的整个区块,减少冗余代码。
修复原理
- 把输入框name从
super_group[item_id]改成qty:这是普通商品加购的标准字段,只会提交当前表单的数量值,不会影响其他商品 - 使用单个商品的专属加购地址:确保表单提交时只处理当前关联商品的加购请求
- 替换验证规则:用普通商品的数量验证规则替代分组商品的批量验证,确保输入的数量合法
这样修改后,点击每个单品的Add to Cart按钮,就只会把对应的单个商品加入购物车了。
内容的提问来源于stack exchange,提问作者shweta mudgil
相关产品推荐
相关产品推荐

