dpn_glossary 

Classification

dpn_glossary

Version

7.0

Language

en

Description

Glossar extension for TYPO3 with a parser for terms

Keywords

glossary,glossar,dreipunktnull,dpn,parser,term

Copyright

2026

Author

Daniel Dorndorf

Email

dorndorf@featdd.de

License

This document is published under the Open Content License available from https://www.opencontent.org/openpub/

The content of this document is related to TYPO3, a GNU/GPL CMS/Framework available from www.typo3.org.

Table of Contents

Introduction 

What does it do? 

This extension lets you integrate a simple glossar for your website. In addition, created terms can be automatically linked with a configurable parser.

Advantages of dpn_glossary 

  • Simple configuration
  • Automatic parsing of terms on pages

Screenshots 

Term editing

The editing of a term record

Parsing

The automatic parser finds terms you created and links them to your detailpage

Administrator Manual 

Target group: Administrators

Installation 

  1. Install the extension with Composer:

    composer req featdd/dpn-glossary
    Copied!
  2. Add the site set featdd/dpn-glossary to your site configuration.

    This loads the extension TypoScript, Page TSconfig, site setting definitions and the default route enhancer configuration.

    You can add the set in the backend via Sites > Setup or in your site configuration:

    config/sites/<your-site>/config.yaml
    dependencies:
      - featdd/dpn-glossary
    Copied!

    If you use a site package, you can also add the dependency to your own site set instead of adding it directly to every site configuration.

  3. Create the required pages:

    • Create a page and add the glossary plugin.

      • Alternatively you can add a second glossary plugin on a separate page. Use this page UID as your detail page and split your routing configuration for the list and detail page.
    • Create a storage folder and add your terms.
  4. Configure the site settings of the extension.

    The required settings are the storage page for terms and the page that contains the glossary plugin:

    config/sites/<your-site>/settings.yaml
    dpn-glossary.storagePidList: '123'
    dpn-glossary.glossaryPage: 456
    Copied!

    If you want the automatic parser to run on all pages, also configure:

    dpn-glossary.parsingPids: '0'
    Copied!

    You can edit these values in the backend site settings editor as well. See Reference for all available settings.

Legacy static TypoScript include 

For projects that do not use site sets, the legacy static TypoScript include is still available:

  1. Go to the Template module in the TYPO3 backend.
  2. Edit your template record.
  3. Add dreipunktnull Glossar below Includes > Include static (from extensions).

Then configure the legacy TypoScript constants:

  • Set the storage page uid:

    plugin.tx_dpnglossary.persistence.storagePid = [your storage page uid]
    Copied!
  • Set the detail page uid where you placed the glossary plugin:

    plugin.tx_dpnglossary.settings.detailPage = [your detail page uid]
    Copied!

Configuration 

When the site set featdd/dpn-glossary is included, the extension is configured through TYPO3 site settings. These settings are passed to the extension TypoScript automatically.

Projects that still use the legacy static TypoScript include can configure the same behavior through TypoScript constants.

The whole linking of terms can be configured with TypoScript. The parsing itself can also be defined as precisely as you need.

There are also example styles for the views and a tiny CSS3 Tooltip

  • CSS: EXT:dpn_glossary/Resources/Public/Css/styles.css

Special: Umlauts 

If you want to add umlauts to the pagination you have to check the terms table collation.

  • Normal utf8 will not differ between Ä and A, you have to use "utf8_german2_ci" which would make a difference
  • You could change the 'name' column collation and add Ä,Ö,Ü to the comma list over typoscript
  • See MySQL reference for more info

Table of Contents

Reference 

Extension settings 

These settings are configured globally for the extension.

Key Data type Default Description
termSlugEvaluation string unique Evaluation type for the term slug field.

Site settings 

When the site set featdd/dpn-glossary is included, configure these values as TYPO3 site settings. In YAML files the keys are stored flat:

