Damit eine URL schön aufrufbar ist, z.B. /produkte/mein-super-item statt ein langer URL String mit cHash, kann man einen RouteEnhancer einsetzen. Dieser kann auf Basis von DB Felder erzeugt werden.
Slug Feld erstellen
Zuerst legen wir im TCA ein neues Feld namens "Slug" an. Dafür muss natürlich noch die ext_tables.sql und das Model mit Getter und Setter ausgestattet werden.
Das Feld Slug bekommt jetzt folgende Konfiguration:
<?php
'columns' => [
...
'slug' => [
'exclude' => false,
'label' => 'Slug',
'config' => [
'type' => 'slug',
'size' => 50,
'eval' => 'uniqueInSite',
'generatorOptions' => [
'fields' => ['title'],
'replacements' => [
'/' => '-',
' ' => '-'
],
],
'fallbackCharacter' => '-',
],
],
...
]
Dieses Feld generiert jetzt einen einmaligen Text aus dem Feld "title" und ändert ggf. Sonderzeichen und andere Symbole und Leerzeichen z.B. in "-" um.
Routeenhancer erstellen
Unter config/sites/<SEITE>/config.yaml können wir nun unter "RouteEnhancers" den unten stehenden Code einfügen:
ProductDetail:
type: Extbase
limitToPages: [<PID hier eintragen!>]
extension: Produkt
plugin: Detail
defaultController: 'Product::detail'
routes:
- routePath: '/{slug}'
_controller: 'Product::detail'
_arguments:
slug: product
aspects:
slug:
type: PersistedAliasMapper
tableName: 'tx_produkt_domain_model_product'
routeFieldName: 'slug'
Jetzt noch den System-Cache einmal leeren und natürlich in den Datensätzen die Slug-Felder generieren. Und beim nächsten Neuladen kann man die schönen URLs sehen.