b13/uniquealiasmapper

Registers a Mapper for URL enhancements

Installs: 2 394

Dependents: 0

Suggesters: 0

Security: 0

Stars: 7

Watchers: 8

Forks: 2

Open Issues: 1

Type:typo3-cms-extension

1.1.0 2021-10-21 10:25 UTC

This package is auto-updated.

Last update: 2024-10-21 21:07:07 UTC


README

TYPO3 v9 comes with great ways to enhance URLs, called "Enhancers" for additions / suffixes for a page URL, and "Aspects" (and their special category "Mappers"), to transform a specific value back and forth between the application and the URL.

This extension ships with a new Mapper called UniqueAlias. It works similar to what people know from the PersistedAliasMapper, however when using TYPO3 installations, our projects mostly want:

  • to have the key unique, even if two records have the same title
  • everything special-chared and lower-case

Installation

Use it via composer req b13/uniquealiasmapper or install the Extension uniquealiasmapper from the TYPO3 Extension Repository.

Once ready, you can configure the Mapper in your site configuration file.

Example with tt_address.company

Example which maps $_GET['addressid'] into a /address/burger-king-germany based on the company field of tt_address.

routeEnhancers:
  AliasExample:
    type: Simple
    routePath: '/address/{partneralias}'
    _arguments:
      partneralias: addressid
    aspects:
      partneralias:
        type: UniqueAlias
        tableName: 'tt_address'
        aliasField: 'company'
        expires: '15d'
        uniqueConfiguration:
          fallbackCharacter: '-'

In the partial ListItem.html of tt_address the link could be generated this way: <f:link.page pageUid="{settings.singlePid}" additionalParams="{addressid: address}">Details</f:link.page>.

With the Unique Alias Mapper, the URL will look like this: https://example.com/my/page/address/burger-king-germany/

With TYPO3's Core "PersistedAliasMapper" the URL will look like this https://example.com/my/page/address/Burger%20King%20Germany/.

On top, this Mapper comes with a caching layer in between, just like RealURL's "uniqAlias" feature did in the past.

Even more complex route enhancers are possible too. An example for a link with a controller/action (Movie/show) of an extension myext where the uid is in the parameter tx_myext_pi1[content] and title is a column of tx_myext_domain_model_content:

routeEnhancers:
  MyextPlugin:
    type: Extbase
    limitToPages:
      - 24
    extension: Myext
    plugin: Pi1
    routes:
      -
        routePath: '/entry/{myext_title}'
        _controller: 'Movie::show'
        _arguments:
          myext_title: content
    defaultController: 'Movie::list'
    aspects:
      myext_title:
        type: UniqueAlias
        tableName: tx_myext_domain_model_content
        aliasField: title
        expires: 15d
        uniqueConfiguration:
          fallbackCharacter: '-'

ToDo

The expiration functionality does not cut it yet, so we need to improve this area. Pull Requests welcome.

Thanks

Thanks to the RealURL authors for providing such a good logic, which served as inspiration for this Mapper. On top, the creators of the Aspects/Mappers - thanks to them for providing such a flexible and extensible way for creating custom mappers and enhancers.

License

As TYPO3 Core, uniquealiasmapper is licensed under GPL2 or later. See the LICENSE file for more details.

Authors & Maintenance

uniquealiasmapper was initially created for a customer project by Benni Mack for b13, Stuttgart.

Find more TYPO3 extensions we have developed that help us deliver value in client projects. As part of the way we work, we focus on testing and best practices to ensure long-term performance, reliability, and results in all our code.