Franz Holzinger

Verse of the day

Der Weisheit Anfang ist des HERRN Furcht, und den Heiligen erkennen ist Verstand.
Sprueche 9:10

© Bible Gateway's Verse of the Day


Autor  
11-03-20 14:42:12 Typo3 9: Single View mit lesbarer URL
Felix Pomplun
Hallo,
hat sich schon jemand an der config.yaml in Typo3 9 beschäftigt?
Mit RealUrl lies sich die URL sehr gut modelieren, dies ist jetzt nicht mehr möglich und muss händisch in der config.yaml angepasst werden.

Ich habe ein Beispiel für die Extension 'News', welches sehr gut funktioniert. Es gelingt mir nicht dieses Beispiel auf tt_products zu übertragen.
Hier ist der Code:
routeEnhancers:
NewsPlugin:
type: Extbase
limitToPages: [252]
extension: News
plugin: Pi1
routes:
- { routePath: '/{news_title}', _controller: 'News::detail', _arguments: {'news_title': 'news'} }
defaultController: 'News::detail'
aspects:
news_title:
type: PersistedAliasMapper
tableName: 'tx_news_domain_model_news'
routeFieldName: 'path_segment'

Danke für Tips und Tricks
fxp
11-03-20 15:54:03 Plugin statt Extbase
Franz Holzinger
tt_products basiert nicht auf Extbase. Die URL Routing Enhancer Konfiguration in der Yaml Datei muss so wie tt_news umgesetzt werden, nicht wie news, d.h. über den "Plugin Enhancer" und über "Aspects".


11-03-20 16:22:53 URL Routing
Felix Pomplun
Hallo Herr Holzinger,

wenn ich richtig verstehe sollte das dann so aussehen:

TtProducts:
type: Plugin
limitToPages: [167,175]
namespace: 'tt_products'
routePath: '/{tt_products}'
aspects:
tt_products:
type: PersistedPatternMapper
tableName: 'tt_products'
routeFieldPattern: '^(?P<title>.+)-(?P<uid>\d+)$'
routeFieldResult: '{title}-{uid}'

Es ist noch ein Fehler darin, denn es funktioniert so nicht.
Haben Sie noch einen Tip?

Danke und Gruß
fxp
11-03-20 16:32:25 routePath
Franz Holzinger
routePath: '/{product}'

Hier darf nicht tt_products stehen, was im Namespace eingetragen ist. Dort muss der Plugin Assoziative Index eingetragen werden, wie er in der URL bisher erscheint, d.h. tt_products[product] .

Es wäre ev. sinnvoll, mit dem Slug Feld zu arbeiten. Damit hätte man mehr Flexibilität.

aspects:
product:
type: PersistedAliasMapper
tableName: 'tt_products'
routeFieldName: 'slug'
12-03-20 08:39:16 routePath
Felix Pomplun
Danke für den Tip, so funktioniert es! Bekomme ich auch noch die GET-Variablen und den Hash mit diesem Ausdruck aus der URL?

Gruß
fxp
13-03-20 08:36:54 Plugin Enhancer
Sybille Stark
Bei mir klappt es leider nicht. Ich habe in die config.yaml diesen Text gesetzt:

routeEnhancers:
TtProducts:
type: Plugin
# limitToPages: [1,138]
namespace: 'tt_products'
routePath: '/{product}'
aspects:
product:
type: PersistedAliasMapper
tableName: 'tt_products'
routeFieldName: 'slug'

Dies verursacht einen Typo3 Fehler. Könnt ihr mir weiter helfen?

Vielen Dank
Sybille
13-03-20 09:13:16 korrekt
Franz Holzinger
Diese Yaml ist korrekt.

Ggf. müssen die Caches geleert werden.
Ev. noch das ergänzen:

requirements:
product: '[0-9]{1,6}'

13-03-20 09:20:48 korrekt
Felix Pomplun
Noch der Hinweis auf die Einrückungen, bei mir hat es Fehler gegeben, wenn diese nicht absulot richtig sind.

