调用文章内容(body)中的第一张图片
这是最常见的需求,比如在文章列表页显示缩略图,或者在文章页上方显示一个特色图。
方法1:使用 preg_match 正则表达式(最推荐)
这是最灵活、最常用的方法,因为它不依赖于Dede的特定函数,可以在任何地方使用。
代码:
{dede:field.body runphp='yes'}
// 使用正则表达式匹配第一个img标签
if (preg_match('/<img.*?src="(.*?)".*?>/i', @me, $matches)) {
// 将匹配到的图片地址赋值给 @me
@me = $matches[1];
} else {
// 如果文章中没有图片,可以设置一个默认图片
@me = '/images/default.jpg';
}
{/dede:field.body}
代码解释:
{dede:field.body runphp='yes'}:获取文章的body字段内容,并开启PHP执行。preg_match('/<img.*?src="(.*?)".*?>/i', @me, $matches):这是核心的正则表达式。<img:匹配<img标签开头。- 非贪婪匹配任意字符,直到下一个条件满足。
src="(.*?)":匹配src属性,并捕获 之间的内容(图片地址)。/i:表示不区分大小写进行匹配。@me:此时代表body字段的原始内容。$matches:匹配结果会存放在这个数组里,图片地址在$matches[1]中。
@me = $matches[1]:将捕获到的图片地址重新赋值给@me,从而在页面上输出。else:如果文章内容里没有找到图片,就输出一个你指定的默认图片路径,避免显示空白或错误图标。
如何使用? 你可以直接将这段代码放在模板的任何需要显示图片的地方,
<!-- 在文章页顶部显示文章第一张图作为大图 -->
<img src="[上面的代码]" alt="{dede:field.title/}" style="width: 100%; max-height: 400px; object-fit: cover;">
方法2:使用DedeCMS内置的函数 GetOneImgUrl
DedeCMS提供了一个专门的函数来获取文章第一张图的地址,使用起来更简单。
代码:
{dede:field.body function='GetOneImgUrl(@me)'/}
代码解释:
function='GetOneImgUrl(@me)':这是对field.body的内容调用GetOneImgUrl这个PHP函数。- 这个函数会自动解析
body中的第一张图片,并返回其完整路径(包括域名)。
如何使用? 与方法1类似,直接放在需要显示图片的地方。
<img src="{dede:field.body function='GetOneImgUrl(@me)'/}" alt="{dede:field.title/}">
调用文章附加图片(多图)
如果你的文章是通过“DedeCMS特有的多图上传功能”添加的图片,那么调用方式就完全不同了,这些图片存储在附加表 dede_addonimages 中。
调用方式:
使用 代码: 解释:
这个标签会输出文章中所有附加图片的信息,但它不是直接输出 完整示例(循环显示所有附加图片): 代码解释: 注意:
这种方式调用的图片,是在后台发布文章时,点击“图片集”或“多图”按钮上传的,而不是直接插入到编辑器里的。 这是文章发布时,在编辑器下方“高级选项”里设置的缩略图。 调用方式:
使用 代码: 如何使用?
通常用于文章列表页、首页文章摘要等地方。 最佳实践建议: 在开发模板时,为了保证在没有图片时页面依然美观,强烈建议使用方法1(正则表达式),并加上 在文章列表页模板 这样,无论文章有没有图片,你的列表页都能正常显示,用户体验更好。{dede:field name='imgurls'/}
{dede:field.imgurls/}
<img> 标签,而是输出一个包含图片信息的数组格式文本,我们需要配合循环和自定义样式来使用。<div class="article-gallery">
{dede:field.imgurls}
<li>
<a href="[field:imgsrc/]" rel="example_group">
<img src="[field:imgsrc/]" alt="[field:text/]" />
</a>
</li>
{/dede:field.imgurls}
</div>
{dede:field.imgurls}...{/dede:field.imgurls}:循环遍历所有附加图片。[field:imgsrc/]:获取单张图片的地址。[field:text/]:获取上传图片时填写的说明文字。
调用文章缩略图(litpic)
{dede:field.litpic/}
{dede:field.litpic/}
<img src="{dede:field.litpic/}" alt="{dede:field.title/}">
总结与最佳实践
调用目标
推荐代码
适用场景
第一张图
{dede:field.body runphp='yes'}preg_match(...){/dede:field.body}最常用,文章页大图、列表页自定义缩略图。
第一张图
{dede:field.body function='GetOneImgUrl(@me)'/}简单快捷,但灵活性不如正则表达式。
文章附加图片(多图)
{dede:field.imgurls}调用通过“图片集”功能上传的图片。
文章缩略图
{dede:field.litpic/}调用后台设置的专属缩略图。
else 条件来设置一个默认图片。list_article.htm 中,你可能没有 litpic,但想从 body 里取图,可以这样写:<li>
<a href="[field:arcurl/]">
<img src="
{dede:field.body runphp='yes'}
if (preg_match('/<img.*?src="(.*?)".*?>/i', @me, $matches)) {
@me = $matches[1];
} else {
@me = '/static/images/default_thumb.png'; // 你的默认缩略图
}
{/dede:field.body}
" alt="[field:title function='html2text(@me)'/]">
<h2>[field:title/]</h2>
</a>
</li>
