织梦的缩略图变形的问题一直为大家所诟病,在缩略图问题的处理上,织梦程序确实做的不大好。织梦DedeCMS对缩略图的处理方式是按比例对正文的第一张图片进行缩放的,如果图片尺寸与缩略图的尺寸不符合,就会造成图片挤压或者拉伸从而失真。有一种解决的办法是采用裁切的方式,按固定的比例对图片剪裁,来解决缩略图失真的问题,这种方法可以去看No牛网的织梦DedeCms5.7缩略图变形解决方法一文。
今天No牛网主要是整理下织梦DedeCMS调取文章正文图片的方法,虽然No牛网在织梦DedeCms批量提取第一张图片为缩略图一文中也谈到了文章正文图片的调用,但是哪个是重新生成缩略图的。今天的这个方法则是调用正文中的第一张图片,以便有足够大、足够清新的图来进行一些特效、幻灯等的效果处理。实现的方法可以使用织梦的SQL标签,也可以自定义函数来进行处理。原理是织梦文章的图片路径都是存储在dede_uploads表(默认前缀)里面的,具体的SQL标签调用可以参考下No牛网的织梦DedeCMS模板标签sql调用代码大全一文。
下面主要说一下采用自定义函数实现调用文章正文内容图片的方法。在include目录下的helpers文件夹中的extend.helper.php文件中添加如下的函数:
/* * * 多缩略图插件 * * @return string */ if( ! function_exists('simgs')){ function simgs($aid){ global $dsql; $arcRow = GetOneArchive($aid); $docdir =$arcRow[typedir]; $docurl = str_replace('{cmspath}','https://www.noniu.com',"$docdir"); $sql = "SELECT url FROM dede_uploads WHERE arcid='$aid' ORDER BY aid DESC LIMIT 3"; $dsql->SetQuery($sql); $dsql->Execute(); while ($row = $dsql->GetArray()) { $spics .= "<a href="".$docurl."/$arcRow[aid].html"><img alt="$arcRow[title]" src="$row[url]"></a>"; } return $spics; } }
注意把https://www.noniu.com修改为自己的域名。在首页或者频道页面的模板中使用如下的调用方式调用文章正文图片。
[field:id function="simgs(@me)"/]
这个函数默认是调用三张正文图片,可以自己根据情况调整数量和显示的样式等信息。这种调用的方式有一些缺点,就是如果图片的路径没有保存到dede_uploads表中,就调用不出来,有些采集软件发布的文档就会出现这种情况。更好的方式是直接调用文档内容,然后正则匹配文档中的图片地址,这种方法No牛网在以后的文章中再说。