5022查看/8回复/收藏

admin

2016-9-11 04:03:04

1#
现在是后半夜z`zz`Z...,昌平在下雨。

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

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

[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="/data/attachment/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]
修复了未上传任何附件时,查询不到附件分表数据导致报错无法显示页面的问题。
8 回帖

wx_sUh6G6V1

2016-12-13 12:59:54

2#
这个貌似 附件有价格  弹出框  点购买附件 不会跳转

admin

2016-12-13 13:58:25

3#
wx_sUh6G6V1 发表于 2016-12-13 12:59
这个貌似 附件有价格  弹出框  点购买附件 不会跳转

是的,这个问题我纠结过很久,如果直接写地址会使价格失效,所以加了弹出框,但和默认的附件调用有所不同。 0.jpg
转载请注明出处。

鱼影

2019-1-16 10:24:50

4#
我只想调用附件的下载地址,按照你这个方法试了,但是不行,如何直接调用附件地址呢?不考虑设置价格和权限,只是直接调用,大师可有办法?

admin

2019-1-16 11:03:59

5#
鱼影 发表于 2019-1-16 10:24
我只想调用附件的下载地址,按照你这个方法试了,但是不行,如何直接调用附件地址呢?不考虑设置价格和权限 ...
  1. <!--{eval $tbid='forum_attachment_'.substr($thread['tid'], -1);}-->
复制代码
  1. <!--{if $tbid}--><!--{eval $downfiles = DB::fetch_all("SELECT * FROM ".DB::table('forum_attachment_'.$tbid.'')." WHERE `tid`= $_G[tid] AND `isimage`=0;");}--><!--{/if}-->
  2. <!--{loop $files $file}-->{$file['attachment']}<!--{/loop}-->
复制代码
转载请注明出处。

鱼影

2019-1-16 12:04:22

6#

$downfiles 调用出来,我看下面都没用呢?下面那loop是做啥的?我不需要做列表,只需要一个下载链接一个帖子我只有一个压缩包,如果采用href链接,后面的地址要怎么写?谢谢!!

admin

2019-1-16 12:52:38

7#
鱼影 发表于 2019-1-16 12:04
$downfiles 调用出来,我看下面都没用呢?下面那loop是做啥的?我不需要做列表,只需要一个下载链接一个 ...
查询出来的是附件份表数据数组,loop为了兼顾多附件时能够列出来。
attachment字段为附件地址,如果有数据,按查询代码会显示出来路径。
在未使用远程附件的情况下:
href="data/attachment/forum/{$file['attachment']}"
如果不知道loop、不知道数据字段,建议不要用这个方法,用默认的方式比较稳妥。
转载请注明出处。

鱼影

2019-1-16 14:01:44

8#
admin 发表于 2019-1-16 12:52
查询出来的是附件份表数据数组,loop为了兼顾多附件时能够列出来。
attachment字段为附件地址,如果有数据 ...

这个地址我试了不行,如果调用图片是可以的,上传的附件文件是被加密了,所以存储在attachment里的实际上存的是一个后缀为attach的文件,但是这个文件下载会报错

鱼影

2019-1-16 14:19:24

9#
鱼影 发表于 2019-1-16 14:01
这个地址我试了不行,如果调用图片是可以的,上传的附件文件是被加密了,所以存储在attachment里的实际上 ...

我知道怎么回事了,只能用rar格式,谢谢!
您需要登录后才可以回帖 登录 | 注册
高级模式