Eigene Linktypen mit Custom Tags definieren

In diesem Tutorial zeigen wir, wie man in TypoScript ganz einfach eigene Tags, so genannte custom tags (oder user defined tags) definieren kann, um besondere Verlinkungen zu ermöglichen.

Wir werden die folgenden Linktypen definieren:

"nofollow" Link, um die Weitergabe von PageRank zu verhindern

Wer sich mit dem Thema Suchmaschinenoptimierung - insbesondere mit der Suchmaschine Google - auseinandersetzt, kommt recht bald mit dem Begriff PageRank in Berührung. Das ist ein Wert im Bereich von 1 bis 10, den Google für jede einzelne Seite einer Website berechnet. Kurz gesagt, gibt dieser Wert Googles Einschätzung der Bedeutung einer Seite wider.

Jeder Link (intern oder extern), der von einer Seite zu einer anderen gesetzt wird, gibt einen winzigen Teil des PageRank der verlinkenden an die verlinkte Seite weiter. Dieser Prozess wird oft als Linkjuice (engl. "juice" bedeutet "Saft") bezeichnet, da durch den Link Wert von einer zur anderen Seite "fließt". Möchte man nun verhindern, dass die verlinkende Seite an Wert verliert, so kann man einem Link das nofollow-Attribut zuweisen.

Wir erweitern nun den TYPO3 Link Tag um das Attribut rel="nofollow" und nennen den neuen Tag "link_nf":

Link mit nofollow in TypoScript definieren

TypoScript SETUP
   1: tt_content.text.20.parseFunc.tags {
   2:   link_nf < lib.parseFunc.tags.link
   3:   link_nf.typolink.ATagParams = rel="nofollow"
   4: }
   5: lib.parseFunc.tags.link_nf < tt_content.text.20.parseFunc.tags.link_nf

Das Prinzip der custom tags ist immer das Selbe: Zuerst werden die Eigenschaften des "normalen" TYPO3-Links übernommen (Zeile 2). Danach folgt die eigentliche Definition des neuen Linktyps. Die letzte Zeile bewirkt, dass der neue Linktyp auch in Inhaltselementen wie z.B. Aufzählungslisten funktioniert.

Sobald Sie diesen Code in Ihr TypoScript-Template eingebaut haben, steht Ihnen in allen Inhaltselementen der neue Link in TYPO3 zur Verfügung. Die Syntax ist analog zum Standard-Link, nur eben mit dem Tag "<link_nf>...</link_nf>" statt "<link>...</link>".

Link auf eine Seite in anderer Sprache

Dieser spezielle Link löst bei einer mehrsprachigen Website, die mit einem einzigen Seitenbaum erstellt wurde ("One-tree-Konzept"), das Problem, dass Links zwischen den verschiedenen Sprachen nicht richtig aufgelöst werden.

Angenommen, eine Website hat die zwei Sprachversionen Deutsch (sys_language_uid 0) und Englisch (sys_language_uid 1). Setzt man nun in einem Inhaltselement der deutschen Website einen Link mit dem TYPO3 Link-Tag, so verweist dieser immer auf die deutsche Version der velinkten Seite. Der zur Identifizierung der Sprache notwendige GET-Parameter "L" (Abkürzung für das englische "language", Sprache) wird nicht übergeben.

Mit einem Custom Tag für jede Sprache können wir eine Verlinkung der unterschiedlichen Sprachen erreichen. Die beiden Tags, die wir definieren, heissen "link_de" (für Links auf die deutsche Sprachversion) und "link_en" (für Links auf die englische Sprachversion).

Link mit "L"-Parameter für andere Sprachversion

TypoScript SETUP
   1: tt_content.text.20.parseFunc.tags {
   2: # Sprach-UID 0 = deutsch
   3:   link_de < lib.parseFunc.tags.link
   4:   link_de.typolink.additionalParams = &L=0
   5: # Sprach-UID 1 = englisch
   6:   link_en < lib.parseFunc.tags.link
   7:   link_en.typolink.additionalParams = &L=1
   8: }
   9: lib.parseFunc.tags.link_de < tt_content.text.20.parseFunc.tags.link_de
  10: lib.parseFunc.tags.link_en < tt_content.text.20.parseFunc.tags.link_en

Link auf einen tt_news-Datensatz

Der nächste Linktyp, den wir definieren wollen, ist etwas komplexer: Er bietet die Möglichkeit, aus einem Inhaltselement in TYPO3 direkt einen Datensatz aus der Extension tt_news zu verlinken. Als Linkparameter wird dabei die eindeutige ID (uid) des tt_news-Datensatzes verwendet. Dieser Tag lässt sich nicht allein mit TypoScript definieren, sondern benötigt ein externes PHP-Skript, das im TypoScript-Template aufgerufen wird.

