6851查看/9回复/收藏

z123tang

2017-1-12 09:59:59

1#
哥们,按照你的教程http://www.cmsbj.cn/dzdm/t256.html实现了帖子列表页调用封面了,可是调用的是帖子的最后一张图片 也就是倒序了。。。修改哪个代码支持正序调用封面啊。。。。用的是
  • $threada= C::t('forum_attachment')->fetch_all_by_id('tid', $thread['tid'], 'aid');
  • $threadaid = reset($threada);
  • $threadpic = C::t('forum_attachment_n')->fetch_by_aid_uid($threadaid['tableid'], $threadaid['aid'], $thread['authorid']);
  • $thread['pic'] = $threadpic['attachment'];
  • $thread['pic']这个只能调用最后一张图片 怎么调用正序?谢谢了


9 回帖

admin

2017-1-12 19:06:33

来自 5#
z123tang 发表于 2017-1-12 17:07
话说这个是哪个文件控制倒序的。。。。

有控制,/source/class/table/table_forum_attachment.php,把
  1. $orderby = 'ORDER BY '.DB::order($orderby, 'DESC');
复制代码
改为
  1. $orderby = 'ORDER BY '.DB::order($orderby, 'ASC');
复制代码

----------下面话痨帖,慎入---------
但是总体来说我不喜欢这个方式,感觉不自在,这个是1年前转载的,我只用过一次。
我现在的办法是不修改系统文件:
在forumdisplay_list.htm的列表<!--{loop $_G['forum_threadlist'] $key $thread}-->之内,可以直接获取到每篇帖子的tid,即$thread[tid],根据它直接在模板里上述loop内添加:
  1. <!--{eval $tbids = DB::result_first("select tableid from ".DB::table("forum_attachment")." WHERE `tid` = $thread[tid]");}-->
  2. <!--{if $tbids}-->
  3. <!--{eval $tpics = DB::fetch_all("select remote,attachment FROM ".DB::table('forum_attachment_'.$tbids.'')." WHERE `isimage` = 1 ORDER BY `dateline` ASC LIMIT 0,1");}-->
  4. <!--{loop $tpics $tpic}-->
  5. <!--{if $tpic['remote'] = 1}-->
  6. <img src="data/attachment/forum/$tpic['attachment']" width="100" height="100">
  7. <!--{else}-->
  8. <img src="远程附件目录/forum/$tpic['attachment']" width="100" height="100">
  9. <!--{/if}-->
  10. <!--{/loop}-->
  11. <!--{/if}-->
