Glossary2 

Extension key

glossary2

Package name

jweiland/glossary2

Version

main

Language

en

Author

Stefan Froemken

License

This document is published under the Creative Commons BY 4.0 license.

Rendered

Wed, 04 Mar 2026 01:11:15 +0000


glossary2 is an extension for TYPO3 CMS. It shows you a list of glossary entries incl. detail view. Above the list you will see an A-Z navigation.


Table of Contents

Introduction 

What does it do? 

With glossary2 you can build your own little glossary for your TYPO3 website. It comes with a list and a configurable detail view. Above the list view we implemented a A-Z navigation to jump directly to glossary entries which will start with your clicked starting letter.

Users Manual 

Target group: Editors

  1. Select a page where you want to insert glossary2
  2. Insert a new content element of type: Insert Plugin
  3. On tab Plugin select Glossary from selectbox.
  4. Confirm reload to load special input fields for our extension (FlexForm).
  5. Save

Plugin Options 

Show Glossary

You can decide to show A-Z links above or not.

Show All link

You can decide to prepend an All-link to A-Z links or not.

Show entries of category

Sometimes it makes sense to reduce list of glossary entries to a given category.

Glossary Record 

  1. Select a Storage Page
  2. Create a new record of type Glossary
  3. Give it a title. We will of the first letter of title to sort it into our glossary navigation (if activated).
  4. Enter a description which will be shown on configured detail page
  5. By default you can insert up to 5 images to glossary record.
  6. At tab Categories you can relate glossary entry to a category. That way you can show only glossary records of a defined category in plugin, if you want.

Installation 

Composer 

If your TYPO3 installation works in composer mode, please execute following command:

composer req jweiland/glossary2
vendor/bin/typo3 extension:setup --extension=glossary2
Copied!

If you work with DDEV please execute this command:

ddev composer req jweiland/glossary2
ddev exec vendor/bin/typo3 extension:setup --extension=glossary2
Copied!

ExtensionManager 

On non composer based TYPO3 installations you can install glossary2 still over the ExtensionManager:

  1. Login

    Login to backend of your TYPO3 installation as an administrator or system maintainer.

  2. Open ExtensionManager

    Click on Extensions from the left menu to open the ExtensionManager.

  3. Update Extensions

    Choose Get Extensions from the upper selectbox and click on the Update now button at the upper right.

  4. Install glossary2

    Use the search field to find glossary2. Choose the glossary2 line from the search result and click on the cloud icon to install glossary2.

Next step 

Configure glossary2.

Extension Settings 

Some general settings for glossary2 can be configured in Admin Tools -> Settings.

Tab: Basic 

templatePath 

Default: EXT:glossary2/Resources/Private/Templates/Glossary.html

Which template should be used to render the A-Z list. EXT: as prefix is possible. This is more a fallback, as you can override this option at various places.

possibleLetters 

Default: 0-9,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

Example: plugin.tx_glossary2.settings.letters = 0-9,a,e,i,o,u

Define the letters you want see in the glossary. This is more a fallback, as you can override this option at various places.

If you deactivate mergeNumbers in TypoScript you should override 0-9 in this option to individual numbers: 0,1,2,3,4,5,6,7,8,9. Of cause you can override this option with help of TypoScript, too.

TypoScript 

View 

view.templateRootPaths 

Default: Value from Constants EXT:glossary2/Resources/Private/Templates/

You can override our Templates with your own SitePackage extension. We prefer to change this value in TS Constants.

view.partialRootPaths 

Default: Value from Constants EXT:glossary2/Resources/Private/Partials/

You can override our Partials with your own SitePackage extension. We prefer to change this value in TS Constants.

view.layoutsRootPaths 

Default: Value from Constants EXT:glossary2/Resources/Layouts/Templates/

You can override our Layouts with your own SitePackage extension. We prefer to change this value in TS Constants.

Persistence 

persistence.storagePid 

Set this value to a Storage Folder (PID) where you have stored the records.

Example: plugin.tx_glossary2.persistence.storagePid = 21,45,3234

Settings 

setting.pidOfDetailPage 

Default: 0

Example: plugin.tx_glossary2.settings.pidOfDetailPage = 84

Often it is useful to move the detail view onto a separate page for design/layout reasons.

setting.templatePath 

Default: empty (Use value of Extension Settings as fallback)

