核心思路
核心思路都是利用 {dede:channel} 标签自带的两个重要属性:

(图片来源网络,侵删)
row='数字':用于控制显示的栏目数量。typeid='栏目ID':用于指定从哪个栏目开始调用(其子栏目)。
使用 row='1' (最直接、最常用)
这是最简单、最直接的方法。row 属性的作用就是“显示几行”,所以设置 row='1' 就只会显示第一个栏目。
适用场景:
- 只想在页面的某个特定位置(如页头导航栏的第一个、侧边栏的第一个推荐栏目等)单独调用第一个栏目。
示例代码:
{dede:channel type='top' row='1'}
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}
代码解释:
{dede:channel type='top' row='1'}:type='top': 表示调用顶级栏目,如果你想调用当前栏目的第一个子栏目,可以去掉type属性或改为type='son'。row='1': 关键,表示只获取一个栏目记录。
[field:typelink/]: 输出该栏目的链接地址。[field:typename/]: 输出该栏目的名称。
使用 typeid='起始栏目ID' + row='1' (灵活性高)
这种方法更灵活,可以指定从哪个栏目开始获取它的第一个子栏目。
适用场景:
- 页(文章页)或列表页,你想获取当前栏目的“第一个子栏目”。
- 在一个自定义的模板页面,你想获取指定ID的栏目的第一个子栏目。
示例代码:
假设当前栏目ID是 {dede:field.id/},你想获取它的第一个子栏目。
{dede:channel typeid='{dede:field.id/}' row='1'}
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}
代码解释:
typeid='{dede:field.id/}': 关键,将typeid的值设置为当前页面的栏目ID,这样{dede:channel}就会去查询这个ID栏目的子栏目列表。row='1': 再从这个子栏目列表中只取第一个。- 这个组合
{dede:field.id/}在内容页和列表页中可以直接获取当前栏目的ID,非常方便。
结合 runphp='yes' 进行二次判断 (最灵活、功能最强)
当你不仅仅需要第一个栏目,还需要对这个栏目进行一些复杂的逻辑判断时(如果第一个栏目是某个特定ID,则显示不同的样式),可以使用 runphp。

(图片来源网络,侵删)
适用场景:
- 需要对第一个栏目进行额外处理,比如判断其ID、名称等,并据此执行不同操作。
示例代码:
{dede:channel type='top' row='1' runphp='yes'}
$typeid = @me['id']; // 获取第一个栏目的ID
$typename = @me['typename']; // 获取第一个栏目的名称
// 在这里进行你的PHP逻辑判断
if ($typeid == 1) {
// 如果第一个栏目ID是1,则输出一个特殊的链接样式
@me = "<a href='{@me['typelink']}' class='special-class'>{$typename}</a>";
} else {
// 否则输出普通链接
@me = "<a href='{@me['typelink']}'>{$typename}</a>";
}
{/dede:channel}
代码解释:
runphp='yes': 开启PHP代码执行功能。@me: 这是一个特殊的变量,在runphp中代表{dede:channel}标签当前循环到的那条记录(一个数组)。$typeid = @me['id'];: 我们从@me数组中提取出id、typename、typelink等字段,存入PHP变量中。if (...) { ... } else { ... }: 在这里编写你的PHP逻辑。@me = "...": 非常重要,在PHP逻辑的最后,你必须将最终要输出的HTML字符串赋值给@me变量,织梦会输出这个变量的值。
总结与推荐
| 方法 | 优点 | 缺点 | 推荐场景 |
|---|---|---|---|
row='1' |
代码最简单,最直观 | 灵活性相对较低 | 绝大多数情况下,这是首选,当你只需要单纯地获取第一个栏目时,用它就对了。 |
typeid='...' |
灵活性高,可以指定来源 | 需要知道或获取起始栏目的ID | 页/列表页获取当前栏目的第一个子栏目,或在指定栏目下获取其子栏目。 |
runphp |
功能最强大,可进行复杂逻辑 | 代码较复杂,需要懂PHP | 当需要对第一个栏目进行条件判断、循环、拼接复杂HTML结构时。 |
给你的建议:
- 如果你只是想简单获取第一个栏目,直接使用
row='1'。 - 如果你是在一个子页面,想获取它父栏目的第一个“兄弟”栏目(即顶级栏目下的第一个),使用
typeid='0' row='1'。 (typeid='0' 表示从顶级栏目开始查询) - 如果你是在内容页,想获取当前栏目的第一个子栏目,使用
typeid='{dede:field.id/}' row='1'。 - 只有当
row='1'无法满足你的业务逻辑时,才考虑使用更复杂的runphp方法。

(图片来源网络,侵删)