config/sites/<your-site>/settings.yaml
dpn-glossary.storagePidList: '123'
dpn-glossary.glossaryPage: 456
dpn-glossary.parsingPids: '0'
Copied!
Key Data type Default Description
dpn-glossary.view.layoutRootPath string EXT:dpn_glossary/Resources/Private/Layouts/ Fluid layout root path.
dpn-glossary.view.templateRootPath string EXT:dpn_glossary/Resources/Private/Templates/ Fluid template root path.
dpn-glossary.view.partialRootPath string EXT:dpn_glossary/Resources/Private/Partials/ Fluid partial root path.
dpn-glossary.storagePidList string empty Comma-separated list of storage page IDs that contain glossary terms.
dpn-glossary.glossaryPage page 0 Page ID of the glossary plugin. The parser links terms to this page.
dpn-glossary.parsingPids string empty Comma-separated list of pages that should be parsed. Use 0 to parse all pages.
dpn-glossary.parsingExcludePidList string empty Comma-separated list of pages that should not be parsed.
dpn-glossary.disableParser bool false Disable automatic parsing.
dpn-glossary.parsingSpecialWrapCharacters string empty Comma-separated list of additional special characters that may wrap a term.
dpn-glossary.parserRepositoryClass string \Featdd\DpnGlossary\Domain\Repository\ParserTermRepository Repository class used by the parser. Use \Featdd\DpnGlossary\Domain\Repository\TermRepository if the term wrapping TypoScript needs all term fields.
dpn-glossary.maxReplacementPerPage int -1 Maximum replacements for each term on a page. -1 means unlimited.
dpn-glossary.maxReplacementPerPageRespectSynonyms bool false Count synonym replacements against the term replacement limit.
dpn-glossary.parsingTags string p Comma-separated list of HTML tags whose content should be parsed.
dpn-glossary.forbiddenParentTags string a,script Comma-separated list of parent tags inside which parsing is not allowed.
dpn-glossary.forbiddenParsingTagClasses string empty Comma-separated list of classes that exclude the parsing tag itself.
dpn-glossary.forbiddenParentClasses string tx_dpn_glossary_exclude Comma-separated list of classes that exclude a parsing tag through any parent element.
dpn-glossary.parseSynonyms bool true Enable parsing of term synonyms.
dpn-glossary.priorisedSynonymParsing bool true Parse synonyms before the original term.
dpn-glossary.limitParsingId string empty Limit parsing to one node with this HTML ID.
dpn-glossary.useTermForSynonymParsingDataWrap bool false Use the original term as content object data when rendering synonym links.
dpn-glossary.excludeTermLinksTargetPages bool false Do not parse a term when the current page is the target page of that term.
dpn-glossary.listmode string normal List mode of the glossary plugin. Supported values: normal, character, pagination.
dpn-glossary.previewmode string newest Preview plugin mode. Supported values: newest, random.
dpn-glossary.previewlimit int 5 Number of terms rendered by preview plugins.
dpn-glossary.addStylesheet bool true Include the extension CSS file.
dpn-glossary.overrideFluidStyledContentLayout bool false Override the Fluid Styled Content layout so editors can exclude content elements from parsing.

Legacy TypoScript constants 

If you use the legacy static TypoScript include instead of the site set, use the old TypoScript constants:

Site setting Legacy TypoScript constant
dpn-glossary.storagePidList plugin.tx_dpnglossary.persistence.storagePid
dpn-glossary.glossaryPage plugin.tx_dpnglossary.settings.detailPage
dpn-glossary.view.layoutRootPath plugin.tx_dpnglossary.view.layoutRootPath
dpn-glossary.view.templateRootPath plugin.tx_dpnglossary.view.templateRootPath
dpn-glossary.view.partialRootPath plugin.tx_dpnglossary.view.partialRootPath
All other dpn-glossary.* settings plugin.tx_dpnglossary.settings.*

Example TypoScript Setup 

The following example shows all usable settings for the extension:

plugin.tx_dpnglossary {
    settings {
        pagination {
            characters = A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z
            insertAbove = 1
            insertBelow = 0
        }

        termWraps = CASE
        termWraps {
            key.field = term_type
            default = TEXT
            default {
                field = name
                dataWrap = |
                typolink {
                    ATagParams.dataWrap = title="{field:tooltiptext}" class="dpnglossary link"
                    ATagParams.dataWrap {
                        override = title="{field:name}" class="dpnglossary link"
                        override.if.isFalse.data = field:tooltiptext
                    }
                    useCacheHash = 1
                }
            }

            abbreviation {
                dataWrap = <abbr title="{field:tooltiptext}" lang="{field:term_lang}">|</abbr>
                dataWrap {
                    override = <abbr title="{field:name}" lang="{field:term_lang}">|</abbr>
                    override.if.isFalse.data = field:tooltiptext
                }
            }

            acronym {
                dataWrap = <acronym title="{field:tooltiptext}" lang="{field:term_lang}">|</acronym>
                dataWrap {
                    override = <acronym title="{field:name}" lang="{field:term_lang}">|</acronym>
                    override.if.isFalse.data = field:tooltiptext
                }
            }

            definition {
                dataWrap = <dfn title="{field:tooltiptext}" lang="{field:term_lang}">|</dfn>
                dataWrap {
                    override = <dfn title="{field:name}" lang="{field:term_lang}">|</dfn>
                    override.if.isFalse.data = field:tooltiptext
                }
            }
        }
    }
}
Copied!

