帝国 CMS 最终下载页调用自定义字段内容的方法|下载跳转页读取附加字段
前言
帝国 CMS 下载模型,前台点击下载按钮,会跳转到 /e/DownSys/DownSoft.php 下载中转页面(最终下载页)。 很多站长遇到一个难题:下载跳转页面只能读取标题、下载地址,无法直接调用你新建的自定义字段,例如:软件大小、版本号、更新日志、提取码、网盘密码、简介说明等附加内容。
适配版本:帝国 CMS7.5 / 8.0 ⚠️注意:修改程序文件前务必备份原文件。
原理说明
下载页DownSoft.php只接收 id(信息 ID)和 classid(栏目 ID)两个参数。 系统默认只读取下载地址数据表,不会主动查询主数据表的自定义字段,所以我们需要手动根据信息 ID 去查主表数据。
方案一:直接修改下载中转页(最简单,适合固定需求)
打开文件:/e/DownSys/DownSoft.php
找到代码位置:
$id=(int)$_GET['id'];
$classid=(int)$_GET['classid'];
往下找到查询下载信息代码,在查询下载地址之后,增加一条查询主表自定义字段的 SQL
//读取文章主表数据,news替换成你的模型数据表后缀
$cr=$empire->fetch1("select 版本,网盘密码,softsize from {$dbtbpre}ecms_soft where id='$id' limit 1");
字段说明:
版本、网盘密码、softsize替换成你自己后台创建的自定义字段名称。
之后就可以在页面 HTML 输出位置调用字段:
软件版本:<?=$cr['版本']?> <br>
网盘提取密码:<?=$cr['网盘密码']?> <br>
文件大小:<?=$cr['softsize']?>
### 完整示例片段
$id=(int)$_GET['id'];
$classid=(int)$_GET['classid'];
//原有下载查询代码省略……
//新增:读取主表自定义字段
$cr=$empire->fetch1("select log,password,size from {$dbtbpre}ecms_soft where id='$id' limit 1");
HTML 输出区域:
<div class="down‑info">
<p>更新日志:<?=$cr['log']?></p>
<p>网盘密码:<?=$cr['password']?></p>
</div>
注意数据表后缀:
- 下载模型默认:
ecms_soft - 新闻模型:
ecms_news
你可在后台【数据表与系统模型】查看真实数据表名称。
方案二、新建自定义下载中转页面(推荐!不改动官方原文件)
不修改官方DownSoft.php,自建一个跳转页面,后期升级帝国 CMS 不会覆盖你的修改。
1、新建文件 /e/DownSys/myDown.php
<?php
require('../../class/connect.php');
require('../../class/db_sql.php');
$link=db_connect();
$empire=new mysqlquery();
$id=(int)$_GET['id'];
$classid=(int)$_GET['classid'];
//读取下载主表自定义字段
$r=$empire->fetch1("select title,password,version from {$dbtbpre}ecms_soft where id='$id'");
//读取官方下载地址
$down=$empire->fetch1("select * from {$dbtbpre}enewsdownload where id='$id'");
//获取真实下载链接
$downurl=DoDownUrl($down['downurl'],$down['id'],$down['classid']);
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf‑8">
<title><?=$r['title']?>‑下载</title>
</head>
<body>
<h3><?=$r['title']?></h3>
<p>版本号:<?=$r['version']?></p>
<p>网盘密码:<?=$r['password']?></p>
<a href="<?=$downurl?>">点击下载</a>
</body>
</html>
<?php
db_close();
$empire=null;
?>
2、内容页下载按钮链接改为调用自建页面
<a href="/e/DownSys/myDown.php?id=[!--id--]&classid=[!--classid--]">立即下载</a>
方案三、弹窗下载(不跳转页面,列表 / 内容页直接输出自定义字段)
不使用官方中转下载页,在文章详情页直接输出下载地址 + 自定义字段。 内容模板中使用灵动标签根据 id 读取附加字段:
[e:loop={'select password,version from phome_ecms_soft where id=[!--id--]',1,0,0}]
网盘密码:<?=$bqr['password']?>
版本号:<?=$bqr['version']?>
[/e:loop]
然后直接输出下载链接,绕过 down.php 中转页。
四、常见报错排查清单
- 自定义字段调用空白,没有输出内容
- 核对数据表后缀是否写错;
- 字段名称大小写,帝国 MySQL 字段区分大小写;
- id 参数是否正常传递。
- 下载计数不会增加 自建下载页面,需要加上下载点击计数代码,否则官方下载次数不会累加。
AddDownCount($id,$classid); - 修改后页面 404 文件上传路径错误,文件放到
/e/DownSys/目录下。 - 升级帝国 CMS 修改失效 原因:直接改了官方 DownSoft.php,升级程序覆盖文件。优先推荐自建下载中转页方案
五、下载点击计数完整代码(自建页面需要加上)
//下载次数+1
AddDownCount($id,$classid);
结语
帝国 CMS 原生下载中转页并不会主动加载内容自定义字段。想要在最终下载页显示版本号、网盘密码、更新日志等附加信息,最稳妥的方案就是自建下载跳转页面,既实现自定义字段调用,又不会被帝国 CMS 升级覆盖源码。
本文配套模板、静态源码可前往艾立兹素材库alisucai.com下载