TYPO3 8.7の新しいLinkHandlerとのリンクを処理するフックはありますか?TYPO3のLinkHandlerフック8
上で、私たちが望むようにリンクを処理するフックを定義することができます。 いくつかのルールに基づいてtypolinkのパラメータを上書きする必要があります。私の内線でこれを行う方法はありますか?
TYPO3 8.7の新しいLinkHandlerとのリンクを処理するフックはありますか?TYPO3のLinkHandlerフック8
上で、私たちが望むようにリンクを処理するフックを定義することができます。 いくつかのルールに基づいて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
クラスの内部で、あなた自身の内側にそれを処理したいです方法。視覚化のために、この例では、最後に「関連する動画」をオフにし、YouTubeのプレーヤー内のコントロールに使用されている色を変更するために、YouTube動画へのリンクであればURLを変更しています。
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
を利用してリンクを適応させることです。
このためには、userFunc
をtypolink
の内部に設定するようにリンクハンドラの設定(PageTS)を設定します。後で設定されたデータを取得するために、必要に応じてTypoScriptを追加します。あなたのparseLinkHandlerTypolink
メソッド内
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
}
}
}
}
、あなたが設定されているプロパティにアクセスし、必要に応じて適応することができます。また
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