使用官方推荐的 imglist 字段(最推荐、最规范)
这是织梦官方为了解决多图问题而设计的最佳方案,它要求你在发布文章时,将多图上传到文章的“图片集”字段中。

核心思路:
- 修改文章模型:为文章增加一个专门的“图片集”字段。
- 发布文章时:将多图上传到这个新增的“图片集”字段。
- 调用列表:使用
arclist标签,通过imglist属性来调用这个字段里的图片。
详细步骤:
第1步:修改文章模型,添加“图片集”字段
- 登录织梦后台,进入 [系统] -> [核心设置] -> [内容模型管理]。
- 找到并点击你正在使用的文章模型(通常是“文章”),点击 [字段管理]。
- 在字段管理页面,点击 [添加新字段]。
- 填写字段信息:
- 字段名:
imglist(必须是小写,这是系统约定好的) - 字段类型:
多媒体图片 - 字段提示:
图片集(这个会在后台发布文章时显示) - 默认值:留空
- 其他选项:保持默认即可。
- 字段名:
- 点击 [保存],现在你的文章模型就有了一个可以上传多图的
imglist字段了。
第2步:在后台发布文章时上传多图
- 进入 [核心] -> [内容发布],或修改一篇文章。
- 你会看到新增的“图片集”字段,点击“图片集”旁边的 “上传图片” 或 “选择图片” 按钮。
- 在弹出的窗口中,上传你想要显示的多张图片,你可以设置每行显示几张图片,以及图片大小。
- 上传并保存图片后,这些图片就会被保存在
imglist字段里。
第3步:在列表页模板中调用多图
你可以在列表页模板(通常是 list_article.htm)中使用 arclist 标签来调用这些图片。
基本语法:

{dede:arclist typeid='栏目ID' row='10' titlelen='30' imgwidth='150' imgheight='150'}
<li>
<a href="[field:arcurl/]" title="[field:title/]">
<!-- 关键在这里:使用 [field:image/] 来调用 imglist 字段中的第一张图 -->
<img src="[field:image/]" alt="[field:title/]">
</a>
<h3><a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a></h3>
</li>
{/dede:arclist}
[field:image/] 的特殊说明:
当你使用了 imglist 属性后,[field:image/] 不再是调用文章正文的第一张图,而是调用你上传到“图片集”里的第一张图。
如何显示多张图?
arclist 标签本身不支持在一个列表项里循环输出多张图,它每个循环(<li>)只处理一篇文章,如果你想在一个列表项里显示该文章的多张图片,需要结合PHP和一些自定义函数来实现。
进阶:在一个列表项里显示多张缩略图

