分类树 Category
{category} 是 DouPHP 专属的分类树标签,仅栏目型模块(module.column_module)可用,输出分类的嵌套树。它有两种模式:纯分类树,以及「分类树 + 每类内容」。
一、模式一:纯分类树
{category module="模块名" item=节点变量 [cur=当前分类ID] [key=键] [name=名称] [offset=跳过数]}
...
{categoryelse}
无分类时显示
{/category}
示例(cur=$cat_id 让匹配节点带上 cur=true 标记,模板据此高亮当前分类):
{category module="article" cur=$cat_id item=cat}
<li{if $cat.cur} class="cur"{/if}>
<a href="{url link='article.category' category_id=$cat.cat_id}">{$cat.cat_name}</a>
</li>
{categoryelse}
<li>暂无分类</li>
{/category}
二、模式二:分类树 + 每类内容
加 with="items" 后,每个分类节点会附带一段内容行(在节点的 list 字段):
{category module="模块名" with="items" [perCat=每类条数] [children=是否含子节点]
[excerpt=截字长度] item=节点变量}
...
{categoryelse}
无分类时显示
{/category}
示例:
{category module="article" with="items" perCat=5 item=cat}
<h3>{$cat.cat_name}</h3>
<ul>
{foreach from=$cat.list item=row}
<li>{$row.title}</li>
{/foreach}
</ul>
{/category}
三、参数说明
| 参数 | 说明 |
|---|---|
module |
模块名(字面标识符,禁止运行时变量) |
with |
仅接受字面量 "items",启用「分类树 + 每类内容」模式 |
perCat |
每个分类附带的内容条数(默认 5,仅 with="items" 时生效) |
children |
是否递归挂载子节点(仅 with="items" 时生效) |
cur |
当前激活分类 ID(仅纯树模式生效;引擎据此给 id 匹配的节点打 cur=true 标记,便于高亮。with="items" 模式忽略此参数) |
excerpt |
内容行 description 截字长度(默认 200) |
item / key / name / offset |
同 {foreach} |
四、节点结构
with="items" 模式下,每个节点(item)是一个数组,主要字段:
| 字段 | 含义 |
|---|---|
category_id |
分类 ID |
name / cat_name |
分类名称 |
list |
该分类下的内容行数组 |
child |
子节点数组(无子节点时为空) |
cur |
是否为当前激活分类(纯树模式 + cur= 时有意义) |
五、数据源
{category} 编译为 \Dou\Core\Facade\Portal::categoryFor($module, $props):
with="items"→ 走categoryTreeWithItems(分类树 + 每类内容);- 否则 → 走
categoryTree(纯分类树); with仅接受字面量"items",其它值编译期报错;- 仅栏目型模块可用;模块未启用 / 非栏目型时返回空数组,走
{categoryelse}。
六、循环层能力
与 {list} / {foreach} 一致:共享 item / key / name / offset、@property 循环属性、{break} / {continue}、{categoryelse} 空态分支。同请求内相同 module + props 亦有缓存。