Hi 您目前尚未登陆
请选择 进入手机版 | 继续访问电脑版

Admin

送给“上官雨伦”:做教师的人自己便当具有良好的教养,随人、随时、随地,都有适当的举止与礼貌。受过教育而无教养的人是一堆一文不值的垃圾。
演示站完全是自己仿的!所有帖子是胡乱发的,大家请无视!插件和模板都下载自垃圾的,没偷没抢!!!

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

2020-04-25 18:49:09 发布

Discuz /[教程] 68 0 0

adminWriter

来自中国,不是教师

47

主题

48

帖子

48

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
48
发表于 2020-4-25 18:49:09 | 显示全部楼层 |阅读模式
首先,我们要确定的一点是,当点击附件的下载连接时,跳转到一个统一的下载页面。那么前期的准备就需要有一个单独的下载页面和修改下载连接,让下载的连接先跳转到下载页面,再从下载页面的下载按钮连接附件的下载地址。

第一步,先在根目录创建down.php.用 include template('');的方式,调取模板里的html文件,(根目录创建 .php 文件调用插件/模板 文件)。这样是为了方便去写下载页面的HTML结构和样式。当有了这个down的html页面,我们就可以在 discuzcode.htm 里先将主题内容页原本附件下载的地址,改为这个down.php的地址。
但是这里需要特别注明的几个点,因为我们在down.php中,仍然需要tid、aid这些值,否则无法获取到是从哪个帖子进入的下载页面,以及这个页面是否真的存在aid(aid是附件ID),所以地址栏的地址可以参考
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是可以通过手动修改来访问的。比如我吧:
down.php?mod=attachment&tid=144&aid=Mjc4fGMwZGY

强行修改为
down.php?mod=attachment&tid=&aid=Mjc4fGMwZGY //这里的tid为空

或者
down.php?mod=attachment&tid=111111111111111111111&aid=Mjc4fGMwZGY //这里的tid不存在

或者
down.php?mod=attachment&tid=1&aid=Mjc4fGMwZGY //这里的tid没有附件

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

214501v7ke4h77e4aa74ck.gif

0 使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

当前话题还没有评论,来做第一个评论的人吧 ♪(^∇^*)