TYPO3 Logo
TypoScript Explained
Options
Give feedback View source How to edit Edit on GitHub Full documentation (single file)

TypoScript Explained

About TypoScript

  • Introduction
  • Getting started
    • Quick overview
    • First steps
    • Page
    • Content records
    • Create a menu with TypoScript
    • fluid_styled_content
    • TypoScript objects
      • Objects executing database queries
      • Objects rendering content
      • Further objects
    • TypoScript functions
      • stdWrap
      • getText / data
      • imgResource
      • select
      • split
      • if
      • typolink
      • parseFunc
    • Next steps
  • Usage
    • TypoScript in Sites
    • TypoScript in Extensions
    • Backend Module
    • Access TypoScript in an extension
    • Constants
    • Register
    • Debugging / analyzing
  • Using and setting TSconfig
    • Setting page TSconfig
    • Setting user TSconfig
    • Conditions
    • PHP API
  • Syntax
    • Identifiers
    • Code blocks
    • Operators
    • Comments
    • Conditions
    • File imports
    • String formats
    • TSconfig differences

Frontend TypoScript

  • Page
    • PAGE Examples
  • Content Objects (cObject)
    • Content objects (general information)
    • CASE
    • Content object array - COA, COA_INT
    • CONTENT
    • EXTBASEPLUGIN
    • FILES
    • FLUIDTEMPLATE
    • HMENU
      • TMENU
        • TMENUITEM
    • IMAGE
      • GIFBUILDER
        • Examples
        • Colors in TypoScript GIFBUILDER
        • Note on (+calc)
        • Properties
        • GIFBUILDER objects
          • ADJUST
          • BOX
          • CROP
          • EFFECT
          • ELLIPSE
          • EMBOSS
          • IMAGE
          • OUTLINE
          • SCALE
          • SHADOW
          • TEXT
          • WORKAREA
    • IMG_RESOURCE
    • LOAD_REGISTER
    • PAGEVIEW
    • RECORDS
    • RESTORE_REGISTER
    • SVG
    • TEXT
    • USER and USER_INT
  • Data processors
    • comma-separated-value
    • database-query
    • files
    • flex-form
    • gallery
    • language-menu
    • menu
      • Browse
      • Categories
      • Directory
      • Keywords
      • Language
      • List
      • Rootline / Breadcrumb
      • Updated
      • Userfunction
    • page-content
    • record-transformation
    • site
    • site-language
    • split
    • Custom data processors
  • Config
  • Top-level objects
    • page & config
    • module
    • plugin
    • Reserved top-level objects
  • Functions
    • cache
    • Calc
    • Data / getText
    • encapsLines
    • getEnv
    • HTMLparser
    • HTMLparser_tags
    • if
    • imageLinkWrap
    • imgResource
    • makelinks
    • numberFormat
    • numRows
    • optionSplit
    • parseFunc
    • replacement
    • round
    • select
    • split
    • stdWrap
    • strPad
    • tags
    • typolink
    • Wrap
  • Conditions

Backend TypoScript

  • Page TSconfig Reference
    • colorPalettes
    • mod
      • SHARED
      • web_info
      • web_layout
        • Backend layouts
      • web_list
      • web_view
      • wizards
    • options
    • RTE
    • TCAdefaults
    • TCEFORM
    • TCEMAIN
    • templates
    • tx_*
  • User TSconfig reference
    • admPanel (EXT:adminpanel)
    • auth
    • options
    • page
    • permissions
    • setup
    • TCAdefaults
    • tx_*

Appendix

  • PHP and TypoScript
  • Glossary
  • Sitemap
  1. TypoScript Explained
  2. Data processors
  3. menu
Give feedback Edit on GitHub

menu data processor

The \TYPO3\CMS\Frontend\DataProcessing\MenuProcessor , alias menu, utilizes HMENU to generate a list of menu items which can be assigned to FLUIDTEMPLATE as a variable.

Additional data processing is supported and will be applied to each record.

