TYPO3 9.5 自定义扩展路由(产品导航器)- 替换 Realurl
TYPO3 9.5 Routing for custom extension (Product Navigator) - replacement of Realurl
在 TYPO3 9.5 Realurl 可以处理 URLs 之前,我有以下 realurl 配置:
'productConfiguration' => array(
array(
'GETvar' => 'tx_bitproducts_productview[product]',
'lookUpTable' => array(
'table' => 'tx_bitproducts_domain_model_product',
'id_field' => 'uid',
'alias_field' => 'productname',
'addWhereClause' => ' AND (sys_language_uid=0) AND deleted=0 AND hidden=0 AND pid=185 ',
'useUniqueCache' => 1,
'useUniqueCache_conf' => array(
'strtolower' => 1,
'spaceCharacter' => '-'
),
'enable404forInvalidAlias' => true
)
),
array(
'GETvar' => 'tx_bitproducts_productview[action]',
'noMatch' => 'bypass',
),
array(
'GETvar' => 'tx_bitproducts_productview[controller]',
'noMatch' => 'bypass'
),
),
'195' => 'productConfiguration',
在 TYPO3 9.5 中我需要替换这个处理。
我的问题是:
- 我需要一个额外的字段吗f.eg。 "path_segment" 在我的 EXT table 中,就像在 tx_news 中一样,或者 URL 可以像在旧的 realurl 中一样即时生成吗?
这将实现,productnames 中的空格被替换为 f.eg。减号,整个段都变成小写
- 我只想在 URL 中包含英文产品名称(请参阅上面的 realurl 配置)。这可能吗?
- 我可以使用 "Extbase" 类型的 RouteEnhancer 完成所有这些吗?
如果有任何提示如何正确启动,我会很高兴
简短回答:不,您必须添加一个 slug 字段或添加一个自定义方面 class
长答案:
- 参数没有自动转换为小写字母和空格为破折号。因此,要么向您的 table 添加一个 slug 字段并在修改页面标题时填充它,要么编写一个自定义方面 class.
- PersistedAliasMapper 无法添加自定义 where 子句。
- Enhancer 仅将 extbase 参数映射到语音 url,例如"/some/page?plugin[controller]=MyController&plugin[action]=myAction&plugin[foo]=Some Value" => "/some/page/Some Value" 在站点配置中将 MyController 和 myAction 设置为默认值。
所以你有两种可能:
a) 添加一个 slug 字段到你的 table 并在更改标题时用 "optimized" 英语值填充它并使用 PersistedAliasMapper 方面
b) 添加一个自定义方面 class,它将“/Some Value”段映射到您的英语优化变体“/some-value”,然后返回!。 (在 9.5 中,您不知道 link 的目标语言 [例如对于语言切换器],因此值必须始终为英语,这符合您的要求:-))
添加方面 class 就像在 ext_localconf.php 中添加一行一样简单:
$GLOBALS['TYPO3_CONF_VARS']['SYS']['routing']['aspects']['ASPECTNAME'] = MyAspect::class;
并编写一个小的 Class 实现带有生成和解析方法的 StaticMappableAspectInterface。
因此,如果您知道如何使用方面将 "optimized" 版本转换回原始版本,可能会更容易。如果您不能恢复优化,数据库中的 slug-field 可能会更容易。但是没有像 realurl
那样的 "optimize and store original value" 自动化
在 TYPO3 9.5 Realurl 可以处理 URLs 之前,我有以下 realurl 配置:
'productConfiguration' => array( array( 'GETvar' => 'tx_bitproducts_productview[product]', 'lookUpTable' => array( 'table' => 'tx_bitproducts_domain_model_product', 'id_field' => 'uid', 'alias_field' => 'productname', 'addWhereClause' => ' AND (sys_language_uid=0) AND deleted=0 AND hidden=0 AND pid=185 ', 'useUniqueCache' => 1, 'useUniqueCache_conf' => array( 'strtolower' => 1, 'spaceCharacter' => '-' ), 'enable404forInvalidAlias' => true ) ), array( 'GETvar' => 'tx_bitproducts_productview[action]', 'noMatch' => 'bypass', ), array( 'GETvar' => 'tx_bitproducts_productview[controller]', 'noMatch' => 'bypass' ), ), '195' => 'productConfiguration',
在 TYPO3 9.5 中我需要替换这个处理。 我的问题是:
- 我需要一个额外的字段吗f.eg。 "path_segment" 在我的 EXT table 中,就像在 tx_news 中一样,或者 URL 可以像在旧的 realurl 中一样即时生成吗? 这将实现,productnames 中的空格被替换为 f.eg。减号,整个段都变成小写
- 我只想在 URL 中包含英文产品名称(请参阅上面的 realurl 配置)。这可能吗?
- 我可以使用 "Extbase" 类型的 RouteEnhancer 完成所有这些吗?
如果有任何提示如何正确启动,我会很高兴
简短回答:不,您必须添加一个 slug 字段或添加一个自定义方面 class
长答案:
- 参数没有自动转换为小写字母和空格为破折号。因此,要么向您的 table 添加一个 slug 字段并在修改页面标题时填充它,要么编写一个自定义方面 class.
- PersistedAliasMapper 无法添加自定义 where 子句。
- Enhancer 仅将 extbase 参数映射到语音 url,例如"/some/page?plugin[controller]=MyController&plugin[action]=myAction&plugin[foo]=Some Value" => "/some/page/Some Value" 在站点配置中将 MyController 和 myAction 设置为默认值。
所以你有两种可能: a) 添加一个 slug 字段到你的 table 并在更改标题时用 "optimized" 英语值填充它并使用 PersistedAliasMapper 方面 b) 添加一个自定义方面 class,它将“/Some Value”段映射到您的英语优化变体“/some-value”,然后返回!。 (在 9.5 中,您不知道 link 的目标语言 [例如对于语言切换器],因此值必须始终为英语,这符合您的要求:-))
添加方面 class 就像在 ext_localconf.php 中添加一行一样简单:
$GLOBALS['TYPO3_CONF_VARS']['SYS']['routing']['aspects']['ASPECTNAME'] = MyAspect::class;
并编写一个小的 Class 实现带有生成和解析方法的 StaticMappableAspectInterface。
因此,如果您知道如何使用方面将 "optimized" 版本转换回原始版本,可能会更容易。如果您不能恢复优化,数据库中的 slug-field 可能会更容易。但是没有像 realurl
那样的 "optimize and store original value" 自动化