复制代码
为什么这么写?因为我更熟悉这种方式,解释下你就知道了。
说明:
其中
  1. <!--{eval $tbids = DB::result_first("select tableid from
  2. ".DB::table("forum_attachment")." WHERE `tid` = $thread[tid]");}-->
复制代码
上面这一句是根据每篇帖子的tid来查询pre_forum_attachment表内的分表id(tableid )。
接下来要必须判断的,有附件才有分表,<!--{if $tbids}-->如果分表id存在,才有然后……
  1. <!--{eval $tpics = DB::fetch_all("select remote,attachment FROM ".DB::table('forum_attachment_'.$tbids.'')." WHERE `isimage` = 1 ORDER BY `dateline` ASC LIMIT 0,1");}-->
复制代码
以上根据上面查询到的附件分表id变量可组合成一个实际表,forum_attachment_'.$tbids.',这样可以获取到实际的表名如forum_attachment_1,forum_attachment_2,forum_attachment_3,等等,根据这些表来查是否远程附件字段remote和图片路径attachment,条件是isimage=1即必须是图片附件,排序是按上传时间正序排序,取1张,这样就是调用第一张图的效果啦。
开始loop,没啥可说的,<!--{if $tpic['remote'] = 1}-->是判断如果是本地附件,就用路径<img src="data/attachment/forum/$tpic['attachment']" width="100" height="100">,如果是远程附件,就用路径<img src="远程附件目录/forum/$tpic['attachment']" width="100" height="100">,都给你写全了,你用什么路径看自己情况去掉判断并删除另一个。

再啰嗦下:
1.多图可以修改图片数量limit
2.这里我只查询了remote和attachment两个字段,可以增加字段或者干脆换成*查询所有,<!--{loop $tpics $tpic}-->xxxxxxx<!--{/loop}-->之内使用$tpic['字段名']即可调用数据。
附件分表字段如下:

字段类型默认注释
aidmediumint(8)
附件id
tidmediumint(8)0主题id
pidint(10)0帖子id
uidmediumint(8)0会员id
datelineint(10)0上传时间
filenamevarchar(255)
原文件名
filesizeint(10)0文件大小
attachmentvarchar(255)
服务器路径
remotetinyint(1)0是否远程附件
descriptionvarchar(255)
说明
readpermtinyint(3)0阅读权限
pricesmallint(6)0附件价格
isimagetinyint(1)0是否图片
widthsmallint(6)0附件宽度
thumbtinyint(1)0是否是缩率图
picidmediumint(8)0相册图片ID


本文已被 admin 加入本版索引[ 一些查询与调用 ]2019-07-02 00:34:15

admin

2017-1-12 16:29:56

2#
你不用$thread['pic']
试试用
data/attachment/forum/$thread['attachments']['used']['0']['attachment']
转载请注明出处。

z123tang

2017-1-12 17:03:00

3#
admin 发表于 2017-1-12 16:29
你不用$thread['pic']
试试用
data/attachment/forum/$thread['attachments']['used']['0']['attachment' ...

还是最后一张。。。。

z123tang

2017-1-12 17:07:02

4#
话说这个是哪个文件控制倒序的。。。。

z123tang

2017-1-13 09:12:27

6#
admin 发表于 2017-1-12 19:06
有控制,/source/class/table/table_forum_attachment.php,把
改为

哥们谢谢了,听你这一解释 完全明白了 !

z7454583

2018-11-23 17:14:51

7#
站长你好,按照下面文章的设置发现帖子列表调用的封面图都是其它帖子里的图片,怎么限制调用本帖内的封面图呢?感谢回答。小白一枚求详细指教,感谢(discuz 帖子列表页调用封面图片问题 )

----------下面话痨帖,慎入---------
<!--{eval $tbids = DB::result_first("select tableid from ".DB::table("forum_attachment")." WHERE `tid` = $thread[tid]");}-->
    <!--{if $tbids}-->
    <!--{eval $tpics = DB::fetch_all("select remote,attachment FROM ".DB::table('forum_attachment_'.$tbids.'')." WHERE `isimage` = 1 ORDER BY `dateline` ASC LIMIT 0,1");}-->
    <!--{loop $tpics $tpic}-->
    <!--{if $tpic['remote'] = 1}-->
    <img src="data/attachment/forum/$tpic['attachment']" width="100" height="100">
    <!--{else}-->
    <img src="远程附件目录/forum/$tpic['attachment']" width="100" height="100">
    <!--{/if}-->
    <!--{/loop}-->
    <!--{/if}-->

admin

2018-11-23 18:55:28

8#
z7454583 发表于 2018-11-23 17:14
站长你好,按照下面文章的设置发现帖子列表调用的封面图都是其它帖子里的图片,怎么限制调用本帖内的封面图 ...

<!--{eval $tpics = DB::fetch_all("select remote,attachment FROM ".DB::table('forum_attachment_'.$tbids.'')." WHERE `tid`='$thread[tid]' and `isimage` = 1 ORDER BY `dateline` ASC LIMIT 0,1");}-->
转载请注明出处。

z7454583

2018-11-23 19:34:51

9#

感谢站长,搞定。大牛+

pintar

2019-5-15 23:21:23

10#
贴内有图片 但是封面没图片。。调试出来的地址是上一个帖子的地址。
您需要登录后才可以回帖 登录 | 注册
高级模式