Table of contents

  • Options
  • Special menu types
  • Example: Two level menu of the web page

Hint

The third party extension b13/menus also provides menu processors like \B13\Menus\DataProcessing\TreeMenu and \B13\Menus\DataProcessing\BreadcrumbsMenu.

Refer to the manual of the extension b13/menus for more information.

Options

Name Type Default
as
string "menu"
alwaysActivePIDlist
list of integer /stdWrap
entryLevel
integer / stdWrap 0
excludeDoktypes
list of integer 6,254
excludeUidList
list of integer / stdWrap
expandAll
boolean / stdWrap 1
levels
integer / stdWrap 1
includeNotInMenu
boolean / stdWrap
includeSpacer
boolean / stdWrap 0
protectLvar
boolean / keyword
special
*"directory" / "list" / "updated" / "rootline" / "browse" / "keywords" / "categories"
value
list of page-uid's / stdWrap
titleField
string / stdWrap "nav_title // title"

as

as
Type
string
Required
false
Default
"menu"

Name for the variable in the Fluid template.

alwaysActivePIDlist

alwaysActivePIDlist
Type
list of integer /stdWrap

This is a list of page UID numbers that will always be regarded as active menu items and thereby automatically opened regardless of the rootline.

entryLevel

entryLevel
Type
integer / stdWrap
Default
0

Defines at which level in the rootLine the menu should start.

Default is "0" which gives us a menu of the very first pages on the site.

If the value is < 0, entryLevel is chosen from "behind" in the rootLine. Thus "-1" is a menu with items from the outermost level, "-2" is the level before the outermost...

Note: entryLevel does not show a menu of a certain level of pages (use special = directory for that) but it means that it will start to be visible from that level on.

So, for example if you build a simple "sitemap" menu like this one:

EXT:site_package/Configuration/TypoScript/setup.typoscript
page.10 {
  dataProcessing {
    10 = menu
    10 {
      special = list
      special.value.field = pages
      levels = 7
      entryLevel = 4
      as = menu
      expandAll = 1
      titleField = nav_title // title
    }
  }
}
Copied!

it will start to be visible from the 4th level (and will contain only the subpages from that level).

excludeDoktypes

excludeDoktypes
Type
list of integer
Default
6,254

Enter the list of page document types (doktype) to exclude from menus. By default pages that are "backend user access only" (6) or "folder" (254) are excluded.

excludeUidList

excludeUidList
Type
list of integer / stdWrap

This is a list of page uids to exclude when the select statement is done. Comma-separated. You may add "current" to the list to exclude the current page.

Example:

The pages with these uid-numbers will not be within the menu! Additionally the current page is always excluded too.

EXT:site_package/Configuration/TypoScript/setup.typoscript
page.10.dataProcessing.20.excludeUidList = 34,2,current
Copied!

expandAll

expandAll
Type
boolean / stdWrap
Required
true
Default
1
Example
0

Include all submenus (1) or only those of the active pages (0).

levels

levels
Type
integer / stdWrap
Required
true
Default
1
Example
5

Maximal number of levels to be included in the output array.

includeNotInMenu

includeNotInMenu
Type
boolean / stdWrap

If set, pages with the checkbox "Page enabled in menus" disabled will still be included in menus.

includeSpacer

includeSpacer
Type
boolean / stdWrap
Required
true
Default
0
Example
1

Include pages with type "spacer".

protectLvar

protectLvar
Type
boolean / keyword

If set, then for each page in the menu it will be checked if an Alternative Page Language record for the language defined in the site exists for the page. If that is not the case and the pages "Localization settings" have the "Hide page if no translation for current language exists" flag set, then the menu item will link to a non accessible page that will yield an error page to the user. Setting this option will prevent that situation by adding "&L=0" for such pages, meaning that they will switch to the default language rather than keeping the current language.

The check is only carried out if a translation is requested, not for the standard language.

Keyword: "all"

When set to "all" the same check is carried out but it will not look if "Hide page if no translation for current language exists" is set - it always reverts to default language if no translation is found.

special

