如何在DedeCMS列表页显示文章内容的第一张原图而非缩略图
文章作者:佚名 发布时间:2024-10-21 09:52:38 来源:互联网
在DedeCMS的列表页模板中,使用以下代码调用文章内容的第一张原图(非缩略图):,,“php,{dede:field name='body' function='GetTopImage(@me)'/},
“
在DedeCMS中,列表页调用文章内容第一张原图片(非缩略图)的方法如下:
方法一:通过修改include/extend.func.php文件实现
1、修改include/extend.func.php文件:
打开include/extend.func.php
文件。
在文件末尾添加以下代码:
//取第一张图地址 function firstimg($str_pic) { $str_sub = substr($str_pic, 0, 7) . ".jpg"; //删除缩略图字符串最后七位,然后再补上后缀.jpg return $str_sub; }
2、在模板文件中调用:
在模板文件中使用以下标签调用文章的第一张原图:
[field:litpic function='firstimg(@me)'/]
或者:
<img src="{dede:field name='litpic' function="firstimg(@me)"/}" />
方法二:通过自定义函数getBodyonepic实现
1、创建自定义函数:
打开include/extend.func.php
文件。
在文件末尾添加以下代码:
/** * 文章内容提取第一张图片 * * @access public * @param string $id 文档id * @param string $addField 字段名 * @return string */ if(!function_exists('getBodyonepic')) { function getBodyonepic($id, $addField='body') { global $dsql; $row = $dsql>GetOne("SELECT a.litpic,c.addtable FROM #@__archives AS a LEFT JOIN #@__channeltype AS c ON a.channel=c.id where a.id='$id'"); $addtable = trim($row['addtable']); if($row['litpic'] == '' || $row['litpic'] == '') { $litpic = $GLOBALS['cfg_cmspath'].'/images/defaultpic.gif'; } $row = $dsql>GetOne("SELECT $addField FROM$addtable
WHERE aid=$id"); $body = $row["$addField"]; preg_match_all("/<img([^>]*)\s*src=('|\")([^'\"]+)('|\")/",$body,$matches); $imgsrc_arr = array_unique($matches[3]); $result = $imgsrc_arr[0] ? $imgsrc_arr[0] : $litpic; return $result; } }
2、在模板文件中调用:
在模板文件中使用以下标签调用文章的第一张原图:
[field:id function=getBodyonepic(@me)/]
或者:
<img src="{dede:field.id function=getBodyonepic(@me)/}" />
相关问答FAQs
1、Q1: 为什么需要调用文章的第一张原图而不是缩略图?
A1: 调用文章的第一张原图而不是缩略图可以避免因缩略图变形或显示不完整而影响页面美观和用户体验,原图通常具有更高的分辨率和更完整的内容展示,能够更好地传达信息和吸引用户。
2、Q2: 如果文章内容中没有图片,会显示什么?
A2: 如果文章内容中没有图片,通常会显示一个默认的图片,这个默认图片的路径可以在代码中进行设置,例如在上述代码中的$litpic = $GLOBALS['cfg_cmspath'].'/images/defaultpic.gif';
这一行,如果没有设置默认图片,可能会显示一个空白或占位符。