假设你的顶级分类ID是 1,你想获取并显示其下所有直接子分类(二级分类),并且在每个子分类下,再显示该分类下的最新几篇文章。

我们将分步讲解,并提供完整的代码示例。
场景设定
假设我们有以下分类结构:
- 顶级分类ID: 1 (
产品中心)- 子分类ID: 5 (
产品A) - 子分类ID: 6 (
产品B) - 子分类ID: 7 (
产品C)
- 子分类ID: 5 (
我们的目标是:在页面上分别列出“产品A”、“产品B”、“产品C”,并在每个分类标题下,列出该分类下的最新5篇文章。
第一步:获取指定顶级分类下的所有子分类
织梦提供了一个强大的标签 {dede:channel},它可以用来获取分类列表,通过设置其属性,我们可以精确地获取到指定顶级分类下的直接子分类。

核心标签:{dede:channel}
typeid='1': 指定顶级分类的ID,织梦会自动查找此ID下的所有子分类。type='son': 这是关键参数,表示只获取当前分类的直接子分类(二级分类),而不包括孙分类(三级分类)。row='10': 设置要获取的子分类数量。noself='yes': 不包含顶级分类本身。
示例代码:
<h2>产品中心</h2>
<ul class="category-list">
{dede:channel typeid='1' type='son' row='10' noself='yes'}
<li>
<!-- 这里会循环输出每个子分类 -->
<a href="[field:typelink/]">[field:typename/]</a>
</li>
{/dede:channel}
</ul>
这段代码会输出类似下面的HTML:
<h2>产品中心</h2>
<ul class="category-list">
<li><a href="/plus/list.php?tid=5">产品A</a></li>
<li><a href="/plus/list.php?tid=6">产品B</a></li>
<li><a href="/plus/list.php?tid=7">产品C</a></li>
</ul>
第二步:在子分类循环内,调用该分类下的文章列表
这是最关键的一步,我们需要在 {dede:channel} 的循环内部,再次使用文章列表标签 {dede:arclist},并且要确保 arclist 的分类ID是当前循环到的子分类ID。

核心技巧:
在 {dede:channel} 循环中,每个子分类的信息(如ID、名称等)都可以通过 [field:xxx/] 获取。[field:id/] 就代表了当前子分类的ID,我们将这个ID传递给 {dede:arclist} 的 typeid 属性。
完整示例代码:
下面是一个完整的、可以直接使用的模板代码,实现了“指定某子分类输出”并附带其文章列表的功能。
<h2>产品中心</h2>
<div class="product-container">
{dede:channel typeid='1' type='son' row='10' noself='yes'}
<div class="product-category">
<!-- 1. 输出子分类标题 -->
<h3><a href="[field:typelink/]">[field:typename/]</a></h3>
<!-- 2. 在循环内,调用当前子分类下的文章列表 -->
<ul class="article-list">
{dede:arclist
typeid='[field:id]'
titlelen='30'
row='5'
orderby='pubdate'
orderway='desc'
}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span class="date">[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
</li>
{/dede:arclist}
</ul>
</div>
{/dede:channel}
</div>
代码解析:
-
外层循环
{dede:channel...}:typeid='1': 从顶级分类ID为1开始查找。type='son': 只查找它的直接子分类(产品A, B, C)。- 每次循环,
[field:id]的值就会变成5,6,7。
-
内层循环
{dede:arclist...}:typeid='[field:id]': 这是核心!它动态地将外层循环中当前子分类的ID(5, 6, 7)作为文章查询的分类ID,这样,每次内层循环查询的都是不同分类下的文章。titlelen='30': 截取文章标题长度为30个字符。row='5': 每个分类下只显示5篇文章。orderby='pubdate' orderway='desc': 按发布日期倒序排列,即最新的在最前面。
第三步:CSS样式(可选)
为了让页面更美观,你可以添加一些CSS样式。
.product-container {
display: flex;
flex-wrap: wrap;
gap: 20px;
}
.product-category {
border: 1px solid #eee;
padding: 15px;
border-radius: 5px;
width: calc(33% - 14px); /* 假设每行显示3个 */
box-sizing: border-box;
}
.product-category h3 {
margin-top: 0;
border-bottom: 2px solid #007bff;
padding-bottom: 10px;
}
.article-list {
list-style: none;
padding: 0;
}
.article-list li {
margin-bottom: 8px;
}
.article-list a {
text-decoration: none;
color: #333;
}
.article-list a:hover {
color: #007bff;
}
.article-list .date {
font-size: 12px;
color: #999;
margin-left: 10px;
}
其他常见需求与解决方案
如何只获取一个特定的子分类(比如ID为6的分类)?
如果不需要循环,只想单独获取某一个分类的信息或其下的文章,可以直接使用 {dede:arclist} 并指定 typeid。
示例:只显示ID为6的分类下的最新5篇文章
<h3>产品B 的最新文章</h3>
<ul>
{dede:arclist typeid='6' titlelen='30' row='5' orderby='pubdate'}
<li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:arclist}
</ul>
如何获取指定子分类的详细信息(如分类描述、缩略图等)?
织梦的 {dede:channel} 标签不仅可以输出链接和名称,还可以输出分类的其他信息。
常用字段:
[field:id]: 分类ID[field:typename]: 分类名称[field:typelink]: 分类链接[field:seotitle]: SEO标题[field:description]: 分类描述[field:typedir]: 分类目录[field:litpic]: 分类缩略图
示例:显示子分类的名称、描述和缩略图
{dede:channel typeid='1' type='son' row='10' noself='yes'}
<div class="category-box">
<img src="[field:litpic/]" alt="[field:typename/]" />
<h3><a href="[field:typelink/]">[field:typename/]</a></h3>
<p>[field:description function='cn_substr(@me, 100)'/]</p> <!-- 截取描述前100个字符 -->
</div>
{/dede:channel}
| 需求 | 核心标签/方法 | 关键参数/技巧 |
|---|---|---|
| 获取指定顶级分类的所有子分类列表 | {dede:channel} |
typeid='顶级分类ID' type='son' |
| 获取特定一个子分类 | 直接使用 {dede:arclist} 或 {dede:channel} |
typeid='指定的子分类ID' |
| 在子分类下循环显示其文章 | 嵌套使用:{dede:channel} 内部放 {dede:arclist} |
arclist 的 typeid 属性设为 [field:id] |
| 获取子分类的详细信息 | {dede:channel} |
使用 [field:xxx/] 调用各种字段,如 litpic, description 等 |
通过以上方法,你就可以灵活地在织梦模板中实现“指定某子分类输出”及其相关内容的各种需求了。
