parsefunc: Links in Typolinks umwandeln
Wenn eure Redakteure hunderte Links hard-coded in HTML-Inhaltselementen eingetragen haben und dies erst kurz vor der Veröffentlichung bei der Aktivierung von RealURL auffällt, so dass keine Zeit mehr bleibt alle Links per Hand umzuschreiben, dann rettet dieses kleine Snippet vielleicht euren Allerwertesten.
Schön anzusehen ist der Doppelsplit (Split im Split) – es war mein erstes Mal. 😉
Die Links sollten die folgende Form haben:
<a href="index.php?id=xx¶m1=1¶m2=2" target="_blank" class="class1 class2" title="dies ist der Linktitel" style="color:#F00;">Link</a>
Das Typoscript-Snippet, dass die Links mittels parsfunc in Typolinks umwandelt:
tt_content.html.parseFunc.tags.a = CASE tt_content.html.parseFunc.tags.a { # checks if it is an external or an internal link # had no better idea yet than split on :// key.data = parameters:href key.split { token = : returnKey = 0 } default = TEXT default { current = 1 typolink { parameter.cObject = COA parameter.cObject { 10 = TEXT 10.data = parameters:href 10.split{ token = id= cObjNum = 1||2 1 > 2 { current = 1 # cut of the following params split { token = & cObjNum = 1||2|*|3 # id-wrap (typeNum = 0 ... to be changed someday) 1.current = 1 2.current = 1 2.wrap = ,0,&| 3.current = 1 3.wrap = &| } } } 20 = TEXT 20.data = parameters:target 20.noTrimWrap = | || 20.ifEmpty = - 30 = TEXT 30.data = parameters:class 30.noTrimWrap = | "|"| 40 = TEXT 40.data = parameters:title 40.noTrimWrap = | "|"| } ATagParams.cObject = COA ATagParams.cObject { 5 = TEXT 5.data = parameters:style 5.wrap = style="|" } } } http < .default http.typolink.parameter.cObject { 10 > 10 = TEXT 10.data = parameters:href } https < .http mailto < .http parseFunc.constants = 1 }
Das ganze ist noch nicht perfekt, aber für meine Zwecke war es ausreichend.
Schwächen:
- unsichere/unvollständige Unterscheidung von internen und externen Links
- die typeNum wird nicht ausgelesen und fest auf 0 gesetzt
- der erste GET-Parameter muss id sein – eine andere Reihenfolge ist derzeit nicht möglich
Über Verbesserungsvorschläge in den Kommentaren würde ich mich freuen.
Vielen Dank! Hat sehr geholfen