Skip to content

Latest commit

 

History

History
121 lines (100 loc) · 3.83 KB

File metadata and controls

121 lines (100 loc) · 3.83 KB

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]',
        ),
    ),

  ...
 ),
),