Add terms to your breadcrumb 

You can add terms to your breadcrumb using the data processor in your TypoScript configuration.

Example:

dataProcessing {
  10 = TYPO3\CMS\Frontend\DataProcessing\MenuProcessor
  10 {
    special = rootline
    special.range = 0|-1
    includeNotInMenu = 1
    as = menuBreadcrumb
  }

  20 = Featdd\DpnGlossary\DataProcessing\AddTermToMenuProcessor
  20.menus = menuBreadcrumb
}
Copied!

Render terms with a Fluid template 

While for most cases a simple dataWrap in TypoScript is enough, it is also possible to render terms with a Fluid template. You may only have to take care of unnecessary whitespace with stdWrap.trim = 1 and the <f:spaceless> ViewHelper.

See this GitHub Issue for detailed information.

Example:

Your TypoScript template
plugin.tx_dpnglossary.settings {
  termWraps {
      default >
      default = FLUIDTEMPLATE
      default {
          stdWrap.trim = 1

          templateRootPaths {
              10 = EXT:your_site_package/Resources/Private/Templates/
          }

          templateName = TermWraps/Default

          settings < plugin.tx_dpnglossary.settings

          dataProcessing {
              10 = TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor
              10 {
                  table = pages
                  pidInList = 0
                  uidInList = this
                  as = currentPage
              }
          }
      }
  }
}
Copied!
EXT:your_site_package/Resources/Templates/TermWraps/Default.html
<html data-namespace-typo3-fluid="true"
        xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers">

  <f:spaceless>
    <f:link.action
        action="show"
        controller="Term"
        pluginName="Glossary"
        extensionName="DpnGlossary"
        arguments="{term: data.uid}"
        pageUid="{settings.detailPage}"
        class="dpn-glossary link"
    >{data.name}</f:link.action>
  </f:spaceless>

</html>
Copied!

Configure Routing for terms and pagination 

Site set routing 

The site set featdd/dpn-glossary ships a default route enhancer configuration. If the set is included in your site, you usually do not need to copy the full route enhancer manually.

Restrict the route enhancer to the page that contains the glossary plugin in your site configuration:

config/sites/<your-site>/config.yaml
routeEnhancers:
  dpnGlossary:
    limitToPages: [YOUR_PLUGINPAGE_UID]
Copied!

Manual routing configuration 

If you do not use the site set, or if you need a fully customized route enhancer, use this configuration as a starting point.

The special: [ Ä,Ö,Ü ] part for the pagination is only needed if you want to use umlauts or other special characters.

routeEnhancers:
  dpnGlossary:
    type: Extbase
    limitToPages: [YOUR_PLUGINPAGE_UID]
    extension: DpnGlossary
    plugin: glossary
    routes:
      - routePath: '/{character}'
        _controller: 'Term::list'
        _arguments:
          character: currentCharacter
      - routePath: '/{localized_term}/{term_name}'
        _controller: 'Term::show'
        _arguments:
          term_name: term
    defaultController: 'Term::list'
    defaults:
      character: ''
    aspects:
      term_name:
        type: PersistedAliasMapper
        tableName: 'tx_dpnglossary_domain_model_term'
        routeFieldName: 'url_segment'
      character:
        type: StaticMultiRangeMapper
        ranges:
          - start: 'A'
            end: 'Z'
            special: [ Ä,Ö,Ü ]
      localized_term:
        type: LocaleModifier
        default: 'term'
        localeMap:
          - locale: 'de_DE.*'
            value: 'begriff'
Copied!

Create XML Sitemap for Terms 

Requirements: System extension "SEO" installed (and setup.typoscript added)

Add the following code to you setup:

