2017-06-05 6 views
1

Gibt es einen Haken, um Links mit dem neuen LinkHandler für TYPO3 8.7 zu behandeln?LinkHandler-Hook auf TYPO3 8

Auf der alten LinkHandler-Erweiterung ist es möglich, einen Haken zu definieren, um die Links wie gewünscht zu verarbeiten. Ich muss den Parameter von typolink basierend auf einigen Regeln überschreiben. Gibt es eine Möglichkeit, dies auf meiner Erweiterung zu tun?

Antwort

2

Es gibt mehrere Punkte zum Einhaken.

typolink Nachverarbeitung
Sie können in der typolink Nachverarbeitung haken Sie die typolink selbst zu modifizieren, bevor sie gerendert wird.

Dazu Sie zuerst Ihre eigene Klasse in ext_tables/ext_localconf registrieren:

$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_content.php']['typoLink_PostProc'][] = 'Vendor\\Name\\Service\\TypoLinkProcessingService->postProcessTypoLink'; 

Dann in Ihrer TypoLinkProcessingService Klasse (mit Ihrem Namen der Wahl, natürlich), können Sie es in Ihrer eigenen behandeln würden Methode. Zur Veranschaulichung, in diesem Beispiel, ändere ich eine URL, wenn es sich um einen Link zu einem Youtube-Video handelt, um "verwandte Videos" am Ende zu deaktivieren und die Farbe der Steuerelemente im YouTube-Player zu ändern.

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
Eine weitere Option ist userFunc zu nutzen und Links anpassen.

Dazu konfigurieren Sie Ihre Linkhandler-Konfiguration (PageTS), um userFunc innerhalb typolink bereitzustellen. Fügen Sie TypoScript nach Bedarf hinzu, um die konfigurierten Daten später abzurufen.

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 
      } 
     } 
    } 
} 

In Ihrem parseLinkHandlerTypolink Methode können Sie Eigenschaften Zugriff konfiguriert und angepasst werden je nach Bedarf:

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 . '>'; 
    } 
} 

Alternativ kann dieser Haken, der in 8.6 können Sie auch eingeführt wurde, helfen: https://docs.typo3.org/typo3cms/extensions/core/Changelog/8.6/Feature-79121-ImplementHookInTypolinkForModificationOfPageParams.html