TYPO3 9.5:在语言/路由增强器之后放置自定义路径段

TYPO3 9.5: put a custom-path segment after language / route enhancers

正在将 von TYPO3 8.7 迁移到 9.5 我需要替换旧的 realurl-configuration 以匹配新路由:

Old-Realurl 配置:语言后国家/地区的自定义段:

'preVars' => array(
        array(
            'GETvar' => 'L',
            'valueMap' => array(
                'en' => '0', // darf nicht auskommentiert sein!
                'de' => '1',
                'pl' => '2',
                ...

        array(
            'GETvar' => 'C',
            'valueMap' => array(
                'de'=>'1',
                'ch'=>'2',
                'ch'=>'3',      

我在 TYPO3 9.5 站点配置中尝试了 "simple" 路由增强器:

languages:
  -
    title: English
    enabled: true
    languageId: 0
    base: /en/
    typo3Language: default
    locale: en_US.UTF-8
    iso-639-1: en
    navigationTitle: English
    hreflang: en-us
    direction: ltr
    flag: us
  -
    title: German
    enabled: true
    base: /de/
    typo3Language: de
    locale: de_DE.UTF-8
    iso-639-1: de
    navigationTitle: ''
    hreflang: ''
    direction: ''
    fallbackType: fallback
    fallbacks: ''
    flag: de
    languageId: '1'
rootPageId: 1
routes: {  }
routeEnhancers:
  Country:
    type: Simple
    routePath: '/{Country}'
    defaults:
    requirements:
      C: '[1-21]'
    aspects:
      Country:
        type: StaticValueMapper
        map:             
          de: 1
          ch: 2

但是国家段不会出现在 Language 和 main-slug 之间: 旧网址: www.mydomain.com/de/ch/home/

使用我的 rout-enhancer 配置(上图): www.mydomain.com/de/home/ch/

有谁知道如何实现这个自定义细分并让它出现在正确的位置?

非常感谢任何提示

路由增强器在页面后添加了一些内容 URL。但是,我们有类似的情况。这是我必须做的才能让它发挥作用:

靠右link:

1。正在解决传入页面请求

构建自定义中间件(语言解析后,在PSR-15中间件的PSR-7请求中提供SiteRouteResult) 然后这个中间件获取 SiteRouteResult 的 "tail",并根据给定的静态列表解析参数(就像它在列表中可用一样)。之后,我创建了一个新的 SiteRouteResult 对象,并从尾部删除了该 pathSegment。 请记住,将已解析的参数存储为页面的 "variant" 可能非常有用,因此,有效地连接到 TSFE,其中 createHashBase() 被构建为也在该变量中计算。

我建议将此字符串存储在请求中作为自定义 属性,或作为自定义 TSFE 属性。

无法使用 RouteEnhancer 解决 "prePathVar",因为只有在找到页面后才会选择正确的路由增强器。如果您的 URL 有“/ch/home” TYPO3 PageRouter 无法找到正确的页面。

2。使用“&c”查询参数创建 links

创建一个充当装饰器的 RouteEnhancer(请参阅 PageType 增强器)。但是,装饰器不需要 "undecorate" / "resolve" 和 URL (什么都不做)。 如果您还使用 PageTypeDecorator,这会变得棘手,因为您只能有一个,因此如果您还需要映射 typeNums,则可能需要从 Core 扩展一个。

在任何情况下,自定义增强器都可以在生成的路由上添加静态地图前缀,具体取决于是否提供了类型。

希望对您有所帮助!