栏目列表与子分类嵌套解决栏目树输出问题:栏目列表循环输出某一层的子栏目,子分类列表在循环内部递归展开更深层级,页面分类列表则面向分类页的筛选场景。三者组合可以覆盖导航、筛选栏与多级栏目页的全部结构需求。
栏目列表默认输出顶级栏目,父ID参数指定输出某一栏目的直接子栏目,栏目ID参数只输出指定栏目,支持逗号分隔多个,输出栏目自身并把子树挂在子分类字段上。字段侧提供编号、名称、链接、智能链接、别名、图标、排序、内容数量、标签总数、是否有子分类与子分类列表。
内容数量是栏目的反规范化统计值,标签总数按启用且被已发布内容引用的口径统计,与全局标签总数的统计口径一致。是否有子分类与子分类列表两个字段用于条件渲染,无子栏目时不输出空的展开区域。
子分类列表必须嵌套在栏目列表或页面分类列表内部使用,递归遍历当前栏目的子分类,支持任意层级嵌套。模板层面只需一层写法,数据侧的栏目树天然包含完整嵌套结构,展开深度由栏目数据决定。
页面分类列表面向分类页筛选场景:自动感知参数开启后,父栏目页输出其子栏目、叶子栏目页回退输出兄弟栏目;含自身参数控制列表中是否包含当前栏目本身。当父栏目下的子栏目全部被禁用时,列表输出为空,不会错误回退成顶级栏目导航。
筛选栏的全部按钮由归属链接与归属激活两个全局标签承担,判定规则与页面分类列表的回退规则完全一致:有子栏目的栏目页归属为自身,叶子栏目页归属为父栏目。二级栏目页点击全部按钮回到聚合视图并正确高亮,筛选列表与按钮语义始终对应。
筛选按钮的链接与高亮来自同一个判定源,模板不需要为不同的栏目层级写不同的分支。当前栏目有子栏目时全部按钮指向自身,叶子栏目页指向父栏目,两种情况下按钮的激活类都由行内三元输出,视觉状态与链接语义始终一致。
两个列表标签都遵循同一条状态规则:只有启用与隐藏状态的栏目参与结构构建,禁用栏目整体不出现;隐藏栏目不进导航但内容仍可被标签调用。内容聚合遵循智能规则——顶级栏目自身无已发布内容且存在子栏目时递归聚合子栏目内容,列表与分页统计使用同一逻辑,展示口径一致。
| 维度 | 栏目列表 | 页面分类列表 |
|---|---|---|
| 典型场景 | 导航与栏目树输出 | 分类页筛选栏 |
| 自动感知 | 不支持 | 支持,按页面回退 |
| 嵌套字段 | 子分类列表 | 子分类列表 |
| 激活状态 | 无 | 激活与激活含祖先字段 |
多级栏目菜单的推荐结构是外层栏目列表加条件判断加内层子分类列表,筛选栏的结构是归属按钮加页面分类列表加激活三元。两种结构都不需要在模板里写死栏目编号,后台调整栏目树后前端自动跟随。
子分类嵌套带来的直接收益是模板与栏目结构解耦:模板只描述如何渲染一层栏目,栏目树由数据侧维护。这也是使用手册建议用嵌套标签而不是手写多级菜单的原因。
如果栏目树较深,建议在筛选栏只输出一层子栏目,多级导航交给页头菜单承担;分类页的筛选深度与其内容组织方式保持一致,用户切换时的认知成本最低。
评论
加载中...