Wie richte ich sprechende URLs für die Extension News System (tx_news) ab TYPO3 9.5 LTS ein?

|   TYPO3 | TYPO3 9.5 LTSTYPO3 10.4 LTSNews System

Die Extension Speaking URLs for TYPO3 (realurl), für sprechende - also für Menschen gut lesbare - URL-Pfade einer Website, wird vom Entwickler nur bis TYPO3 Version 8.x unterstützt. Seit TYPO3 9.5 LTS wird sie aber auch nicht mehr benötigt denn jetzt beherrscht der TYPO3-Core selbst die Umschreibung von URLs. In diesem Tutorial wird gezeigt, wie du die Site Configuration von TYPO3 für sprechende URLs für die Extension News System (tx_news) anpasst.

Wie man URLs mit News-Parametern umschreibt

Du kannst URL-Parameter mit den Routing Enhancern und Aspects umschreiben. Dafür musst du die Konfiguration manuell in der config.yaml erweitern:

  1. Wenn der Abschnitt routeEnhancers noch nicht existiert, füge ihn hinzu.
  2. Wähle einen eindeutigen Bezeichner für deinen Routing Enhancer. Er muss nicht mit einem Extension-Schlüssel übereinstimmen.
  3. type: Für News System wird der Extbase Plugin Enhancer (Extbase) verwendet.
  4. extension: der Extension-Schlüssel in UpperCamelCase Schreibweise
  5. plugin: Der Plugin-Name von news ist einfach Pi1.
  6. Danach konfiguriere je nach Anwendungsfall einzelne Routes und Aspects.
routeEnhancers:
  NewsSystem:
    type: Extbase
    extension: News
    plugin: Pi1
	# ...

Wenn dein Routing nicht wie erwartet funktioniert, überprüfe die Einrückung deiner Konfigurationsblöcke. Die korrekte Einrückung ist in YAML entscheidend.

Verwenden von limitToPages

Es wird grundsätzlich empfohlen, routeEnhancers auf die Seiten zu beschränken, auf denen sie benötigt werden. Dadurch wird die Leistung beim Erstellen von Seitenrouten aller anderen Seiten beschleunigt. Dies geschieht durch den Eintrag limitToPages. Im folgenden Beispiel wird der routeEnhancer auf die Seiten mit den IDs 89, 105 und 114 beschränkt.

routeEnhancers:
  NewsSystem:
    type: Extbase
    limitToPages:
      - 89
      - 105
      - 114
    extension: News
    plugin: Pi1
	# ...

Mehrere routeEnhancers für News System

Wenn du News System für verschiedene Zwecke auf derselben Website verwenden möchtest (z. B. News und Events), möchtest du möglicherweise unterschiedliche URL-Pfade für diese verwenden (z. B. /artikel/ und /veranstaltung/). Es ist möglich, mehr als eine Routing-Erweiterung für das News-Plugin auf derselben Website zu konfigurieren.

Verwende auf jeden Fall limitToPages, um den gewünschten Seiten die passende Konfiguration zuzuweisen.

routeEnhancers:
  NewsSystem:
    type: Extbase
    limitToPages:
      - 89
      - 105
      - 114
    extension: News
    plugin: Pi1
    # ...
  NewsEvents:
    type: Extbase
    limitToPages:
      - 238
      - 239
    extension: News
    plugin: Pi1
    # ...

routes und aspects

  • routes erweitern eine bestehende Route, d.h. deine Domain und den Seitenpfad, mit Argumenten (arguments) aus den GET-Parametern, wie das folgende Beispiel zeigt
  • aspects können verwendet werden, um diese Argumente zu ändern. Du kannst z. B. den Titel bzw. das Pfadsegment der aktuellen Nachricht mappen. Es sind verschiedene Arten von Mappern und Modifikatoren verfügbar.
  1. URL der Detailseite ohne Routing:
    www.open-how2.de/news/detail=
     
  2. URL der Detailseite mit Routing:
    www.open-how2.com/news/detail/5?cHash=
     
  3. URL der Detailseite mit routes und aspects:
    www.open-how2.de/news/detail/titel-des-news-artikels
routeEnhancers:
  NewsSystem:
    type: Extbase
    limitToPages:
      - 89
      - 105
      - 114
    extension: News
    plugin: Pi1
	routes:
      - routePath: '/{news-title}'
        _controller: 'News::detail'
        _arguments:
          news-title: news
    aspects:
      news-title:
        type: PersistedAliasMapper
        tableName: tx_news_domain_model_news
        routeFieldName: path_segment
    # etc.

Beachte den Platzhalter {news-title}

  • zuerst Weist du in _arguments den Wert des News-Parameters tx_news_pi1[news] zu
  • dann fügst du in routePath der Route hinzu
  • anschließend verwendest du aspects, um das path_segment des angegebenen Arguments abzubilden

Sowohl routes als auch aspects sind nur innerhalb des aktuellen Routing Enhancers verfügbar. Die Namen der Platzhalter sind nicht vorgegeben und somit frei wählbar.

Grundlegende Einrichtung (einschließlich Kategorien und Tags)

Voraussetzungen

  • die Plugins für Listenansicht und Detailansicht befinden sich auf separaten Seiten
  • wenn du das Kategoriemenü oder die Tag-Liste zum Filtern von News-Datensätzen verwendest, werden deren Titel (slugs) verwendet
routeEnhancers:
  NewsSystem:
    type: Extbase
    limitToPages:
      - 89
      - 105
      - 114
    extension: News
    plugin: Pi1
	routes:
      - routePath: '/'
        _controller: 'News::list'
      - routePath: '/page-{page}'
        _controller: 'News::list'
        _arguments:
          page: '@widget_0/currentPage'
      - routePath: '/{news-title}'
        _controller: 'News::detail'
        _arguments:
          news-title: news
      - routePath: '/{category-name}'
        _controller: 'News::list'
        _arguments:
          category-name: overwriteDemand/categories
      - routePath: '/{tag-name}'
        _controller: 'News::list'
        _arguments:
          tag-name: overwriteDemand/tags
    defaultController: 'News::list'
    defaults:
      page: '0'
    aspects:
      news-title:
        type: PersistedAliasMapper
        tableName: tx_news_domain_model_news
        routeFieldName: path_segment
      page:
        type: StaticRangeMapper
        start: '1'
        end: '100'
      category-name:
        type: PersistedAliasMapper
        tableName: sys_category
        routeFieldName: slug
      tag-name:
        type: PersistedAliasMapper
        tableName: tx_news_domain_model_tag
        routeFieldName: slug

Die Slug-Felder für Kategorien und Tags sind nur verfügbar, wenn du news 7.1.0 oder höher verwendest.