TYPO3 9:递归计数根页面的子页面

TYPO3 9: Recursive count subpages of root page

TYPO3 是否能够递归收集并显示特定根页面的子页面数量(无存储)?试过这个打字错误的片段,但不知何故它不起作用。

20 = CONTENT
20 {
   table = pages
   select {
      selectFields = count(*)
      pidInList = <ROOT-PID>
      andWhere = (hidden=0 AND deleted=0)
   }
   renderObj = COA
   renderObj {
      10 = TEXT
      10 {
         field = count(*)
         wrap = Counted pages: |
      }
   }
}

也许TYPO3 9有什么功能?

提前致谢!

由于数据存储为树,因此您需要递归以从所有子级别获取所有页面。

由于您无法知道深度(或期望有很大的数字),并且拼写错误作为一种配置语言没有递归构建,因此在纯拼写解决方案中构建会很复杂。

这里用 PHP 编写的 userfunc 和递归可能是一个快速的解决方案。


总的来说:
为什么需要那个号码?
也许有更简单的解决方案


您可以从这里开始使用纯打字解决方案:

对于每个菜单项,您可以获得所有页面的总和,最多可深入三个级别,以及下一级的页面数。

temp.menudef = TMENU
temp.menudef {
    #target = _top
    noBlur = 1
    #expAll = 1
    wrap = <ol>|</ol>
    NO = 1
    NO {
        stdWrap.cObject = COA
        stdWrap.cObject {
            1 = TEXT
            1.field = title
            1.required = 1

            10 = LOAD_REGISTER
            10.level1uids.cObject = COA
            10.level1uids.cObject {
                10 = CONTENT
                10.table = pages
                10.select.pidInList.data = field:uid
                10.renderObj = TEXT
                10.renderObj.field = uid
                10.renderObj.wrap = |,
                20 = TEXT
                #20.field = uid
                20.data = field:uid
            }
            10.level2uids.cObject < .10.level1uids.cObject
            10.level2uids.cObject.10.select.pidInList.data = register:level1uids
            10.level2uids.cObject.20.data = register:level1uids

            10.level3uids.cObject < .10.level1uids.cObject
            10.level3uids.cObject.10.select.pidInList.data = register:level2uids
            10.level3uids.cObject.20.data = register:level2uids

            20 = TEXT
            20.wrap = <!-- --> (|
            20.required = 1
            20.override.numRows.table = pages
            20.override.numRows.select.pidInList.data = register:level3uids
            20.override.stdWrap.ifEmpty =
            20.override.stdWrap.ifEmpty.wrap = |

            30 = TEXT
            30.wrap = -|)
            30.required = 1
            30.override.numRows.table = pages
            30.override.numRows.select.pidInList.field = uid
            30.override.stdWrap.ifEmpty =
            30.override.stdWrap.ifEmpty.wrap = |
        }

    }
    NO.wrapItemAndSub = <li>|</li>
    NO.accessKey = 1

    ACT < .NO
    #ACT = 1
    ACT.wrapItemAndSub = <li class="activ">|</li>

    SPC < .NO
    #SPC = 1
    SPC.wrapItemAndSub = <li><span class="spacer">|</span></li>

    CUR < .ACT
    #CUR = 1
    CUR.linkWrap = <span class="act">|</span>
    CUR.wrapItemAndSub = <li class="current">|</li>
}


temp.submenu = HMENU
temp.submenu {
    entryLevel = 0
    wrap = <div  class="smenu">|</div>

    1 < temp.menudef
    2 < .1
    3 < .2
    4 < .3
    5 < .4
}