密通学院

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6820|回复: 0

[开发] Discuz后台批量重建主题封面功能修改

[复制链接]

282

主题

27

回帖

8万

铜板

超级版主

Rank: 8Rank: 8

积分
89153
QQ
发表于 2020-12-10 09:08:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我们知道,dz默认的主题中如果发布图片2个以上的图片是在其中选择一张(据观察是取图片的宽度最大的作为封面)作为主题的封面,以供前台相应调用,对于某些情况,我们可能需要特定某个图片作为封面,显然默认的就不能实现这个效果,下面做出修改,实现第一张作为主题封面。
1、找到admincp_counter.php,搜索
  1. } elseif(submitcheck('setthreadcover', 1)) {
  2.         $fid = intval($_GET['fid']);
  3.         $allthread = intval($_GET['allthread']);
  4.         if(empty($fid)) {
  5.                 cpmsg('counter_thread_cover_fiderror', 'action=counter', 'error');
  6.         }
  7.         $nextlink = "action=counter¤t=$next&pertask=$pertask&setthreadcover=yes&fid=$fid&allthread=$allthread";
  8.         $starttime = strtotime($_GET['starttime']);
  9.         $endtime = strtotime($_GET['endtime']);
  10.         $timesql = '';
  11.         if($starttime) {
  12.                 $timesql .= " AND lastpost > $starttime";
  13.                 $nextlink .= '&starttime='.$_GET['starttime'];
  14.         }
  15.         if($endtime) {
  16.                 $timesql .= " AND lastpost < $endtime";
  17.                 $nextlink .= '&endtime='.$_GET['endtime'];
  18.         }
  19.         $processed = 0;
  20.         $foruminfo = C::t('forum_forum')->fetch_info_by_fid($fid);
  21.         if(empty($foruminfo['picstyle'])) {
  22.                 cpmsg('counter_thread_cover_fidnopicstyle', 'action=counter', 'error');
  23.         }
  24.         if($_G['setting']['forumpicstyle']) {
  25.                 $_G['setting']['forumpicstyle'] = dunserialize($_G['setting']['forumpicstyle']);
  26.                 empty($_G['setting']['forumpicstyle']['thumbwidth']) && $_G['setting']['forumpicstyle']['thumbwidth'] = 214;
  27.                 empty($_G['setting']['forumpicstyle']['thumbheight']) && $_G['setting']['forumpicstyle']['thumbheight'] = 160;
  28.         } else {
  29.                 $_G['setting']['forumpicstyle'] = array('thumbwidth' => 214, 'thumbheight' => 160);
  30.         }
  31.         require_once libfile('function/post');
  32.         $coversql = empty($allthread) ? 'AND cover=\'0\'' : '';
  33.         $cover = empty($allthread) ? 0 : null;
  34.         $_G['forum']['ismoderator'] = 1;
  35.         foreach(C::t('forum_thread')->fetch_all_by_fid_cover_lastpost($fid, $cover, $starttime, $endtime, $current, $pertask) as $thread) {
  36.                 $processed = 1;
  37.                 $pid = C::t('forum_post')->fetch_threadpost_by_tid_invisible($thread['tid'], 0);
  38.                 $pid = $pid['pid'];
  39.         //setthreadcover($pid);
复制代码
在下面添加如下代码:
  1. $attachs = C::t('forum_attachment_n')->fetch_all_by_id('pid:' . $pid, 'pid', $pid, 'aid asc', true);
  2.         $attachs = array_values($attachs);
  3.         if($attachs[0]) {
  4.             setthreadcover($pid, 0, $attachs[0]['aid']);
  5.         } else {
  6.             setthreadcover($pid);
  7.         }
复制代码
上传更新即可。
原理:系统默认调用的是setthreadcover($pid),而我们改成根据pid获取第一个图片附件的aid,然后传入setthreadcover函数,这个函数的第三个参数是决定用哪个附件来做封面的,如果为空则根据图片width来获取了。
如果您有业务需求,可以和我联系:
回复

使用道具 举报

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

本版积分规则

首页|Archiver|手机版|小黑屋|密通学院:专业网络营销服务商

GMT+8, 2024-12-22 13:17 , Processed in 0.128907 second(s), 24 queries QQ

Powered by XMT Inc. © 2015-2025 ArrayV1.0 豫ICP备17022382号

系统运营:密城通 豫公网安备 41018302000212 号

快速回复 返回顶部 返回列表