下面我将从基础调用到高级调用,为你详细讲解如何调用图集内容,并提供不同场景下的代码示例。
基础调用:获取图集列表并显示缩略图和标题
这是最简单的调用方式,通常用于首页、列表页等展示多个图集的地方。
适用场景:
- 首页图集推荐
- 图集栏目列表
方法:使用 arclist
arclist 是 DedeCMS 最强大的列表调用标签,通过设置特定属性可以轻松调用图集。
核心属性:
channelid: 指定栏目ID,如果图集都放在一个专门的图集栏目下,直接填写该栏目ID即可。
row: 调用的记录条数。
imgwidth: 缩略图宽度。
imgheight: 缩略图高度。
listtype: 设置为 image,表示调用的是图集模型的内容。
代码示例:
{dede:arclist channelid='3' row='6' imgwidth='200' imgheight='150' listtype='image'}
<dl>
<dt>
<!-- 调用第一张缩略图 -->
<a href="[field:arcurl/]"><img src="[field:litpic/]" alt="[field:title/]" /></a>
</dt>
<dd>
<!-- 调用图集标题 -->
<a href="[field:arcurl/]">[field:title/]</a>
</dd>
</dl>
{/dede:arclist}
代码解析:
channelid='3': 请将 '3' 替换为你自己的图集栏目ID。
listtype='image': 这是关键,告诉 DedeCMS 我们要调用的是图集模型,这样 [field:litpic/] 才能正确获取到第一张图片的地址。
[field:litpic/]: 调用文章的缩略图,对于图集来说,它默认就是上传的第一张图片。
[field:arcurl/]: 调用文章的URL,点击后进入图集详情页。
[field:title/]: 调用文章的标题。
进阶调用:在图集详情页调用所有图片
当用户点击一个图集进入详情页后,我们需要展示该图集中的所有图片,这时需要使用 infolist
适用场景:
- 页模板 (
article_image.htm)
方法:使用 infolist
infolist 是专门用来调用附加表内容的标签,图集的所有图片都存储在 dede_addonimages 表中。
代码示例:
<h1>[field:title/]</h1>
<!-- 调用图集所有图片 -->
<div class="picbox">
<ul>
{dede:infolist}
<li>
<a href="[field:imgurl/]" target="_blank">
<!-- 调用图片,并添加 alt 属性 -->
<img src="[field:imgurl/]" alt="[field:text/]" width="800" />
</a>
<!-- 可选:调用图片的说明文字 -->
<p>[field:text/]</p>
</li>
{/dede:infolist}
</ul>
</div>
<!-- 如果需要调用图集的总数量 -->
<p>共 [field:totalpage/] 张图片</p>
代码解析:
{dede:infolist}: 此标签无需任何属性,它会自动获取当前文章ID在附加表中的所有图片记录。
[field:imgurl/]: 调用单张图片的地址。
[field:text/]: 调用单张图片上传时填写的“图片说明”。
[field:totalpage/]: 调用图集图片的总数。
高级调用:使用自定义函数(PHP)实现更灵活的控制
arclist 和 infolist 的功能无法满足我们的需求,比如想在首页调用某个图集的所有图片(而不是只调第一张),这时就需要用到自定义函数。
适用场景:
- 首页展示某个特定图集的所有图片轮播。
- 在任意位置调用图集,并自定义复杂的HTML结构。
方法:
- 在
/include/extend.func.php 文件中添加一个自定义函数。
- 在模板中调用这个函数。
步骤1:添加自定义函数
打开 /include/extend.func.php 文件,在文件末尾 ?> 之前添加如下代码:
/**
* 获取指定图集ID的所有图片
* @param int $aid 图集的文章ID
* @param string $imgwidth 图片宽度
* @param string $imgheight 图片高度
* @return string 返回包含所有图片HTML的字符串
*/
function GetImages($aid, $imgwidth = '', $imgheight = '')
{
global $dsql;
$images = '';
$query = "SELECT imgurl,text FROM `dede_addonimages` WHERE aid='$aid' ORDER BY id ASC";
$dsql->Execute('me',$query);
while($row = $dsql->GetArray('me'))
{
// 可以在这里自定义每张图片的HTML输出格式
$images .= "<li><img src=\"{$row['imgurl']}\" alt=\"{$row['text']}\" width=\"{$imgwidth}\" height=\"{$imgheight}\" /></li>\n";
}
return $images;
}
步骤2:在模板中调用
现在你可以在任何模板文件里使用这个函数了。
示例:在首页调用ID为 15 的图集的所有图片
<div class="my-gallery">
<ul>
<!-- 调用自定义函数,传入图集ID和图片尺寸 -->
[field:runphp='yes']
$aid = 15; // 这里填写你想调用的图集ID
$str = GetImages($aid, '300', '200');
@me = $str; // @me 是模板中变量的输出容器
[/field:runphp]
</ul>
</div>
代码解析:
[field:runphp='yes']: 这是一个运行PHP代码的标签。
@me = $str;: 这句非常重要,它将PHP变量 $str 的值赋给模板引擎的输出变量 @me,从而在页面上显示出来。
- 这种方法非常灵活,你可以完全控制
GetImages 函数中的HTML结构,比如添加链接、说明文字等。
常见问题与注意事项
-
栏目ID (channelid) 错误
- 问题:调用不出图集,或者调用的是普通文章。
- 解决:确保你调用的是一个“图集”模型创建的栏目,进入后台【核心】->【内容模型管理】,查看你的图集模型ID,然后去【栏目管理】->【高级选项】->【内容模型】中确认栏目的模型是否正确。
-
缩略图不显示 ([field:litpic/])
- 问题:使用
arclist 时,[field:litpic/] 返回空或默认图片。
- 解决:
- 确认
listtype='image' 已设置。
- 确认该图集在后台编辑时,已经上传了图片(系统会自动将第一张图作为缩略图)。
- 检查
dede_archives 表中该文章的 litpic 字段是否有值。
-
图片路径问题
- 问题:图片路径是
/uploads/... 而不是完整的 http://... 路径,导致图片无法显示。
- 解决:这通常是网站根目录配置问题,确保你的网站配置正确,或者在调用时加上域名,DedeCMS 的
{dede:global.cfg_basehost/} 可以获取网站域名。
src="{dede:global.cfg_basehost/}[field:litpic/]"
-
图片说明 ([field:text/]) 为空
- 问题:在
infolist 中调用 [field/text/] 没有内容。
- 解决:这是正常的。
[field:text/] 的值是在上传单张图片时,在“图片描述”或“图片说明”一栏手动填写的,如果上传时没有填写,自然就是空的。
调用场景
推荐标签
关键属性/代码
说明
首页/列表页 (调用图集列表)
arclist
listtype='image', channelid, imgwidth, imgheight
简单、高效,用于展示多个图集的概览。
图集详情页 (调用图集内所有图)
infolist
[field:imgurl/], [field:text/]
专门用于图集内容页,展示所有图片和说明。
任意位置 (灵活调用图集)
自定义函数
extend.func.php 中写 GetImages() 函数
功能最强大,可自定义HTML结构,适合复杂需求。
希望这份详细的指南能帮助你熟练掌握 DedeCMS 图集内容的调用!
arclist 是 DedeCMS 最强大的列表调用标签,通过设置特定属性可以轻松调用图集。
核心属性:
channelid: 指定栏目ID,如果图集都放在一个专门的图集栏目下,直接填写该栏目ID即可。row: 调用的记录条数。imgwidth: 缩略图宽度。imgheight: 缩略图高度。listtype: 设置为image,表示调用的是图集模型的内容。
代码示例:
{dede:arclist channelid='3' row='6' imgwidth='200' imgheight='150' listtype='image'}
<dl>
<dt>
<!-- 调用第一张缩略图 -->
<a href="[field:arcurl/]"><img src="[field:litpic/]" alt="[field:title/]" /></a>
</dt>
<dd>
<!-- 调用图集标题 -->
<a href="[field:arcurl/]">[field:title/]</a>
</dd>
</dl>
{/dede:arclist}
代码解析:
channelid='3': 请将'3'替换为你自己的图集栏目ID。listtype='image': 这是关键,告诉 DedeCMS 我们要调用的是图集模型,这样[field:litpic/]才能正确获取到第一张图片的地址。[field:litpic/]: 调用文章的缩略图,对于图集来说,它默认就是上传的第一张图片。[field:arcurl/]: 调用文章的URL,点击后进入图集详情页。[field:title/]: 调用文章的标题。
进阶调用:在图集详情页调用所有图片
当用户点击一个图集进入详情页后,我们需要展示该图集中的所有图片,这时需要使用 代码示例: 代码解析: 步骤1:添加自定义函数 打开 步骤2:在模板中调用 现在你可以在任何模板文件里使用这个函数了。 示例:在首页调用ID为 代码解析: 栏目ID ( 缩略图不显示 ( 图片路径问题 图片说明 ( 希望这份详细的指南能帮助你熟练掌握 DedeCMS 图集内容的调用!infolist
适用场景:
article_image.htm)方法:使用
infolist
infolist 是专门用来调用附加表内容的标签,图集的所有图片都存储在 dede_addonimages 表中。<h1>[field:title/]</h1>
<!-- 调用图集所有图片 -->
<div class="picbox">
<ul>
{dede:infolist}
<li>
<a href="[field:imgurl/]" target="_blank">
<!-- 调用图片,并添加 alt 属性 -->
<img src="[field:imgurl/]" alt="[field:text/]" width="800" />
</a>
<!-- 可选:调用图片的说明文字 -->
<p>[field:text/]</p>
</li>
{/dede:infolist}
</ul>
</div>
<!-- 如果需要调用图集的总数量 -->
<p>共 [field:totalpage/] 张图片</p>
{dede:infolist}: 此标签无需任何属性,它会自动获取当前文章ID在附加表中的所有图片记录。[field:imgurl/]: 调用单张图片的地址。[field:text/]: 调用单张图片上传时填写的“图片说明”。[field:totalpage/]: 调用图集图片的总数。
高级调用:使用自定义函数(PHP)实现更灵活的控制
arclist 和 infolist 的功能无法满足我们的需求,比如想在首页调用某个图集的所有图片(而不是只调第一张),这时就需要用到自定义函数。适用场景:
方法:
/include/extend.func.php 文件中添加一个自定义函数。/include/extend.func.php 文件,在文件末尾 ?> 之前添加如下代码:/**
* 获取指定图集ID的所有图片
* @param int $aid 图集的文章ID
* @param string $imgwidth 图片宽度
* @param string $imgheight 图片高度
* @return string 返回包含所有图片HTML的字符串
*/
function GetImages($aid, $imgwidth = '', $imgheight = '')
{
global $dsql;
$images = '';
$query = "SELECT imgurl,text FROM `dede_addonimages` WHERE aid='$aid' ORDER BY id ASC";
$dsql->Execute('me',$query);
while($row = $dsql->GetArray('me'))
{
// 可以在这里自定义每张图片的HTML输出格式
$images .= "<li><img src=\"{$row['imgurl']}\" alt=\"{$row['text']}\" width=\"{$imgwidth}\" height=\"{$imgheight}\" /></li>\n";
}
return $images;
}
15 的图集的所有图片<div class="my-gallery">
<ul>
<!-- 调用自定义函数,传入图集ID和图片尺寸 -->
[field:runphp='yes']
$aid = 15; // 这里填写你想调用的图集ID
$str = GetImages($aid, '300', '200');
@me = $str; // @me 是模板中变量的输出容器
[/field:runphp]
</ul>
</div>
[field:runphp='yes']: 这是一个运行PHP代码的标签。@me = $str;: 这句非常重要,它将PHP变量 $str 的值赋给模板引擎的输出变量 @me,从而在页面上显示出来。GetImages 函数中的HTML结构,比如添加链接、说明文字等。
常见问题与注意事项
channelid) 错误
[field:litpic/])
arclist 时,[field:litpic/] 返回空或默认图片。
listtype='image' 已设置。dede_archives 表中该文章的 litpic 字段是否有值。
/uploads/... 而不是完整的 http://... 路径,导致图片无法显示。{dede:global.cfg_basehost/} 可以获取网站域名。
src="{dede:global.cfg_basehost/}[field:litpic/]"[field:text/]) 为空
infolist 中调用 [field/text/] 没有内容。[field:text/] 的值是在上传单张图片时,在“图片描述”或“图片说明”一栏手动填写的,如果上传时没有填写,自然就是空的。
调用场景
推荐标签
关键属性/代码
说明
首页/列表页 (调用图集列表)
arclistlisttype='image', channelid, imgwidth, imgheight简单、高效,用于展示多个图集的概览。
图集详情页 (调用图集内所有图)
infolist[field:imgurl/], [field:text/]专门用于图集内容页,展示所有图片和说明。
任意位置 (灵活调用图集)
自定义函数
extend.func.php 中写 GetImages() 函数功能最强大,可自定义HTML结构,适合复杂需求。
