我需要一个自定义方面映射器类,以定义可选的get参数的值。此参数包含一个带有额外数据的cf_cache标识符。但是此参数会产生一个我不需要的cHash参数,也不想在URL中看到。
如果要求过于宽松,则将URL签名参数(“ cHash”)添加到无法删除的URL的末尾。
还有:
如果您真的需要永远不要使用cHash参数,请确保所有占位符对页面段的结果(例如分页)都有严格的定义,并可以自由构建自定义映射器。
功能描述仅说明如何在ext_tables.php中注册自定义增强器类,而不说明如何使用自己的方面映射器:-(
很高兴,但是如何?
答案 0 :(得分:0)
解决方案很简单,但是看来文档是错误的。根据文档,应该在ext_tables.php中使用$ GLOBALS ['TYPO3_CONF_VARS'] ['SYS'] ['routing'] ['CustomPlugin']注册一个Custom Enhancer。
更新
如果映射器已在ext_tables.php中注册,则仅当您登录TYPO3 BE时它才有效。映射器似乎必须在ext_localconf.php中注册。然后,它可以工作而无需登录BE
查看数组$ GLOBALS ['TYPO3_CONF_VARS'] ['SYS'] ['routing'],显示出Aspects和Enhancers的注册位置:
在ext_tables.php中注册映射器:
// Custom Routing Aspects Mapper
$GLOBALS['TYPO3_CONF_VARS']['SYS']['routing']['aspects']['IdentifierValueMapper'] = \VENDOR\Extension\Routing\Aspect\IdentifierValueMapper::class;
aspects类:
<?php
namespace VENDOR\Extension\Routing\Aspect;
use TYPO3\CMS\Core\Routing\Aspect\StaticMappableAspectInterface;
use TYPO3\CMS\Core\Site\SiteLanguageAwareTrait;
class IdentifierValueMapper implements StaticMappableAspectInterface
{
use SiteLanguageAwareTrait;
/**
* {@inheritdoc}
*/
public function generate(string $value): ?string
{
...
return $value !== false ? (string)$value : null;
}
/**
* {@inheritdoc}
*/
public function resolve(string $value): ?string
{
...
return isset($value) ? (string)$value : null;
}
}
在没有自定义映射器的情况下,我的URL始终具有TYPO3 cHash属性(在我的情况下,绝对无用/非常丑陋)
/ page / 2 / price / asc / 03510890954e251e285104f156298e55952e4c7d?cHash = dd66994f041278f4c6bf2f7f64fb09e4
现在我得到的网址没有cHash:
/ page / 3 / price / asc / ae636e66563e72d3e4f592173f328fecbee5e44f