下面我将为你提供几种最常用、最实用的调用方法,从简单到复杂,并附上详细的解释和代码示例。

(图片来源网络,侵删)
准备工作:确保软件模型已正确创建
在调用之前,请务必确认你的网站已经正确设置了“软件”模型。
- 进入后台:登录DedeCMS后台。
- 创建模型:
- 进入
核心->内容模型管理->增加新模型。 - 模型名称填写“软件”,模型表前缀使用默认的
dede_addonsoft(这是DedeCMS为软件模型预设的表)。 - 按照向导完成设置,通常需要添加一些自定义字段,
softsize(软件大小)language(语言)os(操作系统)author(作者)softdemo(演示地址)softdown(下载地址)
- 进入
- 创建栏目:
- 进入
频道->栏目管理->增加顶级栏目。 - 选择“软件”模型,并设置好栏目属性和内容。
- 进入
- :在软件栏目下添加几条软件文章,用于测试调用效果。
使用DedeCMS官方标签(最常用、最推荐)
这是最标准、最灵活的方法,适用于绝大多数场景,我们使用 arclist 标签,并通过 channel 属性来指定调用软件频道的内容。
场景1:调用指定软件栏目下的软件列表
假设你的软件栏目ID是 5。
代码示例:

(图片来源网络,侵删)
<h3>最新软件</h3>
<ul class="software-list">
{dede:arclist channelid='5' titlelen='30' row='10' orderby='pubdate'}
<li>
<a href="[field:arcurl/]" title="[field:title/]">
[field:title/]
</a>
<span class="info">大小:[field:softsize/] | 语言:[field:language/]</span>
</li>
{/dede:arclist}
</ul>
代码解析:
{dede:arclist}:官方列表标签。channelid='5':核心参数,指定调用ID为5的栏目下的内容,请替换成你自己的软件栏目ID,len='30'`:标题长度,最多显示30个字符。row='10':调用条数,共显示10条软件信息。orderby='pubdate':排序方式,按发布时间降序排列(最新的在前)。[field:arcurl/]:软件详情页的链接地址。[field:title/]。[field:softsize/]:调用你之前在模型中添加的“软件大小”字段。[field:language/]:调用“语言”字段。
场景2:调用所有软件栏目下的软件(不指定栏目ID)
如果你想把所有软件模型下的内容都调用出来,可以省略 channelid。
代码示例:
<h3>热门软件推荐</h3>
<ul class="hot-software">
{dede:arclist channelid='1' typeid='5,6,7' row='8' orderby='click' titlelen='25'}
<li>
<a href="[field:arcurl/]" title="[field:title/]">
[field:title/]
</a>
<span class="download-count">下载:[field:click/]次</span>
</li>
{/dede:arclist}
</ul>
代码解析:

(图片来源网络,侵删)
typeid='5,6,7':指定调用多个栏目ID下的内容,用逗号隔开,如果不指定,则默认调用所有顶级栏目下的内容。orderby='click':按点击量排序,实现“热门”效果。[field:click/]:调用点击次数字段。
使用SQL直接查询(高级用法,更灵活)
当官方标签无法满足复杂的需求时(需要多表关联查询、复杂的排序条件),可以直接使用SQL语句。
代码示例:
<h3>精品软件推荐</h3>
<ul class="featured-software">
{dede:sql sql='SELECT a.id, a.title, a.litpic, b.softsize, b.os FROM dede_archives a LEFT JOIN dede_addonsoft b ON a.id = b.aid WHERE a.typeid=5 ORDER BY a.goodpost DESC, a.click DESC LIMIT 0,6'}
<li>
<a href="/plus/view.php?aid=[field:id/]" title="[field:title/]">
[field:title/]
</a>
<span class="meta">系统:[field:os/] | 大小:[field:softsize/]</span>
</li>
{/dede:sql}
</ul>
代码解析:
{dede:sql}:执行自定义SQL的标签。sql='...':完整的SQL查询语句。SELECT a.id, a.title, a.litpic, b.softsize, b.os:选择需要的字段。a是dede_archives表(文章主表)的别名,b是dede_addonsoft表(软件附加表)的别名。FROM dede_archives a LEFT JOIN dede_addonsoft b ON a.id = b.aid:关联主表和附加表,这是获取软件自定义字段的关键。WHERE a.typeid=5:筛选条件,只调用ID为5的栏目下的软件。ORDER BY a.goodpost DESC, a.click DESC:先按“推荐位”(goodpost)降序,再按点击量降序。LIMIT 0,6:从第0条开始,取6条数据。
/plus/view.php?aid=[field:id/]:通过文章ID构造详情页链接。[field:os/]:调用操作系统字段。
使用自定义函数(PHP代码)
如果你想在模板中实现非常复杂的逻辑,可以编写一个自定义函数,然后在模板中调用。
步骤:
-
编写PHP函数:
- 打开
/include/extend.func.php文件(如果不存在,请创建一个)。 - 在文件末尾添加以下函数:
/** * 调用指定ID的软件列表 * @param int $typeid 栏目ID * @param int $row 调用数量 * @return string 返回HTML列表 */ function GetSoftwareList($typeid = 0, $row = 10) { global $dsql; $html = '<ul class="custom-software-list">'; // 查询SQL $query = "SELECT a.id, a.title, a.pubdate, b.softsize, b.softdown FROM dede_archives a LEFT JOIN dede_addonsoft b ON a.id = b.aid WHERE a.typeid = {$typeid} ORDER BY a.pubdate DESC LIMIT 0, {$row}"; $dsql->Execute('soft', $query); while ($row = $dsql->GetArray('soft')) { $html .= "<li>"; $html .= "<a href='/plus/view.php?aid={$row['id']}'>{$row['title']}</a>"; $html .= "<span>大小:{$row['softsize']} | 发布时间:" . date('Y-m-d', $row['pubdate']) . "</span>"; $html .= "</li>"; } $html .= '</ul>'; return $html; } - 打开
-
在首页模板中调用:
- 打开你的首页模板文件(通常是
/templets/default/index.htm)。 - 在需要显示软件列表的地方,使用以下标签:
{dede:getsql function='GetSoftwareList(5, 8)'/} - 打开你的首页模板文件(通常是
代码解析:
function='GetSoftwareList(5, 8)':调用我们刚刚定义的函数,并传入参数5(栏目ID)和8(调用数量)。- 这种方法功能最强大,但需要一定的PHP编程基础,且在升级DedeCMS时可能会被覆盖。
总结与建议
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
官方标签 arclist |
简单、高效、安全,官方支持,无需编程 | 灵活性相对较低,复杂查询困难 | 90%的场景,特别是调用指定栏目下的内容。 |
| SQL直接查询 | 灵活性极高,可以实现任何复杂的查询逻辑 | 代码可读性差,有SQL注入风险(需注意过滤),升级DedeCMS可能不兼容 | 需要跨表、多条件排序等复杂业务逻辑。 |
| 自定义函数 | 功能最强大,逻辑封装性好,可复用 | 需要PHP编程知识,修改文件,有升级风险 | 业务逻辑非常复杂,且需要在多个地方复用同一段复杂逻辑。 |
对于绝大多数用户,我强烈推荐使用【方法一:官方标签】,它既简单又安全,足以应对大部分首页调用软件的需求,只有在官方标签无法满足时,才考虑使用方法二或方法三。
