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 中我需要替换这个处理。 我的问题是:

如果有任何提示如何正确启动,我会很高兴

简短回答:不,您必须添加一个 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" 自动化