Example: plugin.tx_glossary2.settings.templatePath = EXT:events2/Resources/Private/Templates/Glossary2.html

With this setting you can override the default templatePath of glossary2 and defined templatePaths coming from foreign extensions. So TypoScript settings have highest priority.

We also have implemented a more complex setting for templatePath:

plugin.tx_glossary2.settings.templatePath {
  default = EXT:glossary2/Resources/Private/Templates/Glossary2.html
  events2 = EXT:events2/Resources/Private/Templates/Glossary2.html
  yellowpages2 = EXT:yellowpages2/Resources/Private/Templates/Glossary2.html
}
Copied!

default will be used, if no templatePath for a given ExtensionKey was found.

settings.glossary.mergeNumbers 

Default: 1

Example: plugin.tx_glossary2.settings.glossary.mergeNumbers = 0

Merge record titles starting with numbers to 0-9 in glossary.

settings.pageBrowser.itemsPerPage 

Default: 15

Example: plugin.tx_glossary2.settings.pageBrowser.itemsPerPage = 20

Reduce result of records to this value for a page

Page Title Provider 

In normal case you only will see something like "detail view" in title of detail page. If you want to change that title to current glossary title you can make use of the new TYPO3 page-title providers (since TYPO3 9.4). Luckily glossary2 comes with its own provider to realize a pretty nice detail page-title for you with following TypoScript:

config.pageTitleProviders {
  glossary2 {
    provider = JWeiland\Glossary2\PageTitleProvider\Glossary2PageTitleProvider
    # Please add these providers, to be safe loading glossary2 provider before these two.
    before = record, seo
  }
}
Copied!

Pagination 

glossary2 uses the SimplePagination from TYPO3 Core to navigate through your records with first, previous, next and last buttons. If you need something more complex like 1, 2 ... 56, 57, 58 ... 123, 124 you should use another pagination library or build your own one. In the next steps I explain you how to implement the numbered_pagination solution of Georg Ringers.

  1. Install numbered_pagination

    Install and activate numbered_pagination extension from Georg Ringer. Please check in your SitePackage extension that numbered_pagination is set as a dependency and will be loaded before glossary2 and your SitePackage.

  2. Change pagination class in TypoScript

    plugin.tx_glossary2.pageBrowser.class = GeorgRinger\NumberedPagination\NumberedPagination
    Copied!
  3. Change path to glossary2 partials

    Set constant partialRootPath to a location within your SitePackage:

    plugin.tx_glossary2.view.partialRootPath = EXT:site_package/Resources/Private/Extensions/Glossary2/Partials/
    Copied!
  4. Create Pagination template

    Create file Resources/Private/Extensions/Glossary2/Partials/Component/Pagination.html with example content from numbered_pagination https://github.com/georgringer/numbered_pagination/blob/master/Resources/Private/Partials/Pagination.html

    <html lang="en"
          xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
          data-namespace-typo3-fluid="true">
    
    <ul class="f3-widget-paginator">
        <f:if condition="{pagination.previousPageNumber} && {pagination.previousPageNumber} >= {pagination.firstPageNumber}">
            <li class="previous">
                <a href="{f:uri.action(action:actionName, arguments:{currentPage: pagination.previousPageNumber})}" title="{f:translate(key:'pagination.previous')}">
                    {f:translate(key:'widget.pagination.previous', extensionName: 'fluid')}
                </a>
            </li>
        </f:if>
        <f:if condition="{pagination.hasLessPages}">
            <li></li>
        </f:if>
        <f:for each="{pagination.allPageNumbers}" as="page">
            <li class="{f:if(condition: '{page} == {paginator.currentPageNumber}', then:'current')}">
                <a href="{f:uri.action(action:actionName, arguments:{currentPage: page})}">{page}</a>
            </li>
        </f:for>
        <f:if condition="{pagination.hasMorePages}">
            <li></li>
        </f:if>
        <f:if condition="{pagination.nextPageNumber} && {pagination.nextPageNumber} <= {pagination.lastPageNumber}">
            <li class="next">
                <a href="{f:uri.action(action:actionName, arguments:{currentPage: pagination.nextPageNumber})}" title="{f:translate(key:'pagination.next')}">
                    {f:translate(key:'widget.pagination.next', extensionName: 'fluid')}
                </a>
            </li>
        </f:if>
    </ul>
    </html>
    Copied!
  5. Clear Cache

    Needed to reload the fluid templates.

