Discuz统一全站附件下载页-Discuz教程下载

Discuz统一全站附件下载页

来自版块: Discuz教程发表于: 2020-4-16 13:35:44
20325
0
如本资源下载地址失效,请点击此处进行反馈
开通本站Svip会员,全站资源免费下
首先,我们要确定的一点是,当点击附件的下载连接时,跳转到一个统一的下载页面。那么前期的准备就需要有一个单独的下载页面和修改下载连接,让下载的连接先跳转到下载页面,再从下载页面的下载按钮连接附件的下载地址。

第一步,先在根目录创建down.php.用 include template('');的方式,调取模板里的html文件,(根目录创建 .php 文件调用插件/模板 文件)。这样是为了方便去写下载页面的HTML结构和样式。当有了这个down的html页面,我们就可以在 Discuzcode.htm 里先将主题内容页原本附件下载的地址,改为这个down.php的地址。
但是这里需要特别注明的几个点,因为我们在down.php中,仍然需要tid、aid这些值,否则无法获取到是从哪个帖子进入的下载页面,以及这个页面是否真的存在aid(aid是附件ID),所以地址栏的地址可以参考
  1. href="down.php?mod=attachment{$is_archive}&tid=$attach[tid]&aid=$aidencode"
复制代码
接下来,我们回到down.php。因为我们是从主题内容页点击了上面的连接进入的down.php。所以我们在地址栏中,就获取到了当前主题内容页的tid和aid。那么接下来,我们先需要对这个tid的真实性进行判断。通过地址栏里的tid,我们再去查询forum_thread中是否真实存在这个tid。也就是
  1. if($_GET[tid]){
  2.                 $Down_Tid = DB::result_first("select tid from ".DB::table("forum_thread")." where tid=$_GET[tid]");
  3.         }
复制代码
这里加if的主要原因就是考虑到当我们通过href="down.php?mod=attachment{$is_archive}&tid=$attach[tid]&aid=$aidencode" 访问时,手动修改不存在的tid或者为空的值,系统会因为 where tid=$_GET[tid]" 找不到而报错。
至此,我们已经获得到了进入down.php的tid是真实存在的。那么接下来,我们就可以通过用这个tid,来对表forum_thread进行查询,比如调取主题标题等。
因为$Down_Tid 只是一个用来判断入口的tid是否存在的,并不能直接它来获取表forum_thread的信息,所以,我们还需要再用$Down_Tid再查询一次forum_thread。这个时候,条件里就可以用 where tid = $Down_Tid了,还要加一个 isimage= 0 ,这是为了防止获取到图片附件。当然,所有通过$Down_Tid 来查询的语句,外面也要给个if。否则当找不到这个tid的时候,依然会报错。
既然已经有了这个刚查询出已经存在的tid。我们就可以先来查询aid,用刚才的tid再去查forum_attachment 和 forum_attachment_0到forum_attachment_9,我们就可以获取到附件的信息了。和上面的逻辑是一样,我们第一考虑的是确保都在if内,保证这个查询是真实存在的并且是有aid的。
再然后我们可以随便定义一个变量,来获取从主题内容页进入的地址栏里的aid。比如
  1. $aidencode = $_GET['aid'];
复制代码
这样,我们就获得到了一个完整的附件下载地址。

最后,我们再把discuzcode.htm里 默认的附件下载地址放进来,就可以通过正确的aid获取到附件的下载地址了。

当我们在写htm时,一定要常用if判断,因为我们要考虑到地址栏中的tid、aid是可以通过手动修改来访问的。
比如我吧:
  1. down.php?mod=attachment&tid=144&aid=Mjc4fGMwZGY
复制代码
强行修改为
  1. down.php?mod=attachment&tid=&aid=Mjc4fGMwZGY //这里的tid为空
复制代码
或者
  1. down.php?mod=attachment&tid=111111111111111111111&aid=Mjc4fGMwZGY //这里的tid不存在
复制代码
或者
  1. down.php?mod=attachment&tid=1&aid=Mjc4fGMwZGY //这里的tid没有附件
复制代码

当以以上三种地址访问时,都会因为查询不到get来的tid而报错。这就是为什么需要在php中层层相套if的原因了。
1.gif

全部评论 0

您需要登录后才可以回帖 立即登录
登录
0
0
0
返回顶部