plugin.tx_seo.config {
    xmlSitemap {
        sitemaps {
            glossar {
                provider = TYPO3\CMS\Seo\XmlSitemap\RecordsXmlSitemapDataProvider
                config {
                    table = tx_dpnglossary_domain_model_term
                    sortField = name
                    lastModifiedField = tstamp
                    pid = 123 #uid of the sysfolder where your term are stored
                    url {
                        pageId = 456 #uid of the page where the glossary plugin is placed

                        fieldToParameterMap {
                            uid = tx_dpnglossary_glossary[term]
                        }

                        additionalGetParameters {
                            tx_dpnglossary_glossary.controller = Term
                            tx_dpnglossary_glossary.action = show
                        }

                        useCacheHash = 1
                    }
                }
            }
        }
    }
}
Copied!

Official documentaton: https://docs.typo3.org/m/typo3/reference-coreapi/11.5/en-us/ApiOverview/Seo/XmlSitemap.html

Exclude contents from the parser 

Exclude whole pages from being parsed 

Pages can be statically excluded from parsing via site settings:

config/sites/<your-site>/settings.yaml
dpn-glossary.parsingExcludePidList: '42,185,365'
Copied!

Pages can also be dynamically excluded from parsing by page properties Page Properties > Behaviour > Settings for dreipunktnull Glossary:

Exclude page from parsing

Exclude page from parsing

By making field tx_dpnglossary_parsing_settings of table pages available for your editors, it is also possible to let (power) editors decide, which pages should be parsed.

Exclude content elements from being parsed 

The following site setting defines HTML classes whose content will be excluded from parsing:

config/sites/<your-site>/settings.yaml
dpn-glossary.forbiddenParentClasses: 'tx_dpn_glossary_exclude,my_search_results'
Copied!

Content wrapped with one of these classes will be excluded from parsing.

Content can also be dynamically excluded from parsing by content properties Content Properties > Appearance > Settings for dreipunktnull Glossar.

This only works if the default Fluid layout has been overridden to wrap the content with the HTML class tx_dpn_glossary_exclude and this class is still found in the dpn-glossary.forbiddenParentClasses site setting.

You can set the following site setting to let this extension override the Fluid Styled Content default layout:

config/sites/<your-site>/settings.yaml
dpn-glossary.overrideFluidStyledContentLayout: true
Copied!

If you need to override the layout yourself make sure to add the following to the surrounding tags class:

<div class="... {f:if(condition: data.tx_dpnglossary_disable_parser, then: ' tx_dpn_glossary_exclude')}">
Copied!

Just like with the pages this property can be used to enable editors to exclude content elements from parsing.

ChangeLog 

v7.0.0
  • Add support for TYPO3 v14
  • Drop support for TYPO3 v12
  • Add site set configuration
  • Add additional plugin configuration options
  • Bugfixes, optimizations and refactorings
v6.1.3
  • Prevent TypeErrors and handle missing StoragePids properly
v6.1.2
  • Remove "TCEforms" tag from FlexForm XML
  • Use real slug value instead of dummy due to restrictions
  • Code optimizations
  • Add hook to auto clear terms cache if term in storage was edited
  • Don't use range array for trim function if characters are empty
v6.1.1
  • Add missing upgrade wizard registration via PHP attributes
  • Add documentation updates
v6.1.0
  • Add support for PHP 8.4
  • Remove deprecated function calls and other optimizations
  • Add storagePid check for term detail page
v6.0.0
  • Add support for TYPO3 v13
  • Drop support for TYPO3 v11
v5.3.2
  • Use proper icon registry configuration file (thanks to Achim Fritz)
v5.3.1
  • Add safety check for accidentally empty created synonyms
v5.3.0
  • Add transliteration for character grouped term list
v5.2.4
  • Prevent parser href/src protection from redundant base64 encoding
v5.2.3
  • Prevent nested ObjectStorage iterations on synonyms
v5.2.2
  • Use proper version constraint to allow all PHP 8.3.X versions
v5.2.1
  • Update required PHP version
v5.2.0
  • Make the repository used in the parser configurable
  • Add hidden palette for language fields to prevent errors for editors
v5.1.0
  • Add option to exclude parsing for term links target pages
v5.0.4
  • Add missing term link to parsing term
  • Prevent array key warnings
  • Add URL segment to term model
  • Simplify term anchor links and adjust slug preview prefix
v5.0.3
  • Use umlaut count to update matching group index
