2017-06-05 73 views
1

有沒有鉤來處理與TYPO3 8.7的新器linkHandler鏈接?器linkHandler鉤8

在舊器linkHandler擴展可以定義一個鉤子來處理環節,因爲我們想要的。 我需要覆蓋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類中(與您所選擇的名稱,當然),你會處理這裏面你自己方法。對於可視化的目的,在這個例子中,我改變的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