有沒有鉤來處理與TYPO3 8.7的新器linkHandler鏈接?器linkHandler鉤8
在舊器linkHandler擴展可以定義一個鉤子來處理環節,因爲我們想要的。 我需要覆蓋typolink的基於某些規則的參數。有沒有辦法在我的擴展上做到這一點?
有沒有鉤來處理與TYPO3 8.7的新器linkHandler鏈接?器linkHandler鉤8
在舊器linkHandler擴展可以定義一個鉤子來處理環節,因爲我們想要的。 我需要覆蓋typolink的基於某些規則的參數。有沒有辦法在我的擴展上做到這一點?
有多個點掛接到。
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
類中(與您所選擇的名稱,當然),你會處理這裏面你自己方法。對於可視化的目的,在這個例子中,我改變的URL如果是爲了關閉「相關視頻」末,並修改通過YouTube的播放器裏面的控件所使用的顏色到YouTube視頻的鏈接。
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
和適應的鏈接。
爲此,您需要配置您的鏈接處理程序配置(PageTS),以便在typolink
中提供userFunc
。根據需要添加TypoScript以稍後獲取配置的數據。
config.recordLinks {
tx_myest {
typolink {
userFunc = Vendor\Name\UserFunc\TypolinkUserFunc->parseLinkHandlerTypolink
userFunc {
newsUid = TEXT
newsUid.data = field:uid
newsClass = TEXT
newsClass.data = parameters:class
defaultDetailPid = 53
}
}
}
}
裏面你parseLinkHandlerTypolink
方法,您可以訪問配置性能和適應的要求:
class TypolinkUserFunc
{
/**
* @var \TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer
* @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/Changelog/8.6/Feature-79121-ImplementHookInTypolinkForModificationOfPageParams.html