DedeCMS 的下载功能主要由两部分组成:
- 后端管理:在网站后台添加、编辑和管理下载内容。
- 前端展示:用户在前台看到下载列表、下载页面,并执行下载操作。
下面我将从这两个方面,并结合代码示例,为你详细讲解。
后台管理:添加下载内容
这是所有工作的起点,你需要在后台添加下载资源的详细信息。
-
登录后台:使用管理员账号登录你的 DedeCMS 后台。
-
进入栏目管理:
- 在左侧菜单栏找到 【核心】 -> 【栏目管理】。
- 你需要为下载内容创建一个栏目,点击 【增加顶级栏目】。
- 栏目名称:填写一个清晰的名称,软件下载”、“资料文档”。
- 栏目类型:选择 【普通栏目】。
- 模型:这是最关键的一步! 你需要选择一个专门用于下载内容的模型,默认情况下,DedeCMS 可能没有现成的,你可以:
- 使用默认的“文章模型”:最简单,但字段有限。
- 创建新的“下载模型”:功能最强大,可以自定义字段(如软件版本、授权方式、文件大小、MD5值等)。
- 列表选项:勾选 【列表生成】 和 【下载页】,这样系统会自动生成下载列表页和下载详情页。
- 保存:点击“保存”按钮创建栏目。
-
添加下载内容:
- 创建好栏目后,进入该栏目,点击 【增加文档】。
- 填写基本信息:
- 填写下载资源的标题。
- TAG标签:填写相关标签,便于搜索和分类。
- 缩略图:上传一张预览图。
- 简介:填写资源的简要说明。
- 填写下载地址(核心):
- 在编辑器下方,找到 【附件上传】 或 【远程地址】 的区域。
- 上传附件(推荐)
- 点击“浏览”按钮,选择你本地的文件(如 .zip, .rar, .pdf, .exe 等)。
- 上传成功后,文件会出现在附件列表中。
- 在正文中,你可以将光标定位到想插入下载链接的地方,然后点击附件列表中的文件名,系统会自动生成一个下载链接的代码。
- 使用远程地址
- 如果你的文件存放在其他服务器上,可以直接填写文件的完整 URL 地址(
http://example.com/files/soft.zip)。 - 填写后,同样可以在正文中插入这个链接。
- 如果你的文件存放在其他服务器上,可以直接填写文件的完整 URL 地址(
- (可选)使用自定义模型字段:如果你之前创建了“下载模型”,在这里你就可以填写像“版本号”、“文件大小”、“授权方式”等额外信息。
- 提交:点击“发布”或“保存”按钮,文章就添加成功了。
前端展示:下载页面和列表页
后,DedeCMS 会根据模板自动生成前台页面,我们需要了解这些页面是如何工作的。
下载列表页
这个页面显示一个栏目下的所有下载资源列表。
- 默认模板文件:
/templets/default/list_article.htm这个是默认的文章列表模板,如果你为你的下载栏目设置了独立的模板,它会使用你设置的模板。
- 核心标签:
{dede:arclist}:这是用来循环输出文章列表的核心标签。- 常用属性:
typeid: 指定要获取的栏目ID。typeid='3'表示获取ID为3的栏目下的文章。row: 显示的文章数量。row='10'显示10条。titlelen: 标题长度。titlelen='30'标题最多显示30个字符。infolen: 简介(长度。imgwidth/imgheight: 缩略图的宽度和高度。orderby: 排序方式,常用id(按发布时间)、click(按点击量)等。
list_article.htm 示例代码:
{dede:include filename="head.htm"/}
<div class="main">
<div class="left">
<h2>{dede:field.typename/}</h2>
<ul class="dlist">
<!-- 使用 arclist 标签循环输出下载列表 -->
{dede:arclist typeid='3' row='10' titlelen='50' infolen='150'}
<li>
<!-- [field:pic/] 是缩略图,如果没有则不显示 -->
<a href="[field:arcurl/]" title="[field:title/]">
<img src="[field:pic/]" alt="[field:title/]" />
</a>
<div class="dinfo">
<h3><a href="[field:arcurl/]">[field:title/]</a></h3>
<p>[field:info/]...</p>
<!-- [field:pubdate/] 发布时间,[field:click/] 点击量 -->
<span>发布时间:[field:pubdate function="MyDate('Y-m-d',@me)'/] | 点击:[field:click/]</span>
</div>
</li>
{/dede:arclist}
</ul>
<!-- 分页标签 -->
<div class="page">
{dede:pagelist listsize='4' listitem='info,index,end,pre,next,pageno'}
{/dede:pagelist}
</div>
</div>
<!-- 右侧边栏 -->
{dede:include filename="right.htm"/}
</div>
{dede:include filename="footer.htm"/}
下载详情页
用户点击列表中的标题或图片后,会进入这个页面,显示下载资源的完整信息和下载按钮。
- 默认模板文件:
/templets/default/article_article.htm同样,如果你设置了独立的详情模板,会优先使用你的模板。
- 核心标签:
{dede:field.*}:用于输出当前文章的各个字段。- 常用字段:
{dede:field.title/}。{dede:field.body/}:文章正文内容(包含你之前插入的下载链接)。{dede:field.pubdate/}:发布时间。{dede:field.click/}:点击量。{dede:field.typename/}:所属栏目名称。
article_article.htm 示例代码:
{dede:include filename="head.htm"/}
<div class="main">
<div class="left">
<div class="article">
<h1>{dede:field.title/}</h1>
<div class="article-info">
<span>发布时间:{dede:field.pubdate function="MyDate('Y-m-d H:i:s',@me)"/}</span>
<span>来源:{dede:field.source/}</span>
<span>作者:{dede:field.writer/}</span>
<span>点击:<script src="{dede:field name='phpurl'/}/count.php?view=yes&aid={dede:field.aid/}&mid={dede:field.mid/}" type='text/javascript' language="javascript"></script> 次</span>
</div>
<!-- 文章正文,这里包含了下载链接 -->
<div class="article-content">
{dede:field.body/}
</div>
<!-- 下载页专用标签,用于显示下载地址列表 -->
<!-- 如果你的模型是“文章模型”,下载信息就在 {dede:field.body/} 里 -->
<!-- 如果你的模型是“下载模型”,你可能需要用 {dede:field.字段名/} 来单独显示 -->
<!-- 如果你有一个叫 'softurl' 的字段存下载地址: -->
<!-- <div class="download-box">
<strong>官方下载:</strong>
<a href="{dede:field.softurl/}" target="_blank">点击下载</a>
</div> -->
</div>
<!-- 上一篇/下一篇 -->
<div class="prenext">
<p>上一篇:{dede:prenext get='pre'/}</p>
<p>下一篇:{dede:prenext get='next'/}</p>
</div>
</div>
<!-- 右侧边栏 -->
{dede:include filename="right.htm"/}
</div>
{dede:include filename="footer.htm"/}
下载功能的实现原理
当你在前台点击一个下载链接时,DedeCMS 并不会直接提供文件,它有一个中间机制,主要是为了统计下载次数。
-
下载链接的格式: 你在后台插入的下载链接,在前台 HTML 源码中通常是这样的:
<a href="/plus/download.php?open=0&aid=123&cid=1">下载软件.zip</a> -
download.php的作用:- 当用户点击这个链接时,请求会发送到
/plus/download.php这个脚本。 download.php接收到aid(文章ID) 和cid(栏目ID) 等参数。- 它会根据
aid在数据库中找到对应的文章记录。 - 它会读取文章中的附件信息(即你上传的文件路径或远程地址)。
- 最重要的一步:它会将数据库中该文章的
download(下载次数) 字段的值加 1,实现点击统计。 - 它会执行一个“文件下载”的操作,将真实的文件发送给用户的浏览器,这个过程对用户是透明的,用户感觉就像直接点击了文件一样。
- 当用户点击这个链接时,请求会发送到
-
防盗链(可选): 为了防止其他网站直接引用你的下载地址,你可以在
download.php中加入一些判断逻辑,比如检查请求的来源页面(HTTP_REFERER)是否是你自己的网站,如果不是,则拒绝下载。
常见问题与解决方法
-
问题:点击下载没反应,或者直接在浏览器里打开了文件(如图片、PDF、TXT)。
-
原因:浏览器默认可以解析这些文件,所以它会尝试直接显示,而不是下载。
-
解决:
-
最佳方法:将文件压缩成
.zip或.rar格式再上传,浏览器通常会直接下载这类文件。 -
修改
download.php:如果你想让所有文件都强制下载,可以修改/plus/download.php文件,找到类似header("Location:$link");的代码,将其替换为强制下载的代码。// 在 download.php 中,找到输出文件的地方,替换为以下代码 $file_name = $row['filename']; // 获取文件名 $file_path = $row['filepath']; // 获取文件路径 // 设置头信息,强制下载 header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="'.basename($file_name).'"'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($file_path)); flush(); // Flush system output buffer readfile($file_path); // 读取文件并输出 exit;
-
-
-
问题:下载列表页或详情页不显示内容。
- 原因:
- 栏目ID (
typeid) 错误。 - 模板标签使用错误。
- 文章被归入了回收站或未审核。
- 栏目ID (
- 解决:检查以上几点,确保文章状态为“已审核”且未在回收站。
- 原因:
-
问题:想自定义下载页面的样式。
- 解决:不要直接修改默认的
list_article.htm和article_article.htm,最好在后台 【模板】 -> 【模板管理】 中,为你自己的下载栏目 “选择模板”,然后复制一份默认模板进行修改,这样在系统升级时,你的自定义模板不会被覆盖。
- 解决:不要直接修改默认的
希望这份详细的指南能帮助你完全理解和使用 DedeCMS 的下载功能!