Unser Tag nennt sich "link_ttnews" und akzeptiert im Gegensatz zum standardmäßigen TYPO3-Linktag den ersten übergebenen Parameter als UID des Ziels und alle weiteren Angaben als 'title'-Attribut. Der Link wird folgendermaßen definiert:

Link auf Datensatz von tt_news definieren

TypoScript SETUP
   1: tt_content.text.20.parseFunc.tags {
   2:   link_ttnews < lib.parseFunc.tags.link
   3:   link_ttnews = PHP_SCRIPT 
   4:   link_ttnews {
   5:     stripNL = 0
   6: # Parameter von Typoscript an PHP-Skript übergeben: UID der Seite mit SINGLE-View von tt_news
   7:     id_singleView = 18
   8: # PHP-Skript aufrufen
   9:     file = fileadmin/scripts/link_ttnews_parser.php
  10:   }
  11: }
  12: lib.parseFunc.tags.link_ttnews < tt_content.text.20.parseFunc.tags.link_ttnews

Im TypoScript wird das PHP-Skript "link_ttnews_parser.php" im Verzeichnis "fileadmin/scripts/" aufgerufen. Diesem wird im Parameter "id_singleView" die UID (hier: 18) der Seite übergeben, die das tt_news-Plugin mit der Einzelansicht (SINGLE) enthält.

Der zweite Teil unserer Linkdefinition findet sich im PHP-Skript:

PHP-Skript zum Parsen von Links auf tt_news Records

/fileadmin/scripts/link_ttnews_parser.php
  1. <?php
  2. /**
  3.  * Parser für 'link_ttnews' tag
  4.  */
  5. $parameters = explode(' ', $this->parameters['allParams']); 
  6. $num_params = count($parameters);
  7.  
  8. if ($num_params > 0 && !empty($parameters[0])) {
  9. 	// tt_news Datensatz mit übergebener UID suchen
  10. 	$records = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows(
  11. 		'*', 'tt_news',
  12. 		'uid = ' . $parameters[0]
  13. 		. ' AND hidden=0 AND deleted=0'
  14. 		. $GLOBALS['TSFE']->sys_page->enableFields('tt_news'),
  15. 		'', '', 1
  16. 	);
  17.  
  18. 	// wenn Datensatz in tt_news gefunden, Link-Parameter setzen
  19. 	if (count($records) > 0) {
  20. 		require_once(PATH_tslib.'class.tslib_content.php');
  21. 		$this->cObj = t3lib_div::makeInstance('tslib_cObj');
  22. 		
  23. 		// Link erzeugen
  24. 		$link['parameter'] =  $this->cObj->getTypoLink_URL(
  25. 			$conf['id_singleView'],
  26. 			array('tx_ttnews[tt_news]' => urlencode($parameters[0]))
  27. 		);
  28.  
  29. 		// Wenn weitere Parameter übergeben wurden,
  30. 		// dann diese als 'title'-Attribut verwenden
  31. 		if ($num_params > 1) {
  32. 			// Ersten Parameter (UID) entfernen
  33. 			array_shift($parameters);
  34. 			// title-Attribut setzen
  35. 			$link['ATagParams'] = 'title="' . implode(' ', $parameters) . '"';
  36. 		}
  37. 		
  38. 		// Fertigen Link zurückliefern		 
  39. 		$content .= $this->typolink($this->getCurrentVal(), $link);
  40. 	} else {
  41. 		// wenn kein Datensatz gefunden => Linktext zurückgeben
  42. 		$content .= $this->getCurrentVal();
  43. 	}
  44. } else {
  45. 	// wenn kein Parameter übergeben => Linktext zurückgeben
  46. 	$content .= $this->getCurrentVal();
  47. }
  48. ?> 

Wird in der tt_news-Tabelle ein gültiger Datensatz mit der übergebenen UID (erster Parameter des link_ttnews-Tags) gefunden, so wird ein 'a href' Tag erzeugt und mit einem 'title'-Attribut versehen (sofern weitere Parameter übergeben wurden). Wird kein valider tt_news-Datensatz gefunden, so wird der Linktext (Text zwischen <link_ttnews> und </link_ttnews>) unverändert zurück gegeben.

Das waren einige Beispiele für die Erzeugung eigener Custom Tags in TYPO3. Auf diese Art und Weise lassen sich Links für die verschiedensten Anforderungen definieren. Durch die Verwendung von TypoScript in Verbindung mit PHP sind einem bei der Erzeugung von Links so gut wie keine Grenzen gesetzt.

Kommentare zu Eigene Linktypen mit Custom Tags definieren

Gib jetzt den ersten Kommentar zu diesem Artikel ab!


Kommentar abgeben


(wird nicht veröffentlicht, Gravatar ist eingeschaltet)



* Diese Felder sind für das Kommentieren notwendig

Besucher fanden diese Seite unter folgenden Suchbegriffen:

typo3 link rel · typo3 custom tags · typo3 rel attribut · custom tag auf deutsch · typo3 php extension define parsefunc.tags.link.typolink.additionalparams