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 扩展一个。
在任何情况下,自定义增强器都可以在生成的路由上添加静态地图前缀,具体取决于是否提供了类型。
希望对您有所帮助!
正在将 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 扩展一个。
在任何情况下,自定义增强器都可以在生成的路由上添加静态地图前缀,具体取决于是否提供了类型。
希望对您有所帮助!