Menu with recursive count of subpages

Submitting your vote...
Rating: 3.3 of 5. 6 vote(s).
Click the rating bar to rate this item.

In my menu I want to display the count of subpages to each page and the count all pages beneath every page.

 

example:

 

root (13/3)

+-page (3/2)

| +-page (1/1)

| | +-page (0/0)

| +-page (0/0)

+-page (6/3)

| +-page (3/2)

| | +-page (0/0)

| | +-page (1/1)

| | +-page (0/0)

| +-page (0/0)

| +-page (0/0)

+-page (1/1)

+-page (0/0)

 

The first number gives the count of all pages beneath

the second number gives the number of direct children

 

 

Solution:

 

This can be done by creating a list of page ids for subpages and their subpages.

In the example below the list of ids for each level is stored in a seperate register value.

 

lib.subcountmenu = COA
lib.subcountmenu {
  10 = HMENU
  10.1 = TMENU
  10.1 {
    expAll = 1
    wrap = <ul>|</ul>
    NO {
      stdWrap.cObject = COA
      stdWrap.cObject {
        				# Here we create a couple register vars which contains a accumulated list of all page ids from each level
        10 = LOAD_REGISTER
        				# 1st we collect the page ids of the current level
        10.level1uids.cObject = COA
        10.level1uids.cObject {
          					# We select the ids of pages that have the id of the current page as parent page.	
          					# Except if the page has the "Hide in menu" checkbox is enabled or the pagetype is
          					# either "Not in menu" (5) or "Backend User Section" (6)
          10 = CONTENT
          10.table = pages
          10.select.pidInList.data = field:uid
          10.select.where = nav_hide!=1 AND doktype!=5 AND doktype!=6
          					# Each page id is rendered with a comma at the end, creating a commaseperated list of page ids
          10.renderObj = TEXT
          10.renderObj.field = uid
          10.renderObj.wrap = |,
          					# Finally we add the id of the current page to the list.
          20 = TEXT
          20.data = field:uid	
        }
        				# For the 2nd level we use the list of page ids we generated for the current level
        10.level2uids.cObject < .10.level1uids.cObject
        10.level2uids.cObject.10.select.pidInList.data = register:level1uids
        				# And finally we add the 1st list of ids to the 2nd list.
        10.level2uids.cObject.20.data = register:level1uids
         
        				# For the 3rd level, we repeat the procedure from the 2nd level.
        				# If your site has more than 3 levels, you should repeat the procedure.
        10.level3uids.cObject < .10.level1uids.cObject
        10.level3uids.cObject.10.select.pidInList.data = register:level2uids
        				# And finally we add the 2st list of ids to the 3rd list.
        10.level3uids.cObject.20.data = register:level2uids
         
        				# Here we count the pages, based on the id lists we created and stored in the register var "level3uids"
        				# Note: If you have created more levels in the LOAD_REGISTER object, you should change "level3uids" to the last level you created.
        20 = TEXT
        20.numRows.table = pages
        20.numRows.select.pidInList.data = register:level3uids
        20.numRows.select.where = nav_hide!=1 AND doktype!=5 AND doktype!=6
        				# And output the page title (Using dataWrap to save some codelines ;) ) along with the count of all pages beneath.
        20.dataWrap = {field:title} [|/
         
        				# Here we count and output the number of direct children.
        30 = TEXT
        30.numRows.table = pages
        30.numRows.select.pidInList.field = uid
        30.numRows.select.where = nav_hide!=1 AND doktype!=5 AND doktype!=6
        30.wrap = |]
      }
      wrapItemAndSub = <li>|</li>
    }
  }
  	# Menulevel 2+3 is just copies of the 1st level.
  10.2 < .10.1
  10.3 < .10.1
}
page.100 < lib.subcountmenu

 

This snippet was submitted by Peter Klein




Comments


No comments

Add comment

* - required field

*



*
*

Top 10 Updates

Nice fonts using Google font API geändert am  20-May-2010 16:36:47
TS-based Searchbox for Indexed Search  geändert am  18-May-2010 18:27:15
TYPO3 SEO geändert am  30-Apr-2010 09:44:22
Search engine friendly graphical headers in TYPO3 geändert am  30-Apr-2010 09:33:44
Creating a simple Infocenter using TYPO3 geändert am  17-Nov-2009 12:12:52
Making the Section Menu work correctly with TemplaVoila geändert am  05-May-2009 12:27:17
Show pages with type "Not in Menu" in a sitemap geändert am  05-May-2009 12:11:17
Implementation of the DHTML menu from brainjar.com  geändert am  01-Feb-2009 14:02:48
Sample DHTML menu geändert am  01-Feb-2009 13:51:25
A introduction to the CONTENT object geändert am  26-Jan-2009 13:20:39

Latest comments

20-Aug-2010 16:31:13
pritam schrieb: Hello, Can any body tell me how to add the realurl in the typo3.
Articles
17-Aug-2010 15:25:30
Graham Solomon schrieb: I have developed a nice extension for using this Google Font API with TYPO3, along with their web...
Nice Fonts using Google font API
12-Aug-2010 17:39:44
Ritesh Jaiswal schrieb: I have added the above code into page template but it is not working. It only index the page into...
Index search
Deutsch
Search: