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

如何在OpenCart 3的标准featured精选模块中展示商品选项

OpenCart 3 featured模块商品选项展示故障排查与修复方案

常见未生效原因

  • 缓存未清理:OpenCart 3默认开启twig模板缓存、modification修改缓存以及数据缓存,修改文件后未清缓存会导致旧代码仍在运行
  • 控制器查询逻辑错误:商品选项关联查询时未过滤有效选项,或者未关联product_option_value表获取选项值,导致返回的options数组为空或结构错误
  • modification文件修改规则错误:modification目录是OCMOD修改的自动生成目录,直接修改该目录下的文件会在下次刷新修改缓存后被覆盖,无效修改自然不会生效
  • 模板变量调用错误:twig模板中调用选项变量时层级错误,或者循环时未判断选项是否存在,导致渲染失败
  • 商品后台配置问题:对应精选商品未设置启用状态的单选类型商品选项,或者选项库存不足且开启了库存校验

修复步骤

1. 控制器代码修正

直接修改原控制器文件catalog/controller/extension/module/featured.php,在获取产品数据的循环内插入以下查询逻辑:

// 仅筛选启用状态的单选类型商品选项
$product_options = $this->model_catalog_product->getProductOptions($product['product_id']);
$filter_options = [];
foreach ($product_options as $product_option) {
    if ($product_option['type'] == 'radio' && $product_option['status']) {
        $option_values = [];
        foreach ($product_option['product_option_value'] as $option_value) {
            // 过滤库存不足的选项(按需保留判断)
            if ($option_value['quantity'] > 0 || !$this->config->get('config_stock_checkout')) {
                $option_values[] = [
                    'product_option_value_id' => $option_value['product_option_value_id'],
                    'name' => $option_value['name'],
                    'price' => $this->currency->format($this->tax->calculate($option_value['price'], $product['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']),
                    'price_prefix' => $option_value['price_prefix']
                ];
            }
        }
        if (!empty($option_values)) {
            $filter_options[] = [
                'product_option_id' => $product_option['product_option_id'],
                'name' => $product_option['name'],
                'required' => $product_option['required'],
                'option_values' => $option_values
            ];
        }
    }
}
// 写入产品数组
$data['products'][$key]['options'] = $filter_options;

如果使用OCMOD修改,需要将上述逻辑写入xml补丁的替换规则中,禁止直接修改modification目录下的生成文件。

2. 模板代码修正

在template/extension/module/featured.twig的商品卡片循环内加入渲染逻辑,先判断选项是否存在避免报错:

{% if product.options %}
<div class="product-options mt-2 mb-2">
    {% for option in product.options %}
    <div class="form-group">
        <label class="control-label">{{ option.name }} {% if option.required %}<span class="text-danger">*</span>{% endif %}</label>
        <div class="radio-list">
            {% for value in option.option_values %}
            <div class="radio">
                <label>
                    <input type="radio" name="option[{{ option.product_option_id }}]" value="{{ value.product_option_value_id }}" {% if loop.first %}checked{% endif %}>
                    {{ value.name }} {% if value.price %}<small>({{ value.price_prefix }}{{ value.price }})</small>{% endif %}
                </label>
            </div>
            {% endfor %}
        </div>
    </div>
    {% endfor %}
</div>
{% endif %}

3. 缓存清理操作

修改完成后进入后台依次执行三个操作:

  1. 点击右上角齿轮图标,清空模板缓存
  2. 进入「扩展 - 扩展安装 - OCMOD」,点击右上角刷新按钮,清空修改缓存
  3. 进入「系统 - 维护 - 缓存管理」,清空所有数据缓存

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 21:42:00