织梦如何调用子栏目下的文章?

99ANYc3cd6
预计阅读时长 20 分钟
位置: 首页 织梦建站 正文

最常用的方法(循环子栏目并分别调用其文章)

这是最标准、最灵活的方法,它会先获取当前栏目的所有直接子栏目,然后对每一个子栏目,分别调用该栏目下的文章列表。

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

适用场景:

  • 首页调用所有一级栏目的最新文章。
  • 在一个栏目页,调用其所有直接子栏目的最新文章。
  • 希望每个子栏目的文章列表样式可以独立控制。

核心标签解析:

  1. {dede:channel}: 用于获取栏目列表。

    • typeid='top': 获取顶级栏目,如果在首页使用,通常需要这个,如果在栏目页,typeid 可以留空,默认获取当前栏目的子栏目。
    • typeid='当前栏目ID': 获取指定栏目ID的子栏目。
    • row='10': 获取子栏目的数量。
    • currentstyle='...: 为当前栏目(或其子栏目)应用特定的样式。
  2. {dede:arclist}: 用于获取文章列表。

    • typeid='son': 这是关键! 表示调用当前 {dede:channel} 循环到的这个子栏目及其所有下级栏目的文章,如果只想调用直接子栏目的文章,可以使用 typeid='self'
    • row='5': 调用文章数量。
    • titlelen='30': 标题长度。
    • infolen='100': 简介(长度。

完整代码示例:

假设我们要在首页调用所有一级栏目下的文章,每个栏目显示5篇文章。

{dede:channel type='top' row='8'}
    <h2><a href="[field:typelink/]">[field:typename/]</a></h2>
    <ul>
        {dede:arclist row='5' titlelen='30' infolen='100'}
        <li>
            <a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
            <span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
        </li>
        {/dede:arclist}
    </ul>
{/dede:channel}

代码解析:

织梦调用子栏目下的文章
(图片来源网络,侵删)
  1. {dede:channel type='top' row='8'}: 循环获取网站的所有顶级栏目(一级栏目),最多获取8个。
  2. <h2>...</h2>: 显示每个子栏目的名称和链接。
  3. {dede:arclist ...}: {dede:channel} 的循环内部typeid='son' 会动态地指向当前循环到的那个子栏目,这段代码会分别调用每个子栏目下的5篇文章。
  4. </ul>: 关闭当前子栏目的文章列表。

调用指定ID的子栏目下的文章

如果你明确知道要调用哪些子栏目,可以直接通过它们的ID来调用,这样效率更高,也更直接。

适用场景:

  • 只想调用几个特定子栏目的文章,而不是全部。
  • 布局比较固定,例如一个新闻区、一个产品区。

核心标签解析:

  • {dede:arclist}: 直接使用 typeid='子栏目ID1,子栏目ID2,子栏目ID3' 的形式。

完整代码示例:

假设栏目ID为 5, 6, 7 的三个子栏目,我们想分别调用它们下的文章。

<!-- 调用ID为5的子栏目下的文章 -->
<h2>栏目一</h2>
<ul>
    {dede:arclist typeid='5' row='5' titlelen='30'}
    <li><a href="[field:arcurl/]">[field:title/]</a></li>
    {/dede:arclist}
</ul>
<!-- 调用ID为6的子栏目下的文章 -->
<h2>栏目二</h2>
<ul>
    {dede:arclist typeid='6' row='5' titlelen='30'}
    <li><a href="[field:arcurl/]">[field:title/]</a></li>
    {/dede:arclist}
</ul>
<!-- 调用ID为7的子栏目下的文章 -->
<h2>栏目三</h2>
<ul>
    {dede:arclist typeid='7' row='5' titlelen='30'}
    <li><a href="[field:arcurl/]">[field:title/]</a></li>
    {/dede:arclist}
</ul>

或者,如果你希望把这些栏目的文章都混在一起显示:

<h2>混合栏目文章</h2>
<ul>
    {dede:arclist typeid='5,6,7' row='10' titlelen='30'}
    <li>
        <span>[field:typelink/]</span> <!-- 显示文章所属栏目 -->
        <a href="[field:arcurl/]">[field:title/]</a>
    </li>
    {/dede:arclist}
</ul>

调用当前栏目的所有子栏目(包括多级)下的文章

你可能需要一个栏目页(产品中心”)来展示其下所有层级的子栏目里的所有文章。

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

适用场景:

  • 产品展示、文章归档等页面,需要汇总所有下级栏目的内容。

核心标签解析:

  • {dede:arclist}: 使用 typeid='son'

完整代码示例:

将此代码放在一个栏目模板(如 list_article.htm)中,当你在后台选择这个模板的栏目时,就会显示其所有子栏目(无论层级)的文章。

<h2>所有产品列表</h2>
<ul>
    {dede:arclist row='20' titlelen='50'}
    <li>
        <a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
        <span>分类:[field:typename/]</span>
        <span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
    </li>
    {/dede:arclist}
</ul>

注意:这里 typeid 属性被省略了,在栏目列表页(list_*.htm)模板中,{dede:arclist} 会默认调用当前栏目的文章,而加上 typeid='son' 后,它就会调用当前栏目的所有直接子栏目的文章,要调用包括多级子栏目在内的所有文章,需要配合SQL查询或使用更复杂的标签组合,但对于大多数情况,typeid='son' 已经能满足需求,它会递归查找。


重要补充:channelartlist 标签(更高级的用法)

{dede:channelartlist} 是一个专门为“栏目+文章”组合设计的标签,它比 {dede:channel} + {dede:arclist} 的组合更强大,可以减少一次数据库查询,效率更高。

适用场景:

  • 首页或频道页,需要分别展示不同栏目的区块,每个区块包含栏目名称和其下的文章。

核心标签解析:

  • {dede:channelartlist}: 循环指定栏目及其子栏目。
    • typeid='top,5,6': 指定要循环的顶级栏目或特定栏目ID。
    • cacheid: 缓存ID,用于提升性能。

完整代码示例:

{dede:channelartlist typeid='top'}
    <div class="channel-block">
        <h2><a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a></h2>
        <div class="article-list">
            {dede:arclist row='6' titlelen='40'}
            <a href="[field:arcurl/]">[field:title/]</a>
            {/dede:arclist}
        </div>
        <div class="more"><a href="{dede:field name='typeurl'/}">查看更多 &gt;</a></div>
    </div>
{/dede:channelartlist}

代码解析:

  1. {dede:channelartlist typeid='top'}: 循环所有顶级栏目。
  2. <h2>...</h2>: 显示当前循环到的栏目的名称和链接({dede:field name='typeurl'}{dede:field name='typename'})。
  3. {dede:arclist ...}: {dede:channelartlist} 内部{dede:arclist} 默认就是调用当前栏目的文章,无需再指定 typeid
  4. </div>: 关闭当前栏目的区块。

总结与选择建议

方法 核心标签 优点 缺点 适用场景
方法一 {dede:channel} + {dede:arclist} 灵活,逻辑清晰,最常用 嵌套标签,代码稍长 通用场景,如首页调用各栏目文章,栏目页调用其子栏目文章。
方法二 {dede:arclist} 直接、高效,代码简单 需要明确知道栏目ID,不灵活 特定需求,只调用几个已知ID的子栏目。
方法三 {dede:arclist} 简单,能汇总下级内容 功能有限,typeid='son' 不一定包含所有层级 栏目归档页,需要展示当前栏目所有下级内容。
方法四 {dede:channelartlist} 效率高,代码结构更优雅 功能相对固定,不如方法一灵活 首页/频道页布局,需要将栏目和其文章紧密地组合在一起展示。

对于初学者,强烈推荐从方法一开始学习,因为它最能体现织梦标签的嵌套和逻辑关系,当你对织梦有更深入的了解后,再根据具体需求选择更高效的方法。

-- 展开阅读全文 --
头像
织梦如何调用指定栏目的关键词?
« 上一篇 01-15
dede如何同时获取父栏目与子栏目?
下一篇 » 01-15
取消
微信二维码
支付宝二维码

目录[+]