Slug

Ab TYPO3 9 kann man routeEnhancers benutzen, um das Format der Links zu Einzelseiten zu ändern. Hier ein Beispiel für die yaml-Datei:

routeEnhancers:
  CamaligaPlugin:
    type: Extbase
    limitToPages: [24]
    extension: Camaliga
    plugin: Pi1
    routes:
      - { routePath: '/more/{camaliga_uid}', _controller: 'Content::show', _arguments: {'camaliga_uid': 'content'} }
    defaultController: 'Content::list'

limitToPages ist optional. Man kann die Regel auf bestimmte Seiten beschränken, die Einzelansichten anzeigen. Ersetze die 24! In diesem Beispiel wird die uid eines Camaliga-Elements hinter “more” eingefügt. Hier ein anderes Beispiel, welches das Slug-Feld benutzt:

routeEnhancers:
  CamaligaPlugin:
        type: Extbase
        limitToPages: [24]
        extension: Camaliga
        plugin: Pi1
        routes:
          - { routePath: '/eintrag/{camaliga_title}', _controller: 'Content::show', _arguments: {'camaliga_title': 'content'} }
        defaultController: 'Content::list'
        aspects:
          camaliga_title:
                type: PersistedAliasMapper
                tableName: 'tx_camaliga_domain_model_content'
                routeFieldName: 'slug'

Achtung 1: wenn man das slug-Feld benutzt, sollte man sicher sein, dass die slug-Felder auch befüllt sind. Dazu kann man einen Scheduler-Task von camaliga benutzen.

Achtung 2: wenn man 2 Felder für das slug-Feld konfiguriert hat, wird ‘_’ oder ‘-’ statt ‘/’ als Separator benutzt, wegen diesem Problem: https://forge.typo3.org/issues/87333

Hier noch 2 nicht so schöne / alte Beispiele:

routeEnhancers:
  CamaligaPlugin:
        type: Extbase
        limitToPages: [382]
        extension: Camaliga
        plugin: Pi1
        routes:
          - { routePath: '/googlemaps/{camaliga_place}', _controller: 'Content::map', _arguments: {'camaliga_place': 'content'} }
        defaultController: 'Content::map'
        aspects:
          camaliga_place:
                type: PersistedPatternMapper
                tableName: 'tx_camaliga_domain_model_content'
                routeFieldPattern: '^(?P<city>.+)-(?P<uid>\d+)$'
                routeFieldResult: '{city}-{uid}'

In diesem Beispiel wird die Stadt und die uid eines Camaliga-Eintrags benutzt, um ihn dann auf einer Google-maps-Karte anzuzeigen. Achtung: zur Zeit gibt es noch kein slug-Feld in der Camaliga-Tabelle, sodass keine Konvertierung zu einem guten Link-String stattfindet. Es tauchen also z.B. ggf. Leerzeichen im Link auf. Beachte: das Beispiel funktioniert nur, wenn man kein “/” bei der Stadt verwendet.

Man kann das ganze auch anders schreiben. Das Ergebnis ist allerdings das gleiche (aber ohne /googlemaps):

routeEnhancers:
  CamaligaPlugin:
        type: Plugin
        limitToPages: [382]
        namespace: 'tx_camaliga_pi1'
        routePath: '/{content}'
        requirements:
          content: '[0-9]{1..5}'
        aspects:
          content:
                type: PersistedPatternMapper
                tableName: 'tx_camaliga_domain_model_content'
                routeFieldPattern: '^(?P<city>.+)-(?P<uid>\d+)$'
                routeFieldResult: '{city}-{uid}'

Weitere Informationen dazu findet man hier: https://typo3worx.eu/2018/12/typo3-routing-extensions-and-enhancers/

RealUrl

Bis TYPO3 8 kann man RealUrl benutzen, um das Format der Links zu Einzelseiten zu ändern. Hier ein Beispiel für die RealUrl-config-Datei:

'postVarSets' => array(
  '_DEFAULT' => array(
  ...

        'camaliga' => array( // this key must be unique
            array(
                'GETvar' => 'tx_camaliga_pi1[action]',
            ),
            array(
                'GETvar' => 'tx_camaliga_pi1[controller]',
            ),
            array(
                'GETvar' => 'tx_camaliga_pi1[content]',
            ),
        ),

  ...
 ),
),