使用DedeCMS自带的图集功能(推荐)
这是最标准、最简单的方法,利用DedeCMS内置的图集标签和JS,无需编写复杂代码。

(图片来源网络,侵删)
前提条件:
你的文章必须使用 “图集” 模型,而不是“文章”模型,在发布文章时,上传多张图片,DedeCMS会自动为你生成分页。
实现步骤:
-
创建图集文章
- 在后台登录DedeCMS。
- 进入“[内容管理] -> [添加图集]”。
- 填写文章标题,选择栏目,然后在下方的 ” 区域,点击上传按钮,上传你想要展示的所有图片。
- 上传完成后,系统会自动生成图片列表,你可以为每张图片添加标题和描述。
- 发布文章。
-
修改模板文件
-
找到你的图集文章模板文件,通常位于
/templets/default/目录下,文件名可能是article_image.htm或者你自定义的图集模板。
(图片来源网络,侵删) -
在模板中,你需要使用DedeCMS的图集专用标签
{dede:pagestyle}和{dede:imglist}。 -
在模板头部引入JS文件: 确保你的模板文件中引入了DedeCMS的图集JS文件,通常在
<head>标签内加入:<script language="javascript" type="text/javascript" src="{dede:global.cfg_cmspath/}/include/dedeajax2.js"></script> <script language="javascript" type="text/javascript" src="{dede:global.cfg_templetsdir/}/style/imgieffect.js"></script>dedeajax2.js是AJAX请求的基础库。imgieffect.js是实现图片切换效果的核心JS。
-
区插入图集标签: 在你想要显示图集的位置,使用以下标签代码:
<!-- 图集样式控制 --> <script language="javascript"> <!-- $(function(){ $("img").lazyload({effect:"fadeIn"}); }); //--> </script> <!-- 图片列表 --> {dede:pagestyle style='dddefault' /} {dede:imglist} <dd><a href="[field:imgurl/]" rel="example_group"> <img src="[field:imgsrc/]" alt="[field:title function='html2text(@me)'/]" width="700" height="420"/> </a></dd> {/dede:imglist} <!-- 图片分页 --> {dede:pagebreak/}{dede:pagestyle style='dddefault' /}:这个标签会加载默认的图片分页样式和JS。{dede:imglist}:循环输出图集中的所有图片。[field:imgsrc/]:图片的缩略图地址。[field:imgurl/]:图片的大图地址(点击后查看大图)。[field:title function='html2text(@me)'/]:图片的标题,并过滤掉HTML标签。
{dede:pagebreak/}:这是核心的分页标签,它会自动生成上一页/下一页的链接。
-
-
效果说明
(图片来源网络,侵删)- 这样设置后,前台显示会默认以缩略图列表的形式展示。
- 当用户点击 “下一页” 或 “上一页” 时,会平滑地切换到下一张或上一张图片。
- 如果你想实现点击缩略图直接切换到大图,可以在
{dede:imglist}循环中,将缩略图的href指向[field:imgurl/],并使用一个图片查看器插件(如Fancybox, ColorBox)来美化大图展示效果。
使用自定义JS实现点击大图切换(更灵活)
如果你希望实现类似淘宝、花瓣网那样的“点击当前图片切换到下一张”的效果,就需要自定义JavaScript。
实现思路:
- 模板中只输出所有图片的大图地址,并隐藏。
- 只显示第一张图片。
- 为第一张图片绑定点击事件,点击后隐藏当前图片,显示第二张图片,并绑定新的点击事件。
- 重复此过程直到最后一张图片。
实现步骤:
-
修改模板文件
- 同样,找到你的图集模板文件(如
article_image.htm)。 - 清理掉方法一中提到的
{dede:pagestyle}和{dede:pagebreak}等标签。 - 使用
{dede:imglist}循环,但做一些调整:
<!-- 在需要放置图片的容器内 --> <div id="image-container"> <!-- 使用imglist标签,但只输出图片,不生成分页链接 --> {dede:imglist} <!-- 使用data-*属性来存储图片信息,方便JS获取 --> <img src="[field:imgsrc/]" data-original="[field:imgurl/]" alt="[field:title function='html2text(@me)'/]" style="display:none;" /> {/dede:imglist} </div> <!-- 用于显示当前活动图片的容器 --> <div id="active-image-area" style="text-align:center;"> <!-- 默认显示第一张图片,通过JS来切换 --> <img id="current-img" src="" alt="图片集" style="max-width: 100%; cursor: pointer;" /> </div> <!-- 提示文字 --> <p style="text-align:center; color: #999;">点击图片切换下一张</p> - 同样,找到你的图集模板文件(如
-
编写JavaScript代码
- 在模板文件的底部,
</body>标签之前,添加以下JS代码:
<script type="text/javascript"> window.onload = function() { // 获取所有图片和显示区域 const allImages = document.querySelectorAll('#image-container img'); const currentImgElement = document.getElementById('current-img'); let currentIndex = 0; // 如果没有图片,则不执行 if (allImages.length === 0) { return; } // 显示第一张图片 showImage(0); // 为当前图片添加点击事件 currentImgElement.addEventListener('click', function() { // 如果还有下一张,则切换 if (currentIndex < allImages.length - 1) { currentIndex++; showImage(currentIndex); } else { // 如果是最后一张,可以循环回到第一张,或者什么都不做 // alert('已经是最后一张了!'); // currentIndex = 0; // showImage(currentIndex); } }); // 切换图片的函数 function showImage(index) { const img = allImages[index]; // 更新src currentImgElement.src = img.getAttribute('data-original'); // 使用大图 // 更新alt currentImgElement.alt = img.alt; } }; </script> - 在模板文件的底部,
代码解释:
#image-container:一个隐藏的容器,里面放着所有图片(来自{dede:imglist})。#active-image-area和#current-img:前台用户实际看到的图片区域。data-original:我们自定义的属性,用来存储大图的URL,因为[field:imgsrc/]通常是缩略图,而[field:imgurl/]是大图。currentIndex:一个变量,记录当前显示的是第几张图片(从0开始)。addEventListener('click', ...):为当前图片绑定点击事件。showImage():核心函数,根据currentIndex从隐藏的容器里找到对应的图片,并将其大图URL设置到#current-img上,实现切换。
总结与建议
| 特性 | 方法一 (自带功能) | 方法二 (自定义JS) |
|---|---|---|
| 实现难度 | 简单,零代码 | 中等,需要懂基础JS |
| 灵活性 | 低,受限于DedeCMS标签 | 高,可以完全自定义交互效果 |
| 维护性 | 好,官方更新后可能兼容 | 差,需要自己维护代码 |
| 适用场景 | 快速搭建,满足基本图集分页需求 | 追求特定交互效果,如点击切换、无限滚动等 |
推荐选择:
- 如果你只是需要一个功能完善的图集,并且希望快速上线,强烈推荐使用方法一。
- 如果你追求更酷炫、更个性化的用户体验,并且愿意投入时间进行开发,可以选择方法二。
在操作前,请务必备份你的模板文件,以防修改出错导致页面无法显示。
