.. ================================================== .. FOR YOUR INFORMATION .. -------------------------------------------------- .. -*- coding: utf-8 -*- with BOM. .. ================================================== .. DEFINE SOME TEXTROLES .. -------------------------------------------------- .. role:: underline .. role:: typoscript(code) .. role:: ts(typoscript) :class: typoscript .. role:: php(code) 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: Show 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: Show 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 Achtung 3: wenn man die "Einzelansicht 2" (erweiterte Einzelansicht) benutzt, muss man Content::show durch Content::showExtended ersetzen. Achtung 4: vor Camaliga 12 muss man bei plugin: Pi1 statt Show benutzen. Und ab Camaliga 12 muss man Show evtl. durch Showextended ersetzen, wenn man nicht die normale Single-Ansicht benutzt! Man kann auch Kategorien in den routeEnhancers verwenden. Allerdings geht das nur mit Kategorien eines "parents". Wenn der parent die ID 10 hat, kann man so einen routeEnhancer für die Suche nach Camaliga-Elementen, die eine Kategorie haben, deren parent 10 ist:: routeEnhancers: CatCamaliga: type: Extbase extension: Camaliga plugin: Show limitToPages: - 45 routes: - routePath: '/{category-name}' _controller: 'Content::search' _arguments: category-name: cat10 defaultController: 'Content::search' aspects: category-name: type: PersistedAliasMapper tableName: sys_category routeFieldName: slug Zusätzlich muss man das Template per TypoScript setzen, dass bei der Suche verwendet werden soll:: plugin.tx_camaliga.settings.extended.template = Openstreetmap 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.+)-(?P\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.+)-(?P\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]', ), ), ... ), ),