dede tag如何指定栏目?

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

dede:arclist

dede:arclist 是 DedeCMS 中用于调用文章列表的最强大、最灵活的标签,要指定栏目,主要通过其 typeid 属性来实现。

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

基础用法:指定单个栏目

这是最简单的用法,用于调用某一个特定栏目下的文章。

语法:

{dede:arclist typeid='栏目ID' titlelen='30' row='10'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
    </li>
{/dede:arclist}

参数解释:

  • typeid='栏目ID': 这是关键参数,它告诉 DedeCMS 你想调用哪个栏目下的文章,你需要将 '栏目ID' 替换为你目标栏目的实际数字 ID。
    • 如何获取栏目ID?
      1. 登录 DedeCMS 后台。
      2. 进入「[栏目]」-「[栏目管理]」。
      3. 将鼠标移动到你想要的栏目名称上,浏览器左下角的状态栏会显示该栏目的链接,.../catalog_add.php?cid=123,这里的 123 就是该栏目的 ID,len='30'`: 标题长度,截取 30 个字符。
  • row='10': 调用文章的数量,共调用 10 篇。
  • [field:arcurl/]: 文章的链接地址。
  • [field:title/]: 文章的标题。
  • [field:pubdate ... /]: 文章的发布日期,function="MyDate(...)" 是一个格式化函数,将时间戳格式化为 年-月-日 的形式。

进阶用法:指定多个栏目

如果你想同时调用多个不同栏目下的文章,可以将它们的 ID 用英文逗号 隔开。

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

语法:

{dede:arclist typeid='5,6,8' titlelen='30' row='10'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <span>[field:typename/]</span> <!-- 显示文章所属的栏目名称 -->
    </li>
{/dede:arclist}

参数解释:

  • typeid='5,6,8': 这个标签会同时调用 ID 为 5、6、8 的这三个栏目下的文章,总共 10 篇(根据 row 的值)。
  • [field:typename/]: 这是一个非常有用的字段,用于显示当前文章所属的栏目名称,在多栏目混合调用时,它可以让你清楚地知道每篇文章来自哪里。

高级用法:指定栏目及其子栏目

这是非常常见的需求,比如调用“产品中心”栏目及其所有下级栏目(如“产品A”、“产品B”)下的文章。

语法:

{dede:arclist typeid='5,0' titlelen='30' row='10'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
    </li>
{/dede:arclist}

参数解释:

  • typeid='5,0': 这是实现调取指定栏目及其子栏目的“标准”方法。
    • 5: 是你指定的顶级栏目(如“产品中心”)的 ID。
    • 0: 是一个特殊值,代表“所有子栏目”,当 typeid 中包含 0 时,DedeCMS 会自动查找并包含 ID 为 5 的栏目下的所有层级的子栏目。

更简洁的写法(推荐): DedeCMS 的 typeid 参数本身就支持自动包含子栏目,只要你只写上顶级栏目的 ID,系统默认就会包含其所有子栏目。

{dede:arclist typeid='5' titlelen='30' row='10'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
    </li>
{/dede:arclist}

这种写法更简洁,并且效果与 typeid='5,0' 基本相同(在默认配置下),推荐使用这种。


排除指定栏目

有时你可能想调用除某个栏目外的所有文章,这需要结合 SQL 语句来实现。

语法:

{dede:arclist row='10' titlelen='30'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
    </li>
{/dede:arclist}

如何实现排除? 你需要修改 typeid 的值,假设你的所有顶级栏目 ID 是 1, 2, 3, 4, 5,但你不想调用 ID 为 3 的栏目。

  • 方法1:手动列出所有需要的 ID

    {dede:arclist typeid='1,2,4,5' row='10' titlelen='30'}
        ...
    {/dede:arclist}

    如果栏目很多,这种方法很麻烦。

  • 方法2:使用 SQL 排除(更强大)

    {dede:arclist typeid='all' row='10' titlelen='30' sql='WHERE typeid NOT IN (3)'}
        ...
    {/dede:arclist}

    参数解释:

    • typeid='all': 表示从所有栏目中选取。
    • sql='WHERE typeid NOT IN (3)': 这是附加的 SQL 条件,typeid NOT IN (3) 的意思是“栏目 ID 不在 (3) 这个集合中”,从而实现了排除 ID 为 3 的栏目的目的,你也可以排除多个,如 NOT IN (3, 7)

实际应用场景总结

场景 需求 typeid 参数值 示例代码
单个栏目 只调用“公司新闻”下的文章 typeid='2' {dede:arclist typeid='2' row='5'}...{/dede:arclist}
多个栏目 调用“新闻”和“公告”下的文章 typeid='2,3' {dede:arclist typeid='2,3' row='5'}...{/dede:arclist}
栏目及子栏目 调用“产品中心”及其所有子产品下的文章 typeid='5' {dede:arclist typeid='5' row='10'}...{/dede:arclist}
排除栏目 调用所有文章,但排除“关于我们”栏目 typeid='all'sql {dede:arclist typeid='all' sql='WHERE typeid NOT IN(4)'}...{/dede:arclist}
当前栏目 在文章详情页或列表页,调用当前栏目下的文章 typeid='typeid' {dede:arclist typeid='typeid' row='5'}...{/dede:arclist}

注意: typeid='typeid' 是一个特殊用法,它只在文章内容页(article_article.htm)或栏目列表页(list_栏目ID.htm)模板中有效,它会自动获取当前页面对应的栏目 ID。

希望这份详细的指南能帮助你完全掌握 DedeCMS 中 dede:arclist 指定栏目的用法!

-- 展开阅读全文 --
头像
织梦UTF8首页乱码,如何解决?
« 上一篇 今天
C语言如何实现十六进制转十进制?
下一篇 » 今天
取消
微信二维码
支付宝二维码

目录[+]