Routes 

With TYPO3 9 you have the possibility to configure RouteEnhancers

Example Configuration 

routeEnhancers:
  Glossary2Plugin:
    type: 'Extbase'
    extension: 'Glossary2'
    plugin: 'Glossary'
    routes:
      -
        routePath: '/first-glossary-page'
        _controller: 'Glossary::list'
      -
        routePath: '/glossary-page-{page}'
        _controller: 'Glossary::list'
        _arguments:
          page: 'currentPage'
      -
        routePath: '/glossary-by-letter/{letter}'
        _controller: 'Glossary::list'
      -
        routePath: '/show/{glossary_title}'
        _controller: 'Glossary::show'
        _arguments:
          glossary_title: 'glossary'
    defaults:
      page: '0'
    requirements:
      letter: '^(0-9|[a-z])$'
      glossary_title: '^[a-zA-Z0-9\-]+$'
    defaultController: 'Glossary::list'
    aspects:
      glossary_title:
        type: 'PersistedAliasMapper'
        tableName: 'tx_glossary2_domain_model_glossary'
        routeFieldName: 'path_segment'
      page:
        type: StaticRangeMapper
        start: '1'
        end: '10'
      letter:
        type: StaticValueMapper
        map:
          '0-9': '0-9'
          'a': 'a'
          'b': 'b'
          'c': 'c'
          'd': 'd'
          'e': 'e'
          'f': 'f'
          'g': 'g'
          'h': 'h'
          'i': 'i'
          'j': 'j'
          'k': 'k'
          'l': 'l'
          'm': 'm'
          'n': 'n'
          'o': 'o'
          'p': 'p'
          'q': 'q'
          'r': 'r'
          's': 's'
          't': 't'
          'u': 'u'
          'v': 'v'
          'w': 'w'
          'x': 'x'
          'y': 'y'
          'z': 'z'
          '': ''
Copied!

Upgrade 

If you update glossary2 to a newer version, please read this section carefully!

Upgrade to Version 6.0.0 

We enhanced the extension's compatibility to TYPO3 version 12 while establishing a minimum requirement of version 11. As part of this upgrade, a new page title provider was introduced within the extension. In addition, comprehensive documentation was provided to guide users in seamlessly implementing the page title using the newly added provider. Furthermore, the testing framework for the extension was successfully migrated to the TYPO3 Testing framework, ensuring robust and efficient testing practices in line with the latest TYPO3 standards. These upgrades collectively contribute to an improved and up-to-date extension experience for users within the TYPO3 ecosystem.

Update to Version 5.1.0 

If you make use of ModifyQueryOfSearchGlossariesEvent event: We have changed the strict type of TYPO3 QueryBuilder to extbase QueryResult. Yes, this is a breaking change, but it seems that no one makes use of it. Please adopt your code to use QueryResult. You can retrieve the extbase query with method getQuery().

We have reduced the list of categories in Plugin FlexForm to categories in default language only. Please check, if your selected categories are still valid.

Update to Version 5.0.2 

Sorry, we have implemented the wrong Pagination. With this version we use TYPO3's default SimplePagination. Please adopt changes of Partials/Components/Pagination.html to your own templates, if you have overwritten them.

Upgrade to Version 5.0.0 

We have changed some CSS classes in Fluid Templates. Please update them to your needs.

As the Widget system has gone in TYPO3 11 we have implemented a new paginator. Please have a look into our Fluid Templates and adopt pagination to your own templates.

We have replaced all SignalSlots with EventListeners. Please check your integration and update to EventListeners.

Because of the Pagination change you should also check your RouteEnhancers. If you need help, have a look into AdministratorManual/Routes for an example here in this documentation.

Update to Version 4.3.1 

We have changed some method arguments, please flush cache in InstallTool

Upgrade to Version 4.0.0 

As we have only removed TYPO3 8 and added TYPO3 10 compatibility there should be no problem to upgrade to this version.

Upgrade to Version 3.0.0 

We have changed Fluid-Templates a lot. We have removed a lot of CSS classes and changed them to be compatible with Bootstrap. Further we have moved Image- and Properties-Partial back to Show-Template in to a f:section. Please have a look into your templates, if they are still working.

