You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在OpenCart Journal模板的商品网格中显示批量订购折扣价?

解决OpenCart+Journal模板商品网格显示最低折扣价的问题

嘿,正好我对OpenCart的MVC这套流程熟得很,给你一步步拆解怎么实现:

第一步:在Category控制器里把折扣数据塞进商品数组里

默认的Category控制器不会把折扣数据传递给模板,所以咱们得先修改catalog/controller/product/category.php

找到处理商品列表的foreach ($results as $result)循环,在循环内部添加获取并处理折扣的代码:

// 获取当前商品的所有批量折扣
$discounts = $this->model_catalog_product->getProductDiscounts($result['product_id']);
$lowest_discount_price = false;

if (!empty($discounts)) {
    // 遍历折扣,找到最低的单价
    $min_price = PHP_INT_MAX;
    foreach ($discounts as $discount) {
        if ($discount['price'] < $min_price) {
            $min_price = $discount['price'];
        }
    }
    // 按照站点的税费、货币设置格式化价格
    $lowest_discount_price = $this->currency->format(
        $this->tax->calculate($min_price, $result['tax_class_id'], $this->config->get('config_tax')),
        $this->session->data['currency']
    );
}

然后把处理好的最低折扣价,加到要传递给模板的$product_data数组里:

$product_data[] = array(
    'product_id'  => $result['product_id'],
    'name'        => $result['name'],
    'price'       => $price, // 保留原有常规价格
    'lowest_discount_price' => $lowest_discount_price, // 新增最低折扣价字段
    // 其他原有字段...
);

第二步:在商品网格模板里替换价格显示逻辑

注意Journal模板会覆盖默认的OpenCart模板,你要找对文件:

  • 若用Journal 3,路径大概是catalog/view/theme/journal3/template/product/category.tpl
  • 也可以直接在Journal后台的模板编辑器里,找到「商品列表/网格」对应的组件修改

找到模板里显示商品价格的代码块,替换成下面的逻辑:

<?php if ($product['lowest_discount_price']) { ?>
    <div class="product-price">
        <!-- 显示最低折扣价 -->
        <span class="special-price"><?php echo $product['lowest_discount_price']; ?></span>
        <!-- 可选:划掉原来的常规价格 -->
        <?php if ($product['price']) { ?>
            <span class="old-price"><?php echo $product['price']; ?></span>
        <?php } ?>
    </div>
<?php } else { ?>
    <!-- 无折扣商品正常显示常规价格 -->
    <div class="product-price">
        <span class="price"><?php echo $product['price']; ?></span>
    </div>
<?php } ?>

第三步:清除缓存避免踩坑

修改完控制器和模板后,一定要去OpenCart后台的「系统 → 维护 → 缓存管理」里清除所有缓存,不然可能看不到修改效果。

额外提醒

如果你的Journal模板有自定义的商品列表模块,可能需要在对应控制器文件里做类似的折扣数据处理,核心逻辑都是:从模型层获取折扣数据→筛选出最低价格→传递给模板显示。

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

火山引擎 最新活动