Photo of Torben Hansen

A TechBlog by Torben Hansen


Freelance Full Stack Web Developer located in Germany.
I create web applications mainly using TYPO3, PHP, Python and JavaScript.
Home Archive Tags

TYPO3 - Conditionally add an additional wrap to RTE links using Typoscript

In a project I needed to enable the editor to create links in RTE, that automatically should get a wrap based on the class the link has.

Assume the editor creates a link in RTE and selects the link class "myClass". The resulting HTML output is:

<a href="target-page-id" class="myClass" title="sometitle">My Link</a>

My CSS styling now required, that the a-tag must be surrounded with a div-tag that has a special class. My final output should look like this:

<div class="anotherClass">
  <a href="target-page-id" class="myClass" title="sometitle">My Link</a>
</div>

As I did'nt want to bother the editor with special frames and layouts for the RTE text, the additional class should be added automatically as soon as the link has the special class name.

Well, what sounds simple, can be hard to process...

I asked on stackoverflow but did'nt get an answer. After some research, I found this article on TYPO3 wiki, which pointed me to the right direction. I did some hours of Typoscript debugging and finally managed to get a working solution.

lib.parseFunc.tags.link {
typolink.parameter.append = LOAD_REGISTER
typolink.parameter.append {
linkClass {
cObject = TEXT
cObject {
stdWrap.data = parameters:allParams
}
# Split link params by space-char. 3rd value is the link class name
split {
token.char = 32
# Option for TYPO3 7.6+ below
cObjNum = 1||2||3||*
# Option for TYPO3 6.2 LTS
#cObjNum = 1||2||3
3 = TEXT
3.current = 1
}
}
}
newWrap.cObject = CASE
newWrap.cObject {
key.data = register:linkClass
# Set outer wrap for links depending on class name
default = TEXT
default.value = |
myClass = TEXT
myClass.value = <div class="anotherClass">|</div>
internal-link = TEXT
internal-link.value = <div class="anotherClassForInternalLink">|</div>
}
}

lib.parseFunc_RTE.tags.link {
typolink.parameter.append < lib.parseFunc.tags.link.typolink.parameter.append
wrap < lib.parseFunc.tags.link.newWrap
}

TYPO3 is just so powerfull and extendable that you never finish learning.