Opencart需求:库存为0时分类及商品页加入购物车按钮显示缺货
完整解决方案:分类页&商品详情页库存为0时按钮显示"Out of Stock"
嘿,我来帮你把这个需求的完整方案梳理清楚,覆盖你提到的分类页,还有商品详情页的场景:
一、分类页(Category Page)修改
1. 后端Controller修改
打开文件 controller/product/category.php,找到 $data['products'][] = array( 这一行,在数组里新增两个字段,把库存数量和库存状态传递给前端:
$data['products'][] = array( // 原有字段保持不变 'quantity' => $result['quantity'], 'stock_status' => $result['stock_status'] );
2. 前端Template修改
打开你当前主题的分类页模板 catalog/view/theme/你的主题名/template/product/category.twig,找到原来的 {{ button_cart }} 代码,替换成以下判断逻辑:
{% if product.quantity > 0 %} {{ button_cart }} {% else %} <button type="button" class="btn btn-default" disabled>{{ product.stock_status }}</button> {% endif %}
如果你不想用系统默认的库存状态文本,想硬编码显示"Out of Stock",可以把
{{ product.stock_status }}改成'Out of Stock'
二、商品详情页(Product Detail Page)修改
1. 后端Controller修改
打开文件 controller/product/product.php,找到 $data['product'] = array( 这一行,确保数组里包含库存数量字段(如果没有就加上):
$data['product'] = array( // 原有字段保持不变 'quantity' => $product_info['quantity'] );
通常这个字段默认已经存在,你可以先检查一下,没有的话再添加。
2. 前端Template修改
打开你当前主题的商品详情页模板 catalog/view/theme/你的主题名/template/product/product.twig,找到"加入购物车"按钮的代码块(一般是 {{ button_cart }} 或者直接的button标签),替换成:
{% if product.quantity > 0 %} {{ button_cart }} {% else %} <button type="button" class="btn btn-default" disabled>Out of Stock</button> {% endif %}
额外注意事项
- 记得把上面的
你的主题名替换成你实际使用的主题文件夹名称,比如默认主题是default - 如果是多语言站点,更推荐用语言变量来实现:在对应语言文件(比如
language/en-gb/product/product.php)里添加$_['text_out_of_stock'] = 'Out of Stock';,然后前端用{{ text_out_of_stock }}代替硬编码文本 - 修改完成后,建议清理OpenCart的缓存(系统->设置->编辑商店->服务器->缓存,点击清除),确保修改生效
内容的提问来源于stack exchange,提问作者VeroN
相关产品推荐
相关产品推荐

