Mehrzeilige TMENU-Menüs in Typo3 (Zeilenumbrüche bei TMENU)

Problem: Man möchte ein TMENU mit mehrzeiligem Text in den Menüpunkten erzeugen. Dazu kann man eine Kombination aus einem COA und dem splitChar verwenden. Hier wird das Trennzeichen chr(13) verwendet.

Als TypoScript für den Menüaufbau verwendet man:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
1 = TMENU
1.wrap = |
1.expAll = 0
   
1.NO = 1
1.NO {
   wrapItemAndSub = <ul><li>|</li></ul>
   1 = COA
   1.10 = TEXT
   1.10 {
      field = nav_title // title
      listNum = 0
      listNum.splitChar = 13
   }
      
   1.20 < .1.10
   1.20.listNum = 1
   1.20.wrap = <br />|
   1.20.required = 1
      
   stdWrap.field >
   stdWrap.cObject = TEXT
   stdWrap.cObject < .1
 
}

Um die Felder „Navigations-Titel“ (nav_title) und „Seiten-Titel“ (title) im Backend mehrzeilig zu machen kann man die Datei extTables.php um folgende Zeilen ergänzen:

1
2
3
4
5
$TCA['pages']['columns']['title']['config']['type'] = 'text';
$TCA['pages']['columns']['title']['config']['rows'] = '2';
 
$TCA['pages']['columns']['nav_title']['config']['type'] = 'text';
$TCA['pages']['columns']['nav_title']['config']['rows'] = '2';

Update 2014:

Alternativ zum Beispiel oben funktioniert es auch so:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1 = TMENU
1.wrap = |
1.expAll = 0
   
1.NO = 1
1.NO {
   wrapItemAndSub = <ul><li>|</li></ul>
   stdWrap.cObject = COA
   stdWrap.cObject {
      10 = TEXT
      10 {
         field = nav_title // title
         listNum = 0
         listNum.splitChar = 13
      }
      20 < .10
      20 {
         listNum = 1
         wrap = <br />|
         trim = 1
      }
   }
}

7 thoughts to “Mehrzeilige TMENU-Menüs in Typo3 (Zeilenumbrüche bei TMENU)”

  1. Dankedankedankeschön!

    Nach vielen Versuchen mit ähnlichen Anleitungen (die für den content alle wunderbar funktioinieren, nicht aber für Menüs) hat mir dein wrap-Tipp endlich die Lösung gebracht.

    Großartig – schön, dass es solch tolle Inhalte und Inhalteschreiber im Netz gibt!

  2. Die Zeilen darüber ($TCA[‚pages‘][‚columns‘] ….) machen das Feld für den Navigations-Titel mehrzeilig. Das sieht man bei Klick auf ein Blatt-Icon im Seitenbaum und dann unter den Seiteneigenschaften.
    Hier kann der Umbruch eingegeben werden.

  3. …OK html. du willst mich testen… also was ich meinte ist, dass das <br/> immer als &lt;br/&gt; ausgegeben wird.

  4. Ahja. Habs gefunden.
    htmlSpecialChars = 1
    erzeugte den Fehler.

    Für Noobs wie mich noch zur Ergänzung:
    Das ganze muss auch noch in
    den jeweiligen Parameter „ACT“ rein:

    1.ACT = 1
    1.ACT {

    }

  5. Danke für den Code, klappt gut, jedoch habe ich noch folgendes ergänzt, damit HTML Entities auch escaped werden und damit nicht immer am Ende ein unerwünschtes BR erscheint. Außerdem habe ich den Code „ausgelagert“, so dass er leicht an mehreren Stellen (CUR, IFSUB, ACT, …) eingesetzt werden kann.

    [CODE]
    lib.lineBreakNav = COA
    lib.lineBreakNav {
    10 = TEXT
    10 {
    field = nav_title // title
    listNum = 0
    listNum.splitChar = 13
    stdWrap.htmlSpecialChars = 1
    }
    20 < .10
    20 {
    listNum = 1
    required = 1
    wrap = |
    trim = 1
    stdWrap.htmlSpecialChars = 1
    }
    }

    1.NO {
    wrapItemAndSub = |
    stdWrap.cObject < lib.lineBreakNav
    }
    1.ACT = 1
    1.ACT {
    wrapItemAndSub = |
    stdWrap.cObject < lib.lineBreakNav
    }
    [/CODE]

    Da ich nicht die TCA verändern wollte, verwende ich gerne eine doppelte Pipe (||) als Trennzeichen (was für den Redakteur natürlich nicht so intuitiv ist wie bei deinem Beispiel). Hierfür muss man den splitChar = 124 anstatt 13 verwenden und da es zwei Trennzeichen sind muss auch die 20.listNum = 2 gesetzt werden.

    Viele Grüße
    Christian

Schreibe einen Kommentar

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