分类树 Category

分类树 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 亦有缓存。

添加日期: