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
                }
            }
        }
    }
}

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
}

Configure Routing for terms and pagination

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'
    localized_term:
      type: LocaleModifier
      default: 'term'
      localeMap:
      - locale: 'de_DE.*'
        value: 'begriff'

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
                    }
                }
            }
        }
    }
}

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

Exclude pages from being parsed

Pages can be statically excluded from parsing via TypoScript:

plugin.tx_dpnglossary {
    settings.parsingExcludePidList = 42, 185, 365
}

Pages can also 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 from being parsed

The following TypoScript constant defines HTML classes whose content will be excluded from parsing:

plugin.tx_dpnglossary {
    settings.forbiddenParsingTagClasses = tx_dpn_glossary_exclude, my_search_results
}

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

Content can also dynamically excluded from parsing by content properties Content Properties > Appearance > Settings for DPN Glossary.

This only works if the default Fluid layout has been overriden to wrap the content with the HTML class tx_dpn_glossary_exclude and this class is still found in the settings.forbiddenParsingTagClasses.

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

plugin.tx_dpnglossary {
    settings.overrideFluidStyledContentLayout = 1
}

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')}">

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