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&param1=1&param2=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 = &amp;
              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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Highlighting von Codes ist mit den Tags  [ts], [php], [html], [javascript], [xml] oder [code] möglich.