-
在列表页模板的
arclist标签里,调用imglist字段的内容。{dede:arclist typeid='栏目ID' row='10' titlelen='30'} <li> <a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a> <!-- 调用图片集内容,并用 div 包裹 --> <div class="multi-images"> [field:imglist/] </div> </li> {/dede:arclist} -
打开织梦的 include/common.func.php 文件,在文件末尾
?>之前,添加以下自定义函数:/** * 处理图片集,输出HTML * @param string $imglist 图片集内容,格式为 "图片地址1|图片说明1,图片地址2|图片说明2,..." * @param int $num 显示图片数量 * @param int $width 图片宽度 * @param int $height 图片高度 * @return string */ function GetImgList($imglist, $num = 3, $width = 80, $height = 80) { $dtp = new DedeTagParse(); $dtp->SetNameSpace('field', '[', ']'); $dtp->LoadSource($imglist); $innertext = ''; if (is_array($dtp->CTags)) { $i = 0; foreach($dtp->CTags as $ctag) { if ($i >= $num) break; // 只显示指定数量的图片 $innertext .= '<img src="'.$ctag->Get('imgurl').'" width="'.$width.'" height="'.$height.'" alt="'.$ctag->Get('text').'" />'; $i++; } } return $innertext; } -
修改列表页模板,使用这个新函数:
{dede:arclist typeid='栏目ID' row='10' titlelen='30'} <li> <a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a> <div class="multi-images"> <!-- 调用函数,显示3张,宽高80px --> [field:array function='GetImgList(@me, 3, 80, 80)'/] </div> </li> {/dede:arclist}CSS 样式参考:
.multi-images { display: flex; gap: 5px; /* 图片间距 */ margin-top: 5px; } .multi-images img { border: 1px solid #eee; }
修改织梦源码,调用文章正文中的多图(不推荐,有风险)
如果你不想修改模型,就想直接调用文章内容(body 字段)里的 <img> 标签,可以修改织梦源码。此方法会破坏织梦的封装性,升级时可能会被覆盖,请谨慎使用。
核心思路:
修改 arclist 标签的解析函数,让它能从文章正文中提取多张图片。
详细步骤:
-
找到并修改文件: 打开文件
/include/taglib/arclist.lib.php。 -
定位关键代码: 在文件中找到大约第
375行左右的InnerText函数(不同版本行号可能不同),找到这行代码:$GLOBALS['EnvList']['typeid'] = $typeid;
在这行代码的后面,添加以下PHP代码:
//---------- 调用文章正文多图 开始 ---------- if ($CrossID == '' && $type == 'all') { $row['body'] = GetMkHTML($row['aid'], $row['typeid'], $row['body'], $row['description'], $row['keywords'], $row['templet'], $row['userip'], $row['likeid'], $row['arclank'], $row['adminid'], $row['ismake'], $row['channel'], $row['senddate'], $row['arcrank'], $row['click'], $row['money'], $row['lpos'], $row['title'], $row['ismember'], $row['tagid'], $row['totalpage'], $row['pagenum'], $row['maxpage'], $row['pagebreak'], $row['mtype'], $row['ddmaxadd'], $row['mobileurl']); $preg = "/<img.*?src=['\"](.*?)[^>]*?>/i"; preg_match_all($preg, $row['body'], $match); if (isset($match[1]) && !empty($match[1])) { // 从第二张图开始取,最多取3张 $images = array_slice($match[1], 1, 3); $row['image'] = implode('|', $images); // 将图片路径用 | 连接,存入 image 字段 } } //---------- 调用文章正文多图 结束 ---------- -
在模板中使用: 修改列表页模板,因为现在
image字段里存储了多张图片的路径(用 分隔),我们需要用PHP代码来循环输出。{dede:arclist typeid='栏目ID' row='10' titlelen='30' imgwidth='150' imgheight='150'} <li> <a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a> <div class="multi-images"> [field:array runphp='yes'] $images = explode('|', @me); $innertext = ''; foreach($images as $img) { if (!empty($img)) { $innertext .= '<img src="'.$img.'" width="80" height="80" alt="" />'; } } @me = $innertext; [/field:array] </div> </li> {/dede:arclist}
方法二的缺点:
- 破坏性:修改了核心文件,升级织梦时会被覆盖,需要重新修改。
- 性能:每次调用列表都会解析文章正文,对服务器有一定压力。
- 不精确:可能提取到一些无用的图片(如表情、图标等),需要额外过滤。
总结与建议
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
imglist 字段 |
官方推荐,规范、安全,不破坏核心文件,升级无忧。 | 需要修改模型和发布文章时的操作,稍微复杂一点。 | 强烈推荐,适用于所有需要多图展示的场景,特别是长期维护的网站。 |
| 修改源码 | 无需修改模型,直接调用正文图片,对于旧文章也能处理。 | 破坏核心文件,有升级风险,性能稍差,可能提取到无用图片。 | 快速实现,或项目已定型、不考虑升级的临时性需求。 |
对于绝大多数用户,请选择【方法一】,虽然前期配置多了一步,但从长远来看,这是最稳定、最可靠、最符合织梦设计思路的方案。