special
Type
*"directory" / "list" / "updated" / "rootline" / "browse" / "keywords" / "categories"

Lets you define special types of menus.

For backward compatibility reason the special type language can be used with an HMENU. We recommend to use the language-menu data processor to create language menus.

See the section about the .special property.

value

value
Type
list of page-uid's / stdWrap

List of page uid's to use for the special menu. What they are used for depends on the menu type as defined by ".special"; see the section about the .special property.

titleField

titleField
Type
string / stdWrap
Required
true
Default
"nav_title // title"
Example
"subtitle"

Fields to be used as title.

Special menu types

The following special menu types are available:

  • Browse
  • Categories
  • Directory
  • Keywords
  • Language
  • List
  • Rootline / Breadcrumb
  • Updated
  • Userfunction

Example: Two level menu of the web page

Please see also About the examples.

TypoScript

Using the MenuProcessor the following scenario is possible:

EXT:examples/Configuration/TypoScript/DataProcessors/Processors/MenuProcessor.typoscript
tt_content {
    examples_dataprocmenu =< lib.contentElement
    examples_dataprocmenu {
        templateName = DataProcMenu
        dataProcessing.10 = menu
        dataProcessing.10 {
            levels = 2
            as = headerMenu
            expandAll = 1
            includeSpacer = 1
            titleField = nav_title // title
            dataProcessing {
                10 = files
                10 {
                    references.fieldName = media
                }
            }
        }
    }
}
Copied!
The Fluid template

This generated menu can be used in Fluid like this:

EXT:examples/Resources/Private/Templates/ContentElements/DataProcMenu.html
<html data-namespace-typo3-fluid="true" xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers">
   <h2>Data in variable headerMenu</h2>
   <f:debug inline="true">{headerMenu}</f:debug>

   <h2>Output</h2>
   <ul class="nav nav-pills">
      <f:for each="{headerMenu}" as="menuItem">
         <li class="nav-item {f:if(condition: menuItem.hasSubpages, then: 'dropdown')}">
            <f:if condition="{menuItem.hasSubpages}">
               <f:then>
                  <!-- Item has children -->
                  <a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" role="button" aria-expanded="false">
                     <f:if condition="{menuItem.files}">
                        <f:image image="{menuItem.files.0}" class="" width="20"/>
                     </f:if>
                     {menuItem.title}
                  </a>
                  <div class="dropdown-menu">
                     <f:for each="{menuItem.children}" as="menuItemLevel2">
                        <f:if condition="{menuItemLevel2.spacer}">
                           <f:then><div class="dropdown-divider"></div></f:then>
                           <f:else>
                              <f:link.page pageUid="{menuItemLevel2.data.uid}"
                                           class="dropdown-item {f:if(condition: menuItemLevel2.active, then: 'active')}">
                                 {menuItemLevel2.title}
                              </f:link.page>
                           </f:else>
                        </f:if>
                     </f:for>
                  </div>
               </f:then>
               <f:else>
                  <!-- Item has no children -->
                  <f:link.page pageUid="{menuItem.data.uid}" class="nav-link {f:if(condition: menuItem.active, then:'active')}">
                     <f:if condition="{menuItem.files}">
                        <f:image image="{menuItem.files.0}" width="20"/>
                     </f:if>
                     {menuItem.title}
                  </f:link.page>
               </f:else>
            </f:if>
         </li>
      </f:for>
   </ul>
</html>
Copied!
Output

The array now contains the menu items on level one. Each item in return has the menu items of level 2 in an array called children.

  • Previous
  • Next
Reference to the headline

Copy and freely share the link

This link target has no permanent anchor assigned. You can make a pull request on GitHub to suggest an anchor. The link below can be used, but is prone to change if the page gets moved.

Copy this link into your TYPO3 manual.

  • Home
  • Contact
  • Issues
  • Repository

Last rendered: Apr 25, 2025 15:36

© since 2012 by the TYPO3 contributors
  • Legal Notice
  • Privacy Policy
OSZAR »