Gruß fxp
13-03-20 10:51:26 kein Erfolg
Sybille Stark
Vielen Dank für den hinweis mit dem Einrücken, jetzt erhalte ich keinen Typo3 Fehler mehr, aber die URL-Auflösung funktioniert weiter nicht.
Über die List-Ansicht erscheint weiterhin: ...details?tt_products[backPID]=14&tt_products[cat]=6&tt_products[product]=154&cHash=535cff8800440c6d29c74f5e258c9354

Direkter Aufruf:
Domain/slug --> 404
Domain/Seitenbaum/Details-Ansicht?slug --> 404

Habt ihr noch eine Idee für mich?

Vielen Dank und viele Grüße
Sybille
13-03-20 11:00:27 funktioniert teilweise
Felix Pomplun
Diese Yaml funkioniert bei mir teilweise:

routeEnhancers:
TtProducts:
type: Plugin
limitToPages: [167,175]
namespace: 'tt_products'
routePath: '/{product}'
aspects:
product:
type: PersistedAliasMapper
tableName: 'tt_products'
routeFieldName: 'slug'

die GET-Variable mit dem Hash bleiben aber in der URL
13-03-20 11:24:01 backPID und cat
Franz Holzinger
Für jeden tt_products Url Parameter muss ein weiterer Eintrag in der YAML Datei gemacht werden. Wenn mehrere Url-Paramter gleichzeitig vorkommen können, dann muss außerdem ein solcher Kombinationseintrag gemacht werden.

Für backPID muss ein Eintrag über aspects gemachtr werden. Danach sollte auch ide cHash Anzeige nicht mehr da sein.
9-04-20 10:45:03 Enhancer
Björn Hahnefeld
Ich würde mich sehr freuen, wenn es einen kompletten Enhancer hier geben würde. Ich bin selbst gerade dabei, von 8.7 auf 9.5 umzustellen. Das hat an sich gut geklappt, aber insbesondere bei tt_products kämpfe ich für eine gelungene Umstellung noch 1. mit einem korrekt funktionierenden Enhancer 2. mit der Ajax-Geschichte, was aber der Autor schon weiß. Ich würde mich freuen, wenn beides bald läuft :)
9-04-20 11:22:43 Beispiel Produktliste
Franz Holzinger
Hier ein funktionierendes Beispiel für eine Produktliste mit Link auf Einzelansicht und backPid. In limitToPages müssen die ids der Seiten eingetragen werden, auf denen die List Plugins liegen.

TtProducts-Liste:
type: Plugin
limitToPages: [99,120]
routePath: '{product}/b-{backPID}'
namespace: 'tt_products'
requirements:
| product: '[0-9]{1,6}'
| backPID: '[0-9]{1,6}'
aspects:
| product:
| type: PersistedAliasMapper
| tableName: 'tt_products'
| routeFieldName: 'slug'
| backPID:
| type: StaticRangeMapper
| start: '1'
| end: '1000'

Ich habe die senkrechten Striche ergänzt, weil im Forum sonst die führenden Leerzeichen wieder gelöscht werden. Die Leerzeichen sind hier aber unverzichtbar. Ohne sie funktioniert es nämlich nicht. Diese Striche müssen aber unbedingt gelöscht werden!
Im TYPO3 Backend müssen die Slug Felder der Produkte ausgefüllt sein. Sonst gibt es nur eine Fehlermeldung wegen nicht gefundener Seite.
9-04-20 11:43:29 Enhancer
Björn Hahnefeld
Was bedeutet denn dieses limitToPages?

In unseren Fall ist es nämlich so, dass unter jeder Listenansicht eine eigene Detail-Seite hängt. Das sind aber mittlerweile duzende Seiten...
9-04-20 15:00:08 limitToPages
Franz Holzinger
limitToPages: Beschränkt die Gültigkeit der Konfiguration auf die angebenen Seiten

