是否有任何挂钩可以处理与typo3 8.7的新链接的链接?
在旧的linkHandler扩展程序上可以定义挂钩以根据需要处理链接。我需要根据某些规则覆盖Typolink的参数。有没有办法在我的扩展程序上执行此操作?
有多个点可以连接到。
typolink后处理
您可以将键入后处理中挂钩,以在渲染之前修改Typolink本身。
为此,您首先在ext_tables/ext_localconf中注册自定义类:
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_content.php']['typoLink_PostProc'][] = 'Vendor\Name\Service\TypoLinkProcessingService->postProcessTypoLink';
然后,在您的TypoLinkProcessingService
类中(当然,以您的选择名称(,您会在自己的方法中处理它。为了可视化目的,在此示例中,如果它是指向YouTube视频的链接,我正在更改URL,以便在末尾关闭"相关视频",并修改YouTube播放器内部的控件使用的颜色。<<<<<<<<<<<<<<<</p>
public function postProcessTypoLink(&$parameters, ContentObjectRenderer &$parentObject)
{
if (isset($parameters['finalTagParts']['url'])) {
$urlParts = parse_url($parameters['finalTagParts']['url']);
if (stristr($urlParts['host'], 'youtube.com') !== false && stristr($urlParts['path'], 'watch') !== false) {
$parameters['finalTag'] = str_replace(
'"' . htmlspecialchars($parameters['finalTagParts']['url']) . '"',
'"' . htmlspecialchars($parameters['finalTagParts']['url'] . '&rel=0&color=ffffff') . '"',
$parameters['finalTag']
);
}
}
}
typolink userfunc
另一个选项是使用userFunc
并调整链接。
为此,您可以配置链接Handler配置(pagets(在typolink
内提供userFunc
。根据需要添加Typoscript以稍后获取配置的数据。
config.recordLinks {
tx_myest {
typolink {
userFunc = VendorNameUserFuncTypolinkUserFunc->parseLinkHandlerTypolink
userFunc {
newsUid = TEXT
newsUid.data = field:uid
newsClass = TEXT
newsClass.data = parameters:class
defaultDetailPid = 53
}
}
}
}
在parseLinkHandlerTypolink
方法中,您可以访问配置的属性并根据需要进行调整:
class TypolinkUserFunc
{
/**
* @var TYPO3CMSFrontendContentObjectContentObjectRenderer
* @inject
*/
public $cObj;
/**
* Add a method description here
*
* @param array $content
* @param array $configuration
* @return string
*/
public function parseNewsLinkHandlerTypolink(array $content, array $configuration)
{
if (!$configuration['newsUid']) {
return;
}
$params = $this->cObj->cObjGetSingle($configuration['newsClass'], $configuration['newsClass.']);
$newsUid = (int)$this->cObj->cObjGetSingle($configuration['newsUid'], $configuration['newsUid.']);
// ... your code goes here ...
$url = $this->cObj->typolink('', $typolink);
return '<a href="' . $url . '" ' . $attributes . '>';
}
}
另外,在8.6中引入的钩子也可能会为您提供帮助:https://docs.typo3.org/typo3cms/extensions/core/core/changelog/8.6/feature-79121-imimplementhookinkintypolinkintypolinkintypolinkodificationofpageparams.htmss.html