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
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
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
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
<?php/*** Parser für 'link_ttnews' tag*/$parameters = explode(' ', $this->parameters['allParams']);
$num_params = count($parameters);
if ($num_params > 0 && !empty($parameters[0])) {
// tt_news Datensatz mit übergebener UID suchen$records = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows(
'*', 'tt_news',
'uid = ' . $parameters[0]
. ' AND hidden=0 AND deleted=0'. $GLOBALS['TSFE']->sys_page->enableFields('tt_news'),
'', '', 1
);// wenn Datensatz in tt_news gefunden, Link-Parameter setzenif (count($records) > 0) {
require_once(PATH_tslib.'class.tslib_content.php');
$this->cObj = t3lib_div::makeInstance('tslib_cObj');
// Link erzeugen$link['parameter'] = $this->cObj->getTypoLink_URL(
$conf['id_singleView'],
array('tx_ttnews[tt_news]' => urlencode($parameters[0]))
);// Wenn weitere Parameter übergeben wurden,// dann diese als 'title'-Attribut verwendenif ($num_params > 1) {
// Ersten Parameter (UID) entfernenarray_shift($parameters);
// title-Attribut setzen$link['ATagParams'] = 'title="' . implode(' ', $parameters) . '"';
}// Fertigen Link zurückliefern$content .= $this->typolink($this->getCurrentVal(), $link);
} else {
// wenn kein Datensatz gefunden => Linktext zurückgeben$content .= $this->getCurrentVal();
}} else {
// wenn kein Parameter übergeben => Linktext zurückgeben$content .= $this->getCurrentVal();
}?>
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.
Weiterlesen
Gib jetzt den ersten Kommentar zu diesem Artikel ab!
Besucher fanden diese Seite unter folgenden Suchbegriffen: