dede如何调用指定栏目的子栏目文章?

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

调用指定一级栏目下所有子栏目的文章(最常用)

这种方法最常见,比如你想在“产品中心”这个栏目下,显示其所有子栏目(如“产品A”、“产品B”)的最新文章。

dede调用指定栏目下的子栏目文章
(图片来源网络,侵删)

核心思路:

  1. 找到“产品中心”栏目的ID(假设为 5)。
  2. 使用 arclist 标签,并将 typeid 设置为 5
  3. 关键一步:给 arclist 添加 son='yes' 属性,这样它就会自动查找 typeid 及其所有子栏目下的文章。

示例代码:

假设“产品中心”栏目的ID是 5,你可以在模板文件(如 product_center.htm)中放入以下代码:

<h2>产品中心最新文章</h2>
<ul>
    {dede:arclist typeid='5' son='yes' titlelen='30' row='10' orderby='pubdate'}
    <li>
        <a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
        <span class="time">([field:pubdate function="MyDate('Y-m-d', @me)"/])</span>
    </li>
    {/dede:arclist}
</ul>

代码解释:

dede调用指定栏目下的子栏目文章
(图片来源网络,侵删)
  • {dede:arclist ...}:织梦的文章列表调用标签。
  • typeid='5':指定要调用文章的顶级栏目ID,这里是你想要调用的父栏目的ID。
  • son='yes'核心属性,表示调用 typeid 指定栏目及其所有直接子栏目下的文章,len='30'`:标题长度,截取30个字符。
  • row='10':获取文章的数量,这里显示10条。
  • orderby='pubdate':排序方式,按发布时间降序排列。
  • [field:arcurl/]:文章的链接地址。
  • [field:title/]:文章的标题。
  • [field:pubdate ...]:文章的发布时间,并用 MyDate 函数格式化为 年-月-日 的格式。

调用指定栏目下某个特定子栏目的文章

如果你只想显示“产品中心”下的“产品A”的文章,而不是所有子栏目。

核心思路:

  1. 找到“产品A”这个子栏目的ID(假设为 8)。
  2. 直接在 arclist 标签中使用 typeid='8'不需要 son 属性

示例代码:

<h2>产品A最新文章</h2>
<ul>
    {dede:arclist typeid='8' titlelen='30' row='10' orderby='pubdate'}
    <li>
        <a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
    </li>
    {/dede:arclist}
</ul>

代码解释:

dede调用指定栏目下的子栏目文章
(图片来源网络,侵删)
  • typeid='8':这里直接填写子栏目的ID,arclist 默认就只调用这个ID栏目下的文章。

调用指定栏目下所有子栏目(包括孙栏目)的文章

如果你不仅想调用“产品中心”(ID=5)的直接子栏目(产品A、产品B),还想调用其孙栏目(如“产品A-1”)的文章。

核心思路:

  1. 找到“产品中心”栏目的ID(假设为 5)。
  2. 使用 GetSonIds 函数获取该栏目下所有层级的子栏目ID。
  3. 将获取到的ID字符串赋值给 arclisttypeid 属性。

示例代码:

<h2>产品中心及下级所有栏目最新文章</h2>
<ul>
    {dede:arclist typeid='GetSonIds(5)' titlelen='30' row='10' orderby='pubdate'}
    <li>
        <a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
        <span class="cat">([field:typename/])</span>
    </li>
    {/dede:arclist}
</ul>

代码解释:

  • typeid='GetSonIds(5)'GetSonIds() 是织梦的一个底层函数,它会递归地获取ID为 5 的栏目下的所有子栏目ID,并返回一个用逗号分隔的ID字符串(5,8,9,10)。
  • [field:typename/]:显示文章所属的栏目名称,方便用户知道文章来自哪个子栏目。

重要补充:栏目路径判断

在实际应用中,你可能希望仅在“产品中心”这个父栏目页面才显示子栏目的文章列表,而在其子栏目(如“产品A”)页面不显示,因为子栏目页面有自己的文章列表。

这时,你需要使用 {dede:field name='typeid'/} 来获取当前页面的栏目ID,并进行判断。

示例代码(在父栏目模板中使用):

{dede:field name='typeid' runphp='yes'}
    // 获取当前页面的栏目ID
    $currentTypeId = @me;
    // 判断当前页面是否是ID为5的“产品中心”栏目
    if ($currentTypeId == 5) {
        // 如果是,则执行子栏目文章的调用
        @me = '
        <h2>产品中心最新文章</h2>
        <ul>
            {dede:arclist typeid="5" son="yes" titlelen="30" row="10" orderby="pubdate"}
            <li><a href="[field:arcurl/]">[field:title/]</a></li>
            {/dede:arclist}
        </ul>
        ';
    } else {
        // 如果不是,则不显示任何内容(或显示其他内容)
        @me = '';
    }
{/dede:field}

代码解释:

  • {dede:field name='typeid' runphp='yes'}:获取当前页面的栏目ID,并启用PHP运行。
  • $currentTypeId = @me;:将获取到的ID存入变量。
  • if ($currentTypeId == 5):判断当前栏目ID是否为你的目标父栏目ID。
  • @me = '...':如果条件成立,就将赋值给 @me 的字符串(即完整的HTML和织梦标签)输出到模板中。
  • @me = '';:如果条件不成立,就输出空字符串。
需求 核心标签和属性 说明
调用父栏目及其所有直接子栏目的文章 {dede:arclist typeid='父栏目ID' son='yes'} 最常用,适用于在父栏目页展示下属内容。
调用指定子栏目的文章 {dede:arclist typeid='子栏目ID'} 直接指定子栏目ID,不涉及父栏目。
调用父栏目下所有层级子栏目的文章 {dede:arclist typeid='GetSonIds(父栏目ID)'} 递归获取所有下级栏目ID,包括孙栏目。
仅在父栏目页显示 结合 {dede:field name='typeid' runphp='yes'} 进行判断 实现更灵活的模板逻辑,避免在子栏目页重复显示。

希望这些详细的解释和示例能帮助您完美地实现织梦DedeCMS的子栏目文章调用功能!

-- 展开阅读全文 --
头像
C语言程序设计,现代方法第2版有何特色?
« 上一篇 2025-12-14
C语言程序设计_现代方法适合谁学?
下一篇 » 2025-12-14

相关文章

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

目录[+]