帝国CMS的GetFpicToTpic函数取第几张图片作为缩略图始终是第二图

作者:凡帝网 分类:帝国CMS教程 发布时间:2026-07-28 浏览量:0
原因
$num 被放在了 do_dblimit 的 limit 位置,1 被放在了 offset 位置。 语义变成"固定跳过1张,取 N-1 张"。但本意应该是"跳过 N-1 张,取1张"——即 do_dblimit(1, num-1)。
如果传入 $num=3 是想取第3张,expected SQL 应该是 LIMIT 2, 1(跳2条,取1条),实际得到的是 LIMIT 1, 2(跳1条,取2条->fetch1只拿第1个),所以返回了第2张。
帝国 CMS 原生的写法,$num 默认传 1(取第1张)时没问题,但传 >1 想取第 N 张时逻辑就对不上了。

也就是说,原版代码取第1张图不会有问题,但只是数字大于1就始终都是取的第2图作为缩略图了

另外这里的第几张图,不是在编辑器里的顺序,而是图片上传的顺序
//取第几张图片
function GetFpicToTpic($classid,$id,$num=1,$getfirsttitlespic=0,$swidth=0,$sheight=0,$fstb=1){
	global $empire,$dbtbpre,$public_r,$class_r,$loginin,$logininid;
	$classid=(int)$classid;
	$id=(int)$id;
	$getfirsttitlespic=(int)$getfirsttitlespic;
	$swidth=(int)$swidth;
	$sheight=(int)$sheight;
	$add['filepass']=(int)$add['filepass'];
	$pubid=ReturnInfoPubid($classid,$id);
	$num=(int)$num;
	$num=$num-1;
	if($num<0)
	{
		return '';
	}
	$logininid=(int)$logininid;
	$loginin=RepPostVar($loginin);
	$picr=$empire->fetch1("select fileid,filename,path,id,classid,no,fpath from {$dbtbpre}enewsfile_{$fstb} where pubid='$pubid' and type=1 order by fileid".do_dblimit(1,$num)); // do_dblimit(1,$num))原版传参反了。fhqdgv.cn
	$firsttitlepic="";
	if($picr['fileid'])
	{
		$rpath=$picr['path']?$picr['path'].'/':$picr['path'];
		$fspath=ReturnFileSavePath($picr['classid'],$picr['fpath']);
		if($getfirsttitlespic==1&&$swidth&&$sheight)//缩略图
		{
			$path=eReturnEcmsMainPortPath().$fspath['filepath'].$rpath;//moreport
			$yname=$path.$picr['filename'];
			$filetype=GetFiletype($picr['filename']);
			$insertfile=substr($picr['filename'],0,strlen($picr['filename'])-strlen($filetype)).time();
			$name=$path."small".$insertfile;
			$sfiler=GetMySmallImg($classid,$picr['no'],$insertfile,$picr['path'],$yname,$swidth,$sheight,$name,$id,$add['filepass'],$logininid,$loginin,0,$fstb);
			$firsttitlepic=$fspath['fileurl'].$rpath."small".$insertfile.$sfiler['filetype'];
		}
		else
		{
			$firsttitlepic=$fspath['fileurl'].$rpath.$picr['filename'];
		}
	}
	return $firsttitlepic;
}
下一篇:返回列表

微信扫码咨询

微信二维码