Die Einstellung limitToPages muss aus Geschwindigkeitsgründen unbedingt verwendet werden. Denn die sprechende Url muss ja in TYPO3 wieder zurück aufgelöst werden. Das geht meiner Meinung nach viel schneller, wenn die tt_products Konfiguration auf den Seiten ohne tt_products gar nicht berücksichtigt werden muss. TYPO3 muss dann nicht probieren, ob ein Url-Teil wie z.B. 'produkt1' im Slug Feld eines Produktes vorkommt, um ein tt_proucts[product]=32 mit der uid=32 dieses Produktes zu generieren.

Bei limitToPages müssen alle Seiten-Ids mit Shop Plugins Listenansicht eingetragen werden.
9-04-20 17:00:04 Enhancer
Björn Hahnefeld
Das klingt an sich stimmig und schlüssig. Aber in unserem Fall ist es so, dass wir bestimmt mittlerweile 100 Unterseiten haben, auf denen das Plug-in in dieser Ansicht verwendet wird. Zudem kann ja die Einstellung nicht von einem Redakteur geändert/ergänzt werden, weswegen dann schon wieder Unstimmigkeiten auftreten können.
15-04-20 15:18:50 Wiki tt_products
Franz Holzinger
Ich habe das config.yaml von Björn Hahnefeld nun als Beispiel für die Wiki Seite zur Verfügung gestellt bekommen. Dort gibt es weitere Informationen zum Thema "Routing Enhancer mit tt_products".

Dieser Link zur Wiki-Seite also:
https://wiki.typo3.org/Tt_products#Speaking_Url

29-06-20 10:54:38 Enhancer Fehler
Felix Pomplun
Vielen Dank für die sehr nützlichen Hilfen! Die 'config.yml' funktioniert einwandfrei.
Allerdings werden die URL's bei manchen Produkten in der Detailansicht nicht vollständig umgeformt, die 'tt_products[cat]' wird hier noch mit dem Hash versehen.

Meine erste Idee war, das es eine Inkonsistenz in der Datenbank bei den Kategorien gibt.
Die Datenbank sieht für mich aber gut aus.

Kann das am fehlenden limitToPages in der 'config.yaml' liegen?
Das Typoscript für die Detailseiten ist überall gleich, deshalb bin ich etwas ratlos.

29-06-20 23:19:16 welche Produkte?
Franz Holzinger
Womöglich gibt es noch einen Fehler. Aber bei welchen Produkten kommt es zu Fehlern?
limitToPages dient nur dazu, dass das Routing Service weniger Arbeit bei Nicht-Shop Seiten hat. Denn wenn das Routing Service weiß, dass es sich um die tt_products Teile auf gewissen Seiten nicht kümmern muss, dann sollte alles ein wenig schneller gehen. Es könnten sich auch mehrere Extensions in die Quere kommen.
30-06-20 09:49:48 welche Produkte?
Felix Pomplun
Ok, das mit dem 'limitToPages' habe ich verstanden.

Die Produkte und Kategorien sind in einem Systemordner zusammgefasst. es existieren hier 26 Kategorien. Bei den Produkten der Kategorien 1-5 und 12-17 funktioniert das Routing, wie es soll.

Bei den anderen Produkten bleibt die 'tt_products[cat]' mit dem Hash in der URL.
Alle Produkte werden auf der gleichen Detailseite ausgegeben, am TS liegt es dann wohl nicht.

Deshalb war meine Überlegung, das es vielleicht an der Syntax der DB-Einträge liegt (Leerzeichen o.ä.), oder redudanten Datensätzen. Die DB ist aber soweit in Ordnung. Ich hab ein Skript darüber laufen lassen, welches Leerzeichen entfernt, das hat aber nichts gebracht.

Es sind über 130 Kategorien mit 586 Produkten im System. Der Fehler tritt nur bei einem kleinen Teil auf.

Die Kategorien bilden die Bauformen und Baugrößen unserer Geräte ab und sehen für mich alle in Ordnung aus.
7-07-20 16:18:47 Enhancer Fehler
Felix Pomplun
So, ich habe jetzt endlich den Fehler gefunden:
Auf den betreffenden Detailseiten waren default cad's gesetzt.
Das habe ich Vollpfosten übersehen...
< Zurück zum Forum