v5.0.2
  • Use custom replacement function for umlaut matching groups
  • Move ExtensionManagementUtility::addPageTSConfig() to ext_localconf.php
v5.0.1
  • Add missing switchable controller actions migration for preview plugin
v5.0.0
  • Add support for TYPO3 v12 (dropped for TYPO3 v10)

    • The extension TypoScript file extensions have been changed from .txt to .typoscript
  • Add canonical URL for character pagination index
v4.2.0
  • Limit parsing of DOM to configurable node/tag (ID) (thanks to Julian Hofmann)
  • Optimize parser performance with separate simplified term parser object (thanks to Julian Hofmann)
  • Dynamic page based and content based exclusion from parsing (thanks to Lina Wolf)
  • Add menu processor for terms
  • Case sensitivity workaround for umlauts
  • Add page title provider for character pagination and term detailpage
  • Documentation updates
  • Add special option for range routing mapper, for adding special chars
v4.1.0
  • Add SEO title & description for terms
  • Optimize slug preview (no extra configuration needed anymore)
v4.0.0
  • Add support for TYPO3 v11 (dropped for TYPO3 v9)
  • Use of symfony dependency injection
  • Added custom character pagination API to replace widget based pagination
v3.2.4
  • Prevent term parser from self referencing on detail pages
v3.2.3
  • Use correct ordering for newest terms query
  • Use proper title/alt attribute property in file reference
v3.2.2
  • Use multibyte functions to properly process non ascii characters for pagination
v3.2.1
  • Fix TCA sorting for synonyms & descriptions in term inline fields
  • Add option to keep the origin term for data wrap when parsing synonyms
v3.2.0
  • Change parsing order to parse the whole content for each term
  • Add special wrap character option for term regular expression
v3.1.6
  • Add missing renderType for preview FlexForm
v3.1.5
  • Fix broken TypoScript due to an auto indent issue
v3.1.4
  • Add hook to also run parser when config.no_cache is true
  • Add "forbidden parent classes" new parsing exclude feature
v3.1.3
  • Add option to priories synonym parsing before the main term
  • Fixed parsing priority issue with synonyms
v3.1.2
  • Use "unique" as default evaluation for slug to prevent initial errors
v3.1.1
  • Add better evaluation for the term slug
v3.1.0
  • Add compatibility for TYPO3 10 LTS
v3.0.5
  • Update typoscript syntax to prevent deprecation warnings
  • Parser optimizations
  • add slash replacement for slug field
  • Add preview option for the slug field, see: documentation
  • Bugfix for dom picture repair function due to backtrack limit issues
v3.0.4
  • Add page title provider
  • Bugfix for html5 picture issues
  • Bugfix for cache identifier
  • Max replacement option for each term
  • TCA optimizations
  • Code refactorings
v3.0.3
  • Update composer.json
v3.0.2
  • Bugfix for upgrade wizard
v3.0.1
  • Fix upgrade wizard for TYPO3 9.5.1 due to broken slug helper method
v3.0.0
  • Compatibility to 9.5 LTS
  • Add slug field for routing (migration comes with the install wizard)
  • IMPORTANT!: Removed seperat detailpage plugin
  • Remove backpage param and always use http referer or history.back(1) for backlink
v2.7.5
  • Fix terms cache for translations
  • Use better hook for parsing terms
v2.7.4
  • Add case sensitive option for terms
  • Realurl configuration as hook
  • Link mode for terms
  • small optimizations
v2.7.3
  • Fix issue with the terms maximum replacement per page
v2.7.2
  • Add term mode feature and term link instead of glossary detailpage
v2.7.1
  • Increase missed TYPO3 verison depenedency in composer.json
v2.7.0
  • TYPO3 compatibility
v2.6.13
  • Add option to disable parsing for terms
v2.6.12
  • Fix 6.2 Compability
  • Small cleanup and refactorings
  • Fix problem with html special chars
v2.6.11
  • Use deep import to keep wraps around replaced terms
v2.6.10
  • Removed unwanted warning caused by null param
v2.6.9
  • Fixed compability issue with 6.2
v2.6.8
  • Updated fluid namespaces
  • refactoring of the update script
  • fixed multiple languages in tcaform
v2.6.7
  • Cleanup and optimizing templates
v2.6.6
  • Bugfix in regex properly escaping slashes
v2.6.5
  • Added conformer documentation for the extension