dede如何调用指定栏目的content内容?

99ANYc3cd6
预计阅读时长 16 分钟
位置: 首页 DEDE建站 正文

场景分析

通常我们说的“调用指定栏目内容”有以下几种情况:

dede调用指定栏目content
(图片来源网络,侵删)
  1. 调用一个栏目的最新文章列表:最常见的需求,比如在首页调用“公司新闻”栏目的最新5篇文章。
  2. 调用多个指定栏目的文章列表:比如在首页同时调用“产品中心”和“行业资讯”两个栏目的文章。
  3. 调用指定栏目的子栏目列表:调用某个栏目下的所有一级子栏目。
  4. 调用指定栏目的文章,并排除某些子栏目:比如调用“新闻中心”下的所有文章,但不包括“广告公告”这个子栏目。

下面我将针对这些场景,提供最常用的代码和详细解释。


使用 arclist 标签(最常用、最灵活)

arclist 是DedeCMS最强大的列表标签,可以满足绝大多数调用文章的需求。

调用一个指定栏目的最新文章

这是最基础的需求,假设你要调用栏目ID为 1 的“公司新闻”栏目的最新5篇文章。

代码:

dede调用指定栏目content
(图片来源网络,侵删)
{dede:arclist row='5' typeid='1'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
    </li>
{/dede:arclist}

代码详解:

  • {dede:arclist ...}: 调用文章列表的开始标签。
  • row='5': 表示获取的文章数量为5条。
  • typeid='1': 这是核心参数,指定要调用的栏目ID,你可以在后台“栏目管理”中找到对应栏目的ID。
  • [field:arcurl/]: 调用文章的链接地址。
  • [field:title/]: 调用文章的标题。
  • [field:pubdate ...]: 调用文章的发布日期。
    • function="MyDate('Y-m-d', @me)" 是一个格式化函数,将日期格式化为 年-月-日 的形式,你也可以改成 m-d 或其他格式。
  • </li>{/dede:arclist}: 循环的结束标签。

调用多个指定栏目的文章

如果你需要同时调用栏目ID为 12 的文章,只需要用英文逗号 分隔即可。

代码:

{dede:arclist row='8' typeid='1,2'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
    </li>
{/dede:arclist}
  • typeid='1,2': 指定调用栏目ID为1和栏目ID为2的所有文章,总共显示8条(row='8')。

调用指定栏目的文章,并排除某些子栏目

使用 typeidinnertext 结合可以实现更复杂的需求,假设你想调用栏目ID为 3 的“新闻中心”下的所有文章,但排除其子栏目ID为 5 的“广告公告”。

dede调用指定栏目content
(图片来源网络,侵删)

代码:

{dede:arclist typeid='3' channelid='1'}
    {dede:field name='typeid' runphp='yes'}
        if(@me == 5) {
            @me = "";
        } else {
            @me = "<li><a href='[field:arcurl/]'>[field:title/]</a></li>";
        }
    {/dede:field}
{/dede:arclist}

代码详解:

  • typeid='3': 先指定主栏目ID为3。
  • channelid='1': 指定内容模型ID(通常是文章模型,ID为1)。
  • {dede:field name='typeid' runphp='yes'}: 在循环中获取每篇文章所属的栏目ID,并启用PHP运行。
  • if(@me == 5): 判断如果当前文章的栏目ID等于5(即“广告公告”),则 @me 赋值为空字符串,即不显示。
  • else: 否则,生成标准的列表项HTML代码。
  • 这种方法比较灵活,但代码稍复杂,对于简单的排除,可以使用 notypeid 参数。

使用 channelartlist 标签(调用栏目及其文章)

如果你想在调用栏目列表的同时,在每个栏目下面显示该栏目的最新文章,channelartlist 是最佳选择。

场景:首页布局,显示“公司新闻”、“产品中心”等几个主要栏目,每个栏目下都带几条最新文章。

代码:

{dede:channelartlist typeid='1,2' row='2'}
    <div class="box">
        <h2><a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a></h2>
        <ul>
            {dede:arclist row='5'}
                <li><a href="[field:arcurl/]">[field:title/]</a></li>
            {dede:arclist}
        </ul>
    </div>
{/dede:channelartlist}

代码详解:

  • {dede:channelartlist ...}: 循环指定栏目的开始标签。
  • typeid='1,2': 指定要循环的栏目ID(只显示这两个栏目)。
  • row='2': 指定循环的栏目数量(只显示2个栏目)。
  • {dede:field name='typeurl'/}: 获取当前栏目的链接地址。
  • {dede:field name='typename'/}: 获取当前栏目的名称。
  • {dede:arclist row='5'}: channelartlist 内部arclist 会默认调用当前栏目的文章,所以这里不需要再写 typeid

使用 SQL 查询标签(最灵活,但需谨慎)

对于 arclist 无法满足的超复杂需求,可以直接使用 dede_sql 标签执行自定义的SQL语句。

场景:调用栏目ID为 1 的文章,并按自定义字段 click(点击量)排序。

代码:

{dede:sql sql='SELECT id, title, arcurl FROM dede_archives WHERE typeid=1 ORDER BY click DESC LIMIT 0, 5'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
    </li>
{/dede:sql}

代码详解:

  • {dede:sql sql='...'}: 执行自定义SQL语句的开始标签。
  • sql='...': 这里是完整的SQL查询语句。
    • SELECT id, title, arcurl FROM dede_archives: 从文章表 dede_archives 中查询文章ID、标题和链接。
    • WHERE typeid=1: 筛选条件,只查询栏目ID为1的文章。
    • ORDER BY click DESC: 按点击量 click 字段降序排列。
    • LIMIT 0, 5: 限制查询结果,从第0条开始,取5条(即前5条)。
  • [field:arcurl/][field:title/]: 在 sql 标签中,直接使用 field: 来获取查询结果中的字段。

⚠️ 警告:直接使用SQL有安全风险,请确保你的SQL语句是安全的,并且不要在生产环境中随意使用未经验证的SQL。


总结与最佳实践

适用场景 优点 缺点
arclist 绝大多数情况:调用单个/多个栏目的文章列表,可控制数量、排序、标题截取等。 功能强大,参数丰富,官方推荐,足以满足90%的需求。 参数众多,初学者可能需要查阅文档。
channelartlist 调用栏目列表,并在每个栏目下显示其子内容(文章/列表)。 结构清晰,一次循环搞定栏目和其内容,非常适合首页布局。 只能调用顶级栏目,灵活性不如 arclist
dede:sql 超复杂查询:需要联表查询、使用复杂函数或 arclist 无法实现的排序。 极度灵活,能实现任何数据库层面的操作。 有安全风险,代码可读性差,不易维护。不推荐新手使用

给你的建议:

  1. 首选 arclist:当你需要调用指定栏目内容时,第一反应就应该是 arclist,先去后台找到你要调用的栏目ID,然后使用 typeid='X' 参数。
  2. 检查模板缓存:修改了模板文件后,如果前台页面没有更新,请去后台“系统” -> “一键更新站点” -> “更新HTML”,并勾选“更新主页HTML”。
  3. 善用F12调试:如果调用的内容没有显示,使用浏览器开发者工具(按F12)检查HTML结构,看看标签是否被正确解析,或者是否有其他CSS/JS错误导致隐藏。

希望这份详细的指南能帮助你完美解决在DedeCMS中调用指定栏目内容的问题!

-- 展开阅读全文 --
头像
织梦autoindex如何设置从1开始计数?
« 上一篇 2025-12-16
C语言redecoration是什么?如何实现?
下一篇 » 2025-12-17

相关文章

取消
微信二维码
支付宝二维码

目录[+]