如何在PrestaShop 1.7.6购物车模态框中添加关联产品?
在PrestaShop 1.7.6购物车模态框添加关联产品的实现方法
要实现将后台设置的原生关联产品显示在ps_shoppingcart模块的购物车模态框中,需分后端数据传递和前端模板渲染两步操作:
1. 后端修改:获取关联产品并传递到模板
修改ps_shoppingcart模块的AJAX控制器,在模态框刷新时获取购物车商品的关联产品:
- 打开文件:
modules/ps_shoppingcart/controllers/front/ajax.php - 找到
refresh方法(处理购物车模态框刷新请求的核心方法),在方法末尾、return $this->renderAjax()之前,添加以下代码:
// 获取购物车中所有商品 $cartProducts = $this->context->cart->getProducts(); $accessories = []; foreach ($cartProducts as $cartProduct) { // 初始化当前商品对象 $product = new Product($cartProduct['id_product'], false, $this->context->language->id); // 获取该商品的原生关联产品 $productAccessories = $product->getAccessories($this->context->language->id); // 去重处理,避免重复显示同一关联产品 foreach ($productAccessories as $accessory) { if (!isset($accessories[$accessory['id_product']])) { $accessories[$accessory['id_product']] = $accessory; } } } // 将关联产品数据赋值给模板变量 $this->context->smarty->assign('cart_accessories', $accessories);
2. 前端修改:在模态框模板中渲染关联产品
修改ps_shoppingcart的模态框模板,添加关联产品的渲染代码:
- 打开文件:
modules/ps_shoppingcart/views/templates/front/shopping-cart-modal.tpl - 在购物车商品列表下方、模态框底部上方的位置,添加以下代码块:
{block name='cart_accessories'} {if $cart_accessories} <div class="cart-accessories-block"> <h4 class="cart-accessories-title">{l s='Recommended Accessories' mod='ps_shoppingcart'}</h4> <div class="row"> {foreach from=$cart_accessories item="product_accessory"} <div class="col-xs-6 col-md-3"> {block name='cart_accessory_miniature'} {include file='catalog/_partials/miniatures/product-related.tpl' product=$product_accessory} {/block} </div> {/foreach} </div> </div> {/if} {/block}
注:可根据主题样式调整HTML结构(如列布局类、容器样式),或修改标题文本为实际需要的内容。
3. 清理缓存
修改模块文件后,必须清除PrestaShop缓存:
- 进入后台:高级参数 > 性能
- 点击"清除缓存"按钮,或手动删除
var/cache目录下的所有文件
完成以上操作后,用户打开购物车模态框时,系统会自动加载并展示购物车中所有商品的关联产品。
内容的提问来源于stack exchange,提问作者ArDiEm
相关产品推荐
相关产品推荐

