dede如何调用文章里的第一张图片?
第1篇文章里的引申2里,在没有手工上传缩略图,而是让系统默认提取文章第1张图时,调用缩略图原图即是调用了文章第1张图,但当缩略图是手工上传的,调用缩略图就不是调用文章第1张图了!
【Case one】
在列表页调用文章第1张图,如果文章没有图片,则调用文章缩略图?
(即先调用第1张图片,再调用缩略图)
调用标签依然沿用调用缩略图的标签 {dede:field.picname/}或{dede:field.litpic/}
需要进行3个操作
第1步
打开include/extend.func.php
最下面插入函数,查询的是文章附加表,如需查询图片集什么的,改表名即可 :
function GetFirstImg($arcid){
global $dsql;
$query= "SELECT body FROM `dede_addonarticle` where aid='$arcid'";
$row = $dsql->GetOne($query);
$preg = "/<img.*?src=[\'\"](.+?)[\'\"].*?>/i";
preg_match_all($preg, $row['body'], $match);
//print_r($match);
return $match[1][0];
}
第2步:
修改include/taglib/arclist.lib.php
织梦调用文章内容的时候需用用到litpic字段,需要重新构造此字段,该字段在function lib_arclistDone()函数里面。
找到约475-507行:
if($row['litpic'] == '-' || $row['litpic'] == '')
{
$row['litpic'] = $GLOBALS['cfg_cmspath'].'/images/defaultpic.gif';
}
在上述代码后增加:
if(GetFirstImg($row['id'])!="") {
$row['litpic']=GetFirstImg($row['id']);
}
释义:
添加if(GetFirstImg($row['id'])!="")判断是为了文章无图时仍可选择缩略图显示。
OK后如下图:
第3步:
在模板里依然使用调用缩略图的标签 {dede:filed.litpic/}或[field:litpic/]
这样,当文章有第一张图片即显示第一张图片,如文章没有图片,则调用文章缩略图!
×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
【Case two】
列表页调用缩略图,如没缩略图,则调用文章第1张图,如文章也没图片,则使用系统默认的图片/images/defaultpic.gif
(即先调用缩略图,再调用第1张图片)
但在现实使用中,我们更希望的是,先调用缩略图,如果没有缩略图,则调用文章第1张图片,如果文章也没有图片,则使用默认的图片。
第1步:
如上面的第1步
第2步:
对上面第2步完成后的代码略加修改:
找到约475-507行:
if($row['litpic'] == '-' || $row['litpic'] == '')
{
$row['litpic'] = $GLOBALS['cfg_cmspath'].'/images/defaultpic.gif';
}
将上述代码修改为:
if($row['litpic'] == '-' || $row['litpic'] == ''){
if(GetFirstImg($row['id'])!="") {
$row['litpic']=GetFirstImg($row['id']);
}
else{
$row['litpic'] = $GLOBALS['cfg_cmspath'].'/images/defaultpic.gif';
}
}
第3步:
在模板里依然使用调用缩略图的标签 {dede:filed.litpic/}或[field:litpic/]
×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
由【case one】和【case two】两者会引起矛盾,如果我们采用了【case two】,则幻灯片可能调用到缩略图小图,图片就可能模糊掉,故综合解决矛盾的办法是 采取 【case two】的解决方案,在调用幻灯片时,不调用缩略图小图,而是调用缩略图原图!!