搜索

discuz门户列表随机封面调用方法

发表于:2025-3-12 12:01:16 68
网上找了个方法,但是提示aid错误,所以给修改了一下。亲测可用。
先上效果图:

// 文件路径: source/module/portal/portal_list.php
// 找到原封面判断代码区域(约127-129行),替换为以下内容:

// 配置参数(可自定义)
$cover_config = [
    'cover_count' => 100,          // 封面总数
    'cover_dir' => 'static/cover/', // 封面图存放目录
    'default_cover' => 'static/cover/default.webp', // 后备默认图
    'enable_random' => false,      // 是否启用真随机模式(true=每次刷新随机,false=按aid固定)
    'file_format' => 'webp',       // 图片格式
    'zero_padding' => 3            // 文件名前导零位数(例如3表示001.webp)
];

if (!empty($value['pic'])) {
    // 原图逻辑不变
    $value['pic'] = pic_get($value['pic'], '', $value['thumb'], $value['remote'], 1, 1);
} else {
    // 生成封面索引
    if ($cover_config['enable_random']) {
        $cover_index = mt_rand(0, $cover_config['cover_count'] - 1); // 随机模式
    } else {
        $aid = isset($value['aid']) ? intval($value['aid']) : 0;
        $cover_index = $aid % $cover_config['cover_count']; // 固定分配模式
    }

    // 格式化文件名(例如补零为001.webp)
    $cover_filename = str_pad($cover_index, $cover_config['zero_padding'], '0', STR_PAD_LEFT);
    $cover_path = $cover_config['cover_dir'] . $cover_filename . '.' . $cover_config['file_format'];

    // 检查封面是否存在,否则使用默认图
    $value['pic'] = file_exists($cover_path) ? $cover_path : $cover_config['default_cover'];
}
关键功能说明
‌灵活配置‌
通过 $cover_config 可自定义封面数量、路径、文件名规则等参数。
切换 enable_random 为 true 即可启用真随机模式。
‌容错机制‌
自动检查 aid 字段是否存在,并转为整数避免报错。
封面文件不存在时自动回退到 default_cover 默认图。
‌文件名格式化‌
通过 zero_padding 参数支持前导零命名(如 001.webp),需与实际文件名匹配。
部署步骤
‌上传封面图‌
将封面图按规则命名(如 000.webp 至 099.webp)上传至 static/cover/ 目录。
准备一张默认封面图并上传至 static/cover/default.webp。
‌修改代码‌
替换 portal_list.php 中封面判断逻辑为上述代码。
‌清理缓存‌
进入Discuz!后台 → 工具 → 更新缓存,确保修改生效。
收藏
送赞
分享

发表回复

登录后才能评论