Heute schreibe ich darüber, wie man bei der Verwendung von Plugins mit eigenen Daten schöne und sprechende URLs erzeugen kann. Ein Plugin in TYPO3 Neos ist nichts anderes, als ein TYPO3 Flow Paket. In der offiziellen Dokumentation ist beschrieben, wie man ein Plugin anlegt und in Neos verfügbar macht (http://docs.typo3.org/neos/TYPO3NeosDocumentation/IntegratorGuide/CreatingAPlugin.html). Nachdem man das Plugin so konfiguriert hat steht dieses unter den verfügbaren Inhaltselementen zur Verfügung. Außerdem kann man über das Inhaltselement PluginView die Anzeige der Detail Ansicht etc. auf eine andere Seite verlegt werden. Dazu muss auf dieser anderen Seite lediglich ein Plugin View Inhaltselement eingebunden und konfiguriert werden. Wenn das alles so fertig eingerichtet ist können wir uns die Seite bereits ansehen und von der Listenansicht zu einer Einzelansicht wechseln. Bei der Einzelansicht besteht allerdings bezüglich der URLs noch Optimierungsbedarf. Die im Moment ausgespielten Detail URLs beinhalten etwas in der Art:
?--vendor_sitename-pluginname[@package]=package.name &--vendor_sitename-pluginname[@controller]=standard &--vendor_sitename-pluginname[@action]=detail &--vendor_sitename-pluginname[object][__identity]=3084731f-869f-43a3-56c3-9156f24baad5
Diese GET Parameter benötigt TYPO3 Neos um das richtige Plugin zu rendern. Es ist jedoch nicht notwendig, dass diese alle in der URL übergeben werden. In der Datei Routes.yaml kann man einstellen wie URLs in dem Fall generiert werden sollen. Für obige Parameter könnte man beispielsweise die folgende Konfiguration vornehmen:
- name: 'Detail Route' uriPattern: '{node}/details/{--vendor_sitename-pluginname.object}.{@format}' defaults: '@package': 'TYPO3.Neos' '@controller': 'Frontend\Node' '@format': 'html' '@action': 'show' '--vender_sitename-pluginname': '@package': 'Package.Name' '@controller': 'Standard' '@action': 'detail' '@format': 'html' routeParts: node: handler: TYPO3\Neos\Routing\FrontendNodeRoutePartHandler '--vendor_sitename-pluginname.object': objectType: '\Package\Name\Domain\Model\Object' uriPattern: '{property}' appendExceedingArguments: TRUE
Die obige Regel führt dazu, dass nur noch die Property in der URL ausgegeben wird. Es wird also eine URL in der Art
http://{domain}/{node}/detail/property.html
erzeugt und nicht wie vorher:
http://{domain}/{node}?--vendor_sitename-pluginname[@package]=package.name &--vendor_sitename-pluginname[@controller]=standard &--vendor_sitename-pluginname[@action]=detail &--vendor_sitename-pluginname[object][__identity]=3084731f-869f-43a3-56c3-9156f24baad5
Die neuen URLs sind für Besucher viel einfacher zu lesen und auch für Google sind diese besser, da in der URL noch einmal ein Keyword untergebracht ist.
War dieser Artikel verständlich? Habt ihr Fragen oder sollte ich das ganze detaillierter beschreiben dann meldet euch einfach, Entweder über einen Kommentar unter diesem Beitrag, über das Kontaktformular oder per E-Mail.