You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TYPO3 9:如何递归统计指定根页面的子页面数量?

在TYPO3 9中递归统计根页面有效子页面数量(排除存储页面)

当然可以!TYPO3 9完全支持递归统计指定根页面的有效子页面数量(排除存储页面、隐藏/删除页面),咱们先看看你现有代码的问题,再给出正确的实现方案。

你的原有TypoScript问题分析

你写的代码有几个关键问题导致无法正常运行:

  • pidInList = <ROOT-PID> 写法错误,需要直接替换成实际的根页面PID(比如123),不能用占位符格式
  • 缺少递归配置,默认CONTENT元素只会查询当前PID的直接子页面,不会深入层级
  • andWhere 语法错误,应该直接把条件写在where属性里
  • 统计结果没有起别名,renderObj里直接调用field = count(*)无法正确获取值

修正后的原生TypoScript实现

下面是可以直接运行的代码,包含递归统计、排除存储页面及无效页面的逻辑:

20 = CONTENT
20 {
    table = pages
    select {
        # 给统计结果起别名,方便后续调用
        selectFields = COUNT(*) AS page_count
        # 替换成你的目标根页面PID
        pidInList = 123
        # 递归所有子层级(999代表无限深度,也可以指定具体数字比如3)
        recursive = 999
        # 排除隐藏、删除页面,以及存储页面(doktype=199是存储页面的默认值)
        where = hidden = 0 AND deleted = 0 AND doktype != 199
    }
    # 渲染统计结果
    renderObj = TEXT
    renderObj {
        field = page_count
        wrap = Counted valid pages: |
    }
}

关键参数说明

  • recursive = 999:开启递归查询,数字代表递归的最大深度,设置为999即可覆盖所有子层级
  • doktype != 199:排除存储页面,TYPO3中存储页面的默认doktype值是199,如果你的项目有自定义存储页面类型,需要对应调整这个值
  • selectFields = COUNT(*) AS page_count:通过别名让渲染对象能正确读取统计数值,避免直接调用count(*)的兼容性问题

其他可选实现方式

如果你的项目使用了VHS扩展(TYPO3常用的Fluid辅助扩展),在Fluid模板中可以更简洁地实现:

{namespace v=FluidTYPO3\Vhs\ViewHelpers}
Counted valid pages: {v:page.count(pid: 123, recursive: 999, excludeDoktypes: 199, includeHidden: false, includeDeleted: false)}

内容的提问来源于stack exchange,提问作者HeyDanny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 19:27:44