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
相关产品推荐
相关产品推荐

