zblog调用文中第一张图片作为缩略图的设计代码
昨天更新了锦鲤主题模板,网友反馈说文章插入视频之后会出现错版,网站整个都是乱的,随后看了下源代码,没什么太大问题,就是缩略图调用的时候出现了问题,错误的抓取了mp4格式的文件,然后去查看缩略图插件代码,发现没什么问题,再仔细对照官方给出的代码,确定是没有问题了,但是文章视频放在首位就是各种出错,一时间陷入了尴尬的局面。
没办法了只好暂时删除了位于head里的360搜索出图的代码,暂时解决错位问题,但是我在本地测试的时候,问题还是文在,比如无法生成海报,因为获取的还是mp4的文件,根据网友反馈直接在文章上传视频的时候就没有问题,外链的mp4(不仅仅mp4基本视频类都如此)文件就不行,再一次陷入僵局。。。
内心慌得一批,搞什么鬼,代码官方给的不可能出错(我还是太天真,太信任官方了),然后群里求助,自己又测试了几款其他主题,基本都是这个BUG,最后测试@橙色阳光大神的主题才拨云见日,豁然开朗啊,问题就出现在官方代码的正则表达式,修改之后如下:
完整版代码如下:
//默认缩略图 function 主题ID_firstimg($article) { global $zbp; $randnum = mt_rand(1,9); $pattern = "/<img.*?src=[\'|\"](.*?)[\'|\"].*?[\/]?>/i"; $content = $article->Content; preg_match_all($pattern,$content,$matchContent); if (isset($matchContent[1][0])) { $temp = $matchContent[1][0]; } else { $temp = $zbp->host."zb_users/theme/主题ID/style/noimg/" . $randnum . ".jpg"; } return $temp; }
这代码就是获取文中第一张图片,如果文中没有图片则随机显示一张照片,随机照片需要在style目录下新建一个noimg文件夹,然后自己设置1-9张图片,后缀是.jpg,例如(1.jpg,2.jpg等)。
如果您的站已经有代码,那么需要替换下源代码,如果无效最好重新启用下其他主题,然后在切换正常使用的主题即可。
查找
$pattern="/<[img|IMG].*?src=[\'|\"](.*?(?:[\.gif|\.jpg|\.png]))[\'|\"].*?[\/]?>/";
替换成
$pattern = "/<img[^>]*src=\"([^\"]+\.(gif|jpg|png|jpeg|jpe|bmp|webp))\"[^>]*>/i";
保存,然后重新启用主题,清空缓存编译,前台刷新,一切回归正常~~~
PS:主题模板均已修复请等待更新。
The End