如何在PrestaShop订单确认页显示{$product.availability_message}
解决PrestaShop 1.7订单确认页无法显示库存提示的问题
问题根源
购物车页和订单确认页的产品数据上下文存在差异:订单确认页的$product数组默认不包含quantity_all_versions和availability_message字段——这两个字段是购物车页特有的实时库存相关数据,而订单确认页的商品数据来自已生成的订单记录,并非实时库存查询结果。
解决方案
1. 修改订单确认控制器,补充数据传递
找到 /controllers/front/OrderConfirmationController.php 文件,在 initContent() 方法中,找到遍历订单商品的代码块(通常是 foreach ($order->products as &$product)),添加以下代码补充库存相关字段:
foreach ($order->products as &$product) { // 初始化产品对象 $product_obj = new Product($product['id_product'], false, $this->context->language->id); // 获取所有产品组合的总库存 $product['quantity_all_versions'] = $product_obj->getQuantityTotal(); // 获取对应的库存提示信息 $product['availability_message'] = $product_obj->getAvailability($this->context->language->id); } unset($product); // 解除引用
2. 调整模板的变量访问方式
订单确认页的$product是数组类型(而非购物车页的对象类型),修改order-confirmation-table.tpl中的代码为:
{if (isset($product.quantity_all_versions) && $product.quantity_all_versions < 0)} <div> <span class="red icon--pulsing"></span> <span class="msg">{$product.availability_message}</span> </div> {else} <div> <span class="icon--pulsing"></span> <span class="msg">Available</span> </div> {/if}
3. 清理缓存使修改生效
登录PrestaShop后台,进入高级参数 -> 性能,点击“清除缓存”按钮;或手动删除服务器上var/cache目录下的所有文件,确保控制器和模板的修改被加载。
注意事项
- 修改核心文件前建议做好备份,避免操作失误导致网站异常;
- 如果使用第三方主题,需确认模板文件路径为主题目录下的
order-confirmation-table.tpl(而非默认模板); - 测试时需完成完整下单流程,验证订单确认页的提示是否正常显示。
内容的提问来源于stack exchange,提问作者haze
相关产品推荐
相关产品推荐

