Zum Inhalt springen

externe Links umleiten

Erstellt am 3. Dezember 2006 · 12 Antworten · letzte Antwort am 7. März 2007

Tags: Links, Frage

benep ·

Ich suche seit längerem verzweifelt und ohne Erfolg eine Möglichkeit um externe Links umzuleiten.

Dabei soll automatisch vor die im BE eingegebene externe URL im FE ein "extlink.php?url=" eingefügt werden. Um zB. über die php-Datei zu speichern wie oft welcher Link aufgerufen wurde.

Viele Dank schon im Voraus.

karlchen ·

wenn du eine solche PHP Datei schon hast, versuch doch hier mal ein bisschen mit rum
#39948

hier geht es um die Konfiguration des RTE

hiermit wird z.B. das Bild vor externen Links entfernt

# *** Entfernt das Bild vor den Links
RTE.classesAnchor {
        externalLink {
                class = external-link
                type = url
                image >
        }
        }

vielleicht kann man hier das ganze auch ein wenig so hinbiegen das halt deine erwähnte PHP datei davor geschrieben wird.

Ansonsten würde ich vielleicht mal nach Extensions googeln oder direkt unter typo3.org/extensions schauen ob es da nicht was gibt was deine Anforderungen erfüllt

EDIT:

habe ich gerade noch gefunden,

#Andere Formatierung für interne und externe Links

tt_content.text.20.parseFunc.tags.link >
tt_content.text.20.parseFunc.tags.link = COA
tt_content.text.20.parseFunc.tags.link {
  10 = TEXT
  10.value = [I]
  10.if {
    value = 0
    isGreaterThan.data = parameters:allParams
    isGreaterThan.intval = 1
  }
   
  20 = TEXT
  20.value = [E]
  20.if {
    value = 0
    isGreaterThan.data = parameters:allParams
    isGreaterThan.intval = 1
    negate = 1
  }
   
  30 = TEXT
  30.current = 1
  stdWrap.typolink.parameter.data = parameters : allParams
  stdWrap.typolink.extTarget = {$styles.content.links.extTarget}
  stdWrap.typolink.target = {$styles.content.links.target}
  stdWrap.typolink.wrap = {$styles.content.links.wrap}
  stdWrap.parseFunc.constants =1
}
benep ·

Ich bin deinen Ansätzen nachgegangen, aber leider bietet keiner der beiden Ansätze die Möglichkeit die url zu ändern (zumindest vor der url).

Hat noch jemand einen Ansatz oder eine Idee. Ich bin über jede noch so kleine Hilfe dankbar.

benep ·

Da ich immer noch keine Lösung mit TS finden konnte habe ich mich entschlossen es über eine userFunc und php zu realisieren.

Nur leider komme ich nicht drauf, wie ich Funktion aufrufen muss, damit alle externen Links im Content automatisch umschrieben werden.

Kann mir da jemand helfen?

lorrey ·

Genau das Problem hab ich auch gerade...

#58798

gibt es schon eine Lösung?

Das muss doch irgendwie auch mit TS gehen, oder?

just2b ·

schaut euch doch mal die dh_linklayout an. Da müsste man nur noch die userfunction etwas erweitern.

meine Motivation war leider noch zu gering so eine ext zu schreiben :/

georg

lorrey ·

... nun gut dann fang ich mal an - hier die Function:

    function addBeforeExtUrl($content,$conf)
    {
        global $TSFE;
        
        if ($content["TYPE"] == "url")
        {           
           $sData = $conf["BeforeUrl"];
        }
        
        return '<A HREF="'.trim($sData).$content["url"].'"'.$content["targetParams"].' '.$content["aTagParams"].'>';
    }

Sollte doch so "grob" stimmen, oder?

Wie integriere ich das jetzt per TS, damit er alle externen links automatisch umsetzt (auch bestehende!) ?!?

Hier mein Versuch:

tt_content.text.20.default.parseFunc {
  tags.link.typolink.userFunc = t3_userFunc->addBeforeExtUrl
BeforeUrl = test.php?
oder so?
  tags.link.typolink.userFunc.parameter.wrap = test.php?
}

Bitte um kurze Hilfe !

lorrey ·

... jo dann gehts - kommisch!

allerdings auch nur bei den t3 vorlagen - die eigenen tv vorlagen ersetz er nicht!

muss man sicher stats
tt_content.text.20
was anderes nehmen, oder woran könnte es liegen?

benep ·

Wie gesagt, ich habe das Problem über eine userfuction gelöst.

Die größte Schwierigkeit war es herauszufinden, dass die über userfunct aufgerufenen Funktionen mit user_ beginnen müssen. Das war wahrscheinlich auch dein Fehler!!

Es ist schon länger her, aber wenn ich mich recht erinnere funktioniert der Pointer ['aTagParams'] nicht! Darum hab ich den Workaround mit $myclass eingefügt. Aber einfach mal suchen ich hab das damals in einem eigenen Thread angesprochen.

folgende Zeile hab ich im Template im Setupbereich eingefügt.

includeLibs.myextlinks = fileadmin/funktionen/extlinks.php
tt_content.text.20.parseFunc.tags.link.typolink.userFunc =user_mylinks->main

die Datei extlink.php:

class user_mylinks {
var $cObj;// The backReference to the mother cObj object set at call time
/**
* Call it from a USER cObject with 'userFunc = user_randomImage->main_randomImage'
*/
  function main($finalTagParts)    {

#    $finalTagParts['TYPE']
#    $finalTagParts['TAG']
#    $finalTagParts['url']
#    $finalTagParts['targetParams']
#    $finalTagParts['aTagParams']

	if(eregi('class=',$finalTagParts['TAG'])){
	  $mytag = split("class=",$finalTagParts['TAG']);
	  $myclass = substr($mytag[1], 0, -1);
	}else $myclass = "\"\"";

    if ($finalTagParts['TYPE'] == "url"){
      $linktarget = "_blank";
	  $finalTagParts['url'] = eregi_replace('&','xxaxx',$finalTagParts['url']);
      $linkurl = "index.php?id=142&exturl=" . $finalTagParts['url'];
    }else {
      $linktarget="_self";
      $linkurl = $finalTagParts['url'];
    }

    return '<a href="'.$linkurl.'" target="'.$linktarget.'" class='. $myclass .'>';
  }
}
lorrey ·

Danke!

Das wars, wenn ich user_x nutze, dann geht ... mann mann mann #angry#

Naja, hab allerdings immer noch ein Problem mit TemplaVoila - in den FCE gehts leider noch nicht!

Was muss man da noch tun?

Für die News gehts mit
plugin.tt_news.general_stdWrap.parseFunc < tt_content.text.20.parseFunc

was muss man für TV eintragen?

lorrey ·

... ich finde es einfach nicht - habs u.a. schon mal mit

tt_content.templavoila_pi1.20.parseFunc.tags.link.typolink.userFunc =

aber leider tut sich nicht viel!

Hat jemand einen Tipp?

lorrey ·

Ich habs gelöst - ich war nur als an der falschen Stelle unterwegs #angry# #angry#

Wenn manns direkt ins DS schreibt gehts auch!!!

&lt;![CDATA[
	10 = TEXT
	10.current = 1
	10.parseFunc = &lt; lib.parseFunc_RTE
        10.parseFunc &lt; tt_content.text.20.parseFunc
]]&gt;