discuz 帖内单独调用附件 [复制链接]

moqu8 2018-6-13

5 0
之前模板下载内容页图片幻灯图片用的是默认代码,因为只能用一处,弊端是每次上传模板时,图片不能在帖子中显示,但为了设置封面,每次还要先插入图片,设置好封面再把插入帖内的图去掉,很烦。

今天认真的琢磨了下,现在写出帖内调用本帖所有图片附件。

[tem]帖内所有图片附件[/tem]
  1. <!--{eval $tbid = DB::result(DB::query("SELECT tableid FROM ".DB::table('forum_attachment')." WHERE `tid`= $_G[tid]"));}-->
  2. <!--{if $tbid}-->
  3. <!--{eval $cover = DB::fetch_all("SELECT attachment FROM ".DB::table('forum_attachment_'.$tbid.'')." WHERE `tid`= $_G[tid] AND `isimage`=1;");}-->
  4. <!--{/if}-->
  5. <!--{loop $cover $thecover}-->
  6. <!--{if $thecover['attachment']}-->
  7. <li><img src="/upload/forum/$thecover['attachment']" alt="<!--{if $thecover['description']}-->$thecover['description']<!--{else}--><!--{$_G[forum_thread][subject]}--><!--{/if}-->"/></li>
  8. <!--{/loop}-->
  9. <!--{else}-->
  10. <img src="$_G['style'][styleimgdir]/down/images/nopic.jpg" alt="暂无图片附件"/>
  11. <!--{/if}-->
复制代码
思路是,用本帖的tid查询附件分表后缀tableid,再拿获取到的tableid去查询附件地址,加上条件`isimage`=1,即只要图片附件。
熬夜写的东西有些混乱,先这样吧。

[tem]更新 20160922[/tem]
非图附件的调用,之前一直有点bug,现在基本解决,贴上代码:
帖内附件只能显示在帖子正文区内,这点对于改动较大的模板就不够灵活,比如我想要放在帖子的头上。。。

贴上调用非图附件的方法和上面调用图片的道理是一样的,只是类型来区分。
  1. <!--{if $tbid}-->
  2. <!--{eval $downfiles = DB::fetch_all("SELECT * FROM ".DB::table('forum_attachment_'.$tbid.'')." WHERE `tid`= $_G[tid] AND `isimage`=0;");}-->
  3. <!--{/if}-->
  4. <!--{if $downfiles}-->
  5. <!--{loop $downfiles $downfile}-->
  6. <li>
  7. <!--{if $downfile['price']}-->
  8. <a href="forum.php?mod=misc&action=attachpay&aid=$downfile['aid']&tid=$_G['tid']" title="<!--{if $downfile['description']}-->$downfile['description']<!--{else}--><!--{$_G[forum_thread][subject]}--><!--{/if}-->" class="yanshil" onclick="showWindow('attachpay', this.href)"/><i class="fa fa-cloud-download fa-fw"></i>下载地址</a>
  9. <!--{else}-->
  10. <a href="http://file.cmsbj.cn/cmsbj_file/forum/<!--{$downfile['attachment']}-->" title="<!--{if $downfile['description']}-->$downfile['description']<!--{else}--><!--{$_G[forum_thread][subject]}--><!--{/if}-->" class="yanshil"/><i class="fa fa-cloud-download fa-fw"></i>下载地址</a>
  11. <!--{/if}-->
  12. <p><!--{$downfile['filename']}--></p>
  13. <p>下载权限:<!--{$downfile['readperm']}-->,价格:<!--{$downfile['price']}--> <!--{$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][1]][unit]}{$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][1]][title]}--></p>
  14. </li>
  15. <!--{/loop}-->
  16. <!--{else}-->
  17. <div class="down-warning"><i class="fa fa-warning fa-fw"></i> 附件未上传或丢失!</div>
  18. <!--{/if}-->
复制代码

以上是一段实例,分解来说,其中,
  1. <!--{eval $downfiles = DB::fetch_all("SELECT * FROM ".DB::table('forum_attachment_'.$tbid.'')." WHERE `tid`= $_G[tid] AND `isimage`=0;");}-->
复制代码
这一段是在获取到$tbid之后才可以使用的,与调用图片附件不同的是isimage`=0,$tbid获取方法,上面有,再贴一下:
  1. <!--{eval $tbid = DB::result(DB::query("SELECT tableid FROM ".DB::table('forum_attachment')." WHERE `tid`= $_G[tid]"));}-->
复制代码

接下来,第一层判断开始,若存在非图附件
  1. <!--{if $downfiles}-->
复制代码
loop开始
  1. <!--{loop $downfiles $downfile}-->
复制代码
接着,loop里做第二层判断,如果附件有价格
  1. <!--{if $downfile['price']}-->
  2. <a 
  3. href="forum.php?mod=misc&action=attachpay&aid=$downfile['aid']&tid=$_G['tid']"
  4. title="<!--{if 
  5. $downfile['description']}-->$downfile['description']<!--{else}--><!--{$_G[forum_thread][subject]}--><!--{/if}-->"
  6. class="yanshil" onclick="showWindow('attachpay', this.href)"/><i 
  7. class="fa fa-cloud-download fa-fw"></i>下载地址</a>
复制代码
否则
  1. <!--{else}-->
  2. <a href="http://file.cmsbj.cn/cmsbj_file/forum/<!--{$downfile['attachment']}-->" title="<!--{if $downfile['description']}-->$downfile['description']<!--{else}--><!--{$_G[forum_thread][subject]}--><!--{/if}-->" class="yanshil"/><i class="fa fa-cloud-download fa-fw"></i>下载地址</a>
  3. <!--{/if}-->
复制代码
这第二层判断的是,如果有价格,使用弹出购买链接,否则直接显示附件真实地址。
接下来的下载权限什么的都是表里的字段,直接调用即可。
loop结束
  1. <!--{/loop}-->
复制代码

到了第一层判断的否则,即若无非图附件
  1. <!--{else}-->
  2. <div class="down-warning"><i class="fa fa-warning fa-fw"></i> 附件未上传或丢失!</div>
  3. <!--{/if}-->
复制代码
这个else是个点缀,可以直接<!--{/if}-->,只是无非图附件时显示空白罢了。

[tem]20161224 更新[/tem]
修复了未上传任何附件时,查询不到附件分表数据导致报错无法显示页面的问题。
最新回复 (0)
返回
支持中心
邮箱:winkill2012@qqcom
新站优化中!部分功能尚未完善,敬请谅解!
支持中心