dedecms在列表或首页取得文章首图的功能改进
在网上找过资料,效果不是很满意,第一个是原理说的不对,第二个是后缀写死。
原文大致如下:
当文章缩略图是自动选取文章内第一个图片裁减所得时 他的命名规则是有规律的 比如原文是1.jpg 它对应的缩略图是1******* 后面多了7个随机字符,既然如此,那么删除缩略图字符串最后七位,然后再补上后缀.jpg不就能反向得到文章的一张图片的地址了,于是作如下处理: 修改include/extend.func.php 添加如下代码: //取第一张图地址 function firstimg($str_pic) { $str_sub=substr($str_pic,0,-7).".jpg";//删除缩略图字符串最后七位,然后再补上后缀.jpg return $str_sub; } 然后在模板里循环调用: [field:litpic function=firstimg('@me')/] 直接调用用: {dede:field name=’litpic’ function=”firstimg(@me)”/} 问题解决。
实际上无论上传的图片原名叫什么,都会被dede自动在服务器生成两个文件,一个原图一个缩略图,
原图名称形如:string-n.xxx,例:095A1J39-3.jpg
缩略图名称形如:string-n-"lp".xxx,例:095A1J39-3-lp.jpg
string是一个随机的8位字符串,n代表一个数字。
上述代码到是能用,问题是dedecms在上传文件的时候,并不会强制修改后缀名,所以如果文章编辑上传的是png的图片的话,
图片url后缀会被改为“jpg”从而显示不出来。所以我们对代码稍作修改。
修改include/extend.func.php 添加如下代码: //取第一张图地址 function firstimg($str_pic) { $str_sub=substr($str_pic,0,-7).".".substr($str_pic,-3);//删除缩略图字符串最后七位,然后再补上上传文件的后缀 return $str_sub; } 然后在模板里循环调用: [field:litpic function=firstimg('@me')/] 直接调用用: {dede:field name=’litpic’ function=”firstimg(@me)”/}
这样网站后台会对网站编辑会更加友好。
2017年2月7日11:30:23编辑
有时候文章有的缩略图是后缀有-lp的,但有的抓取文章缩略图路径和原图路径一样,如果同样处理就错了。
另外图片文件自动命名长度有时候未必是固定长度,于是对算法做了改进。如下:
//取第一张图地址 function firstimg($str_pic) { if(strstr($str_pic,'-lp')) { $n=strlen(strstr($str_pic,'-lp')); $str_sub=substr($str_pic,0,-$n).".".substr($str_pic,-3);//删除缩略图字符串最后七位,然后再补上上传文件的后缀 } else{ $str_sub=$str_pic; } return $str_sub; }
诸君可用此新方法