SwitchableControllerAction will be deprecated with TYPO3 10. That's why we have changed this implementation into two new Checkboxes in FlexForm. Please use the UpdateWizard in InstallTool to update your FlexForms.

Developer manual 

This chapter describes how to manage the extension from a developer point of view.

Glossary API 

Since glossary2 4.0.0 we deliver a new Glossary API which you can use to implement a Glossary Index (A-Z list) into your own extension. All the magic you need you'll find in GlossaryService class.

Build Glossary 

In class GlossaryService you will find public method called buildGlossary which you have to use. As our API does not know the table to use and does not know further WHERE conditions, it is up to you to deliver a TYPO3 QueryBuilder or QueryResult instance as first argument.

We prefer creating a new method into your Repository and return an Extbase QueryResult object:

public function getQueryBuilderToFindAllEntries(): QueryBuilder
{
    return $this->createQuery()->execute();
}
Copied!

Alternative you can also return a TYPO3 QueryBuilder instance. BUT: It's up to you now to respect storage PIDs, translation and workspaces:

public function getQueryBuilderToFindAllEntries(): QueryBuilder
{
    $table = 'tx_myext_domain_model_whatever';
    $query = $this->createQuery();
    $queryBuilder = $this->getConnectionPool()->getQueryBuilderForTable($table);
    $queryBuilder->setRestrictions(GeneralUtility::makeInstance(FrontendRestrictionContainer::class));

    // Do not set any SELECT, ORDER BY, GROUP BY statement. It will be set by glossary2 API
    $queryBuilder
        ->from($table)
        ->andWhere(
            $queryBuilder->expr()->in(
                'pid',
                $queryBuilder->createNamedParameter(
                    $query->getQuerySettings()->getStoragePageIds(),
                    Connection::PARAM_INT_ARRAY
                )
            )
        );

    return $queryBuilder;
}

protected function getConnectionPool(): ConnectionPool
{
    return GeneralUtility::makeInstance(ConnectionPool::class);
}
Copied!

Within your controller you can call our API that way:

/**
 * @param string $letter Show only records starting with this letter
 * @Extbase\Validate("String", param="letter")
 * @Extbase\Validate("StringLength", param="letter", options={"minimum": 0, "maximum": 3})
 */
public function listAction(string $letter = ''): void
{
    $companies = $this->companyRepository->findByStartingLetter($letter, $this->settings);

    $this->view->assign('companies', $companies);
    $this->view->assign(
        'glossar',
        $this->glossaryService->buildGlossary(
            $this->myRepository->getQueryBuilderToFindAllEntries()
        )
    );
}
Copied!

This will transfer the fully rendered HTML Glossar to View. Use f:format.raw() in Fluid Template:

{glossar -> f:format.raw()}
Copied!

Configure Glossary API 

If you want, you can configure our API with second options argument:

$this->view->assign(
    'glossar',
    $this->glossaryService->buildGlossary(
        $this->myRepository->getQueryBuilderToFindAllEntries(),
        [
            'settings' => $this->settings,
            'templatePath' => 'EXT:myext:/Resources/Private/Templates/Glossary.html',
        ]
    )
);
Copied!

templatePath 

Default: EXT:glossary2/Resources/Private/Templates/Glossary.html

All rendering of the Glossary is in one file. There is no configuration for partial-, template- nor for layoutRootPaths.

settings 

Default: empty

If you have your own Template defined, it may be useful to have your own settings inside of your template. Assign your own settings or use settings of your controller (see example above).

extensionName 

Default: glossary2

Please change default value to extension name of your extension. This is needed for correct linking of the A-Z list. It will be used within the Plugin namespace in URI: tx_extensionname_pluginname. Underscores will automatically be converted to UpperCamelCase.

It's your part to check the GET parameters (letter) and adapt your queries to show filtered records.

pluginName 

Default: glossar

Please change default value to plugin name of your extension. This is needed for correct linking of the A-Z list. It will be used within the Plugin namespace in URI: tx_extensionname_pluginname.

It's your part to check the GET parameters (letter) and adapt your queries to show filtered records.

controllerName 

Default: Glossar

Please change default value to controller name which should be used for links. It will be used as controller part in URI: tx_extensionname_pluginname[controllerName].

It's your part to check the GET parameters (letter) and adapt your queries to show filtered records.

actionName 

Default: list

Please change default value to action name of given controller name above, which should be used for links. It will be used as action part in URI: tx_extensionname_pluginname[actionName].

It's your part to check the GET parameters (letter) and adapt your queries to show filtered records.

mergeNumbers 

Default: true

By default the numbers will be represented in A-Z list as 0-9 instead of 0 1 2 3 4 5 6 7 8 9.

column 

Default: title

The column of your QueryBuilder to extract the first letters from.

columnAlias 

Default: Letter

To prevent duplicate usage of column in GROUP BY and ORDER BY we are working with an column alias. If you already have a column called Letter in your table you should change that property to something unique.

possibleLetters 

If empty it uses the default from ExtensionSettings

Default: 0-9,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

These are the allowed letters to be shown in frontend. So, if you remove for example the letter r, it will not be shown in frontend, regardless if a record starting with r is in ResultSet or not.

If you disable mergeNumbers you have to add each individual number here instead of using 0-9.

It is not allowed to use a combination of numbers and a range like: 0, 1-3, 4. It is not allowed to use ranges other that 0-9 like: 0-3, 4-9.

Extend your controller 

It is up to you to process the letter in your controller. In most cases you may extend your listAction:

/**
 * @param string $letter
 */
public function listAction(string $letter = '')
{
    if ($letter) {
        $myRecords = $this->myRepo->findByLetter($letter);
    } else {
        $myRecords = $this->myRepo->findAll();
    }
    $this->view->assign('myRecords', $myRecords);
}
Copied!

Extend your Repository 

Above we have used a new method findByLetter. With glossary2 4.1.0 you can use our API with Extbase Query or Doctrine.

Example for Extbase Query 

public function findByLetter(string $letter): QueryResultInterface
{
    $glossaryService = GeneralUtility::makeInstance(GlossaryService::class);
    $query = $this->createQuery();

    $constraints = [];
    $constraints[] = $glossaryService->getLetterConstraintForExtbaseQuery($query, 'myColumnName', $letter);

    return $query->matching($query->logicalAnd($constraints))->execute();
}
Copied!

Example for Doctrine 

public function findByLetter(string $letter): QueryResultInterface
{
    $glossaryService = GeneralUtility::makeInstance(GlossaryService::class);
    $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
        ->getQueryBuilderForTable('my_table');
    $queryBuilder
        ->select('*')
        ->from('my_table')
        ->andWhere($glossaryService->getLetterConstraintForDoctrineQuery($queryBuilder, 'my_colum_name', $letter));

    $query = $this->createQuery();
    return $query->statement($queryBuilder)->execute();
}
Copied!

Extend Glossary Function 

We have added two SignalSlots to extend functionality of glossary API

postProcessFirstLetters 

After retrieving the possible first letters from database, we clean, sort and remove duplicates. The result will then be sent to this SignalSlot including the currently used QueryBuilder. It's a simple array as reference:

$firstLetters = [
    0 => '0',
    1 => 'a',
    2 => 'b',
    3 => 'c',
    ...
];
Copied!

Add or remove letters as you like.

modifyLetterMapping 

After retrieving the possible first letters from database, we start a cleaning process of each individual letter. Here, we will map all german umlauts ÄÖÜ to its AOU representation.

If you need further mappings like for french or spain you can use this SignalSlot. You will get the $letterMapping array which you have to return within SignalSlot (not reference).

$letterMapping = [
    // default entries for germany
    'ä' => 'a',
    'ö' => 'e',
    'ü' => 'u',

    // new entries of your extension
    'à' => 'a',
    'è' => 'e',
    'ù' => 'u',
    ...
];
Copied!

Known Problems 

Special entry for 0-9 

Currently it is not possible to separate glossary entry 0-9 into single values

ChangeLog 

Version 7.0.5 

  • [TASK] Tailor TER release configuration updates

Version 7.0.4 

  • [BUGFIX] Pass glossary 'letter' argument to pagination links

Version 7.0.3 

  • [BUGFIX] SiteSet identifier renamed by removing default

Version 7.0.2 

  • [BUGFIX] Backend plugin CType preview

Version 7.0.1 

  • [TASK] Added Glossary2 Site Set
  • [TASK] Modified Update wizard for extending list plugins to CType
  • [BUGFIX] Removed duplicate plugin wizard registered with page.tsconfig.

Version 7.0.0 

  • [TASK] Compatibility fixes for TYPO3 13 LTS
  • [TASK] Removed CSH-related method calls from extension

Version 6.0.1 

  • [BUGFIX] Due to missing upgrade wizard implementation extension throws error in CLI and backend upgrade wizard.

Version 6.0.0 

  • [TASK] Compatibility fix for TYPO3 Version 12
  • [TASK] Category in TCA fixed with type `category´
  • [TASK] Migrated testing framework to TYPO3 Testing Framework

Version 5.1.0 

  • [FEATURE] Allow QueryBuilder and extbase QueryResult for buildGlossar()
  • [DOCU] Update section about how to use Glossary API
  • [BUGFIX] Use extbase query for better localization support (BREAKING)
  • [TASK] Modify params of ModifyQueryOfSearchGlossariesEvent
  • [TASK] Show only categories in default language in FlexForm
  • [TASK] Remove OverlayHelper class
  • [TASK] Remove unused getGlossaries() method from repo

Version 5.0.10 

  • [BUGFIX] Remove exclude from path_segment in TCA
  • [DOCU] Set indents to 4 spaces
  • [DOCU] Streamline the headers
  • [DOCU] Convert Readme.rst to README.md
  • Update .gitignore
  • Update .editorconfig
  • Implement new php-cs-fixer configuration

Version 5.0.9 

  • [DOCU] Mistake in storagePid configuration
  • Add .gitattributes

Version 5.0.8 

  • Add TS settings for GlossaryService

Version 5.0.7 

  • Register GlossaryService as public in Services.yaml

Version 5.0.6 

  • Use array type for $availableLetters instead of string
  • Merge 2 conditions

Version 5.0.5 

  • Add sortby title for all queries

Version 5.0.4 

  • Better support for PHP 8
  • Use ProphecyTrait in functional tests.
  • Reactivate a functional test

Version 5.0.3 

  • Use SQL IN to select one or more categories

Version 5.0.2 

  • Use SimplePaginator instead of our own one

Version 5.0.1 

  • Add documentation about how to integrate Georg Ringers numbered_pagination

Version 5.0.0 

  • Remove TYPO3 9 compatibility
  • Add TYPO3 11 compatibility
  • This version is still TYPO3 10 compatible

Version 4.3.1 

  • Move SlugHelper from constructor argument into getSlugHelper()

Version 4.3.0 

  • Allow overriding templatePath of glossary2 on page basis via TypoScript

Version 4.2.0 

  • Add setting for PID to list/detail view in FlexForm

Version 4.1.1 

  • Use unique instead of uniqueInSite for slug

Version 4.1.0 

  • Add 2 new methods to Glossary2 API to simplify your DB queries
  • All all API options to Fluid Template
  • Replace hard-coded action name in links with action name from API options

Version 4.0.2 

  • Use translation for path_segment from glosssary2 lang files

Version 4.0.1 

  • Make templatePath configurable with Extension Settings

Version 4.0.0 

  • Remove TYPO3 8 compatibility
  • Add TYPO3 10 compatibility
  • Add Service.yaml for DI
  • BUGFIX: Use DEV-Autoloader of glossary2 instead of events2
  • Repair UnitTests and FunctionalTests.
  • Add many more FunctionalTests
  • Add API to build a Glossary for foreign extensions
  • Add documentation for Glossary API
  • Update DocHeader. Add LICENSE file

Version 3.0.2 

  • Add link to our new Routes documentation in our documentation

Version 3.0.1 

  • Add documentation for Route configuration

Version 3.0.0 

  • Changed all templates. They are using bootstrap classes now by default
  • Add SignalSlot to GlossaryRepository to modify Extbase Query
  • Removed SwitchableControllerActions from FlexForm. Please start UpdateWizard.
  • Add option to enable/disable the A-Z links on top
  • Add option to add/remove an ALL-Link in front of A-Z link list.
  • Removed action method showWithoutGlossar from Controller.
  • Moved ext_icon to new location in Public/Icons
  • Add Icon for glossary table
  • Little code refactorings like removing @return void
  • Update documentation

Version 2.2.0 

  • Add documentation
  • Add new ext_icon as SVG

Version 2.1.1 

  • Now you can add cropping, alt and title information to images

Sitemap