2017-06-05 8 views
1

TYPO3 8.7の新しいLinkHandlerとのリンクを処理するフックはありますか?TYPO3のLinkHandlerフック8

上で、私たちが望むようにリンクを処理するフックを定義することができます。 いくつかのルールに基づいてtypolinkのパラメータを上書きする必要があります。私の内線でこれを行う方法はありますか?

答えて

2

フックする複数のポイントがあります。

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を利用してリンクを適応させることです。

このためには、userFunctypolinkの内部に設定するようにリンクハンドラの設定(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