TYPO3 Quickies und Snippets

TYPO3 Quicktipps und Snippets
Eine Sammlung sehr spezieller Tipps und Tricks für TYPO3.
1. Einem Redakteur nicht erlauben alle Überschriften zu verwenden
Man kann in der PAGE TSConfig angeben, dass Elemente aus der Auswahlbox des RTE entfernt werden sollen, also beispielsweise
RTE.default.buttons.formatblock.removeItems = h1 #(h1 wird aus der Select-Box entfernt).
Um PAGE TSConfig für User zu benutzen trägt man es im USER TSConfig ein und setzt einfach ein "page." davor, also
page.RTE.default.buttons.formatblock.removeItems = h1
2. Typoscript CONDITION - Admin oder Redakteur?
Manchmal möchte man bestimmte Setups (PAGE-TS oder USER-TS) davon abhängig machen, ob der aktuelle User ein Admin ist oder nicht. Dazu gibt es eine einfache TS-Condition
[adminUser = 0] TCEFORM.tt_content.header_layout.removeItems = 0,1,2,3,4,5,6 [global]
Diese wird nur ausgeführt, wenn der User kein Admin ist. Für Admins aus der 0 eine 1 machen (das Beispiel entfernt aus der Auswahlbox "Header / Type" alle Einträge)
3. Das Pipe-Zeichen | im Typoscript verwenden
Das Pipe-Zeichen (senkrechter Strich |) wird gerne als Trenner - zum Beispiel in einem Seitentitel verwendet. Das Zeichen hat aber in Typoscript eine besondere Bedeutung. Daher muss das Zeichen ASCII-codiert werden wenn man es verwenden möchte. Beispiel:
headerData.10.wrap = <title>Mein Seitentitel | ; | Mein-Domain-Titel.de</title>
Wichtig: Das Leerzeichen vor dem ";" muss entfernt werden und dient nur der korrekten Ausgabe hier im Beispiel.
4. Tags innerhalb des A-Tags bei einem TMENU
Bei modernen Layouts (vor allem Bootstrap) kommen häufig Tags (meist SPANS) innerhalb des A-Tag vor. Um dies im Typoscript zu ermöglichen geht man so vor:
NO.wrapItemAndSub = <li>|</li> NO.linkWrap = <span class="meine-klasse">|</span> NO.ATagBeforeWrap = 1
Durch den letzten Eintrag wird bewirkt, dass Wrap in den A-Tag geht und nicht umgekehrt.
5. Links im RTE mit Klasse versehen
Manchmal möchte man Links die man im RTE setzt speziell formatieren. Eine einfache Möglichkeit ist es, ihn bei Bedarf mit einer Klasse zu versehen.
RTE.default.classesAnchor := addToList(mein-speziallink) RTE.default.proc.allowedClasses := addToList(mein-speziallink) RTE.default.classesAnchor.mein-speziallink { class = mein-speziallink type = page titleText = LLL:fileadmin/labels/rte.xml:error }
Diesen Code trägt man ins TS-Setup der root-Seite ein. Erzeugt man jetzt im RTE einen Link, dann hat man in der Auswahlliste des Link-Typs einen neuen Eintrag (hier: mein-speziallink). Dieser wird dann mit der entsprechenden Klasse versehen und kann per CSS formatiert werden.
6. Strong und em statt b und i im RTE
Die Zeiten ändern sich - und ebenso sollte man sich endlich mal abgewöhnen die HTML Tags B und I zu verwenden. Modern ausgedrückt heissen die einfach STRONG und EM. Das blöde daran: TYPO3 will nicht standardmäßig modern. Wir müssen also in den Seiteneigenschaften der root-Seite ins TS-Setup einen kleinen Eintrag machen, damit es auch funktioniert.
RTE.default.proc { exitHTMLparser_db = 1 exitHTMLparser_db { tags.b.remap = strong tags.i.remap = em } }
7. Typolink im Content-Element HTML verwenden
Manchmal muss es schnell gehen. Das Content-Element HTML ist dann fast immer passend, weil man die Formatierung ja direkt im HTML-Code angeben kann. Problem: Das Element versteht bloß hardcodierte Links. Typolinks in der Form <LINK 12>Test</LINK> gibt es einfach direkt aus ohne den Link zu formatieren.
Der nachfolgende Eintrag ins TS-Setup parst unseren LINK-Eintrag wie jeden anderen Link - funktioniert also auch mit RealURL.
tt_content.html.parseFunc.tags.link < lib.parseFunc.tags.link
7. Den Default-wrap aus CSS-STYLED-CONTENT um HTML Elemente entfernen
Die Standarderweiterung CSS STYLED CONTENT spart einem viel Arbeit - nervt aber auch an manchen Stellen. Zum Beispiel ist der DIV-wrap um Contentelemente des Typs HTML meist sinnlos und stört, wenn man etwa selbst neue DIVs aufmachen und schließen möchte. Folgender Typoscript macht damit Schluss.
# Default wrap um HTML-Elemente entfernen tt_content.stdWrap.innerWrap.if { value = html isInList.field = CType negate = 1 }