首页 > 解决方案 > TYPO3 9:递归计算根页面的子页面

问题描述

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中有一些功能?

提前致谢!

标签: typo3-9.x

解决方案


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

由于您不知道深度(或期望很高的数字),并且作为配置语言的打字稿没有递归,因此在纯打字稿解决方案中构建会很复杂。

在这里,用 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
}

推荐阅读