---
title: "2 spaltiges Fluid-Template"
url: "https://www.typo3.net/d/116989-2-spaltiges-fluid-template"
source: "typo3.net"
tags: ["Allgemein","Fluid","Frage","TYPO3 4.x","ViewHelper"]
created: "2013-12-31"
last_reply: "2014-01-05"
replies: 24
solved: false
page: 1
pages: 1
lang: "de"
---

# 2 spaltiges Fluid-Template

Allgemein · 24 Antworten · gestartet 2013-12-31

## Eröffnungsbeitrag

**WimDim** · 2013-12-31 · [Beitrag #1](https://www.typo3.net/d/116989-2-spaltiges-fluid-template/1)

Hallo Zusammen,

ich habe ein 2 spaltiges Layout und hätte gerne eine Darstellung von links nach rechts.
Also:  1 Eintrag Links -> 1 Eintrag Rechts
       2 Eintrag Links -> 2 Eintrag Rechts
       usw.

Mein Typoscript sieht wie folgt aus:

```typoscript
page.10 = FLUIDTEMPLATE
page.10 {
  partialRootPath = fileadmin/templates/partials/
  layoutRootPath = fileadmin/templates/layouts/

  variables {
    headertext < styles.content.get
    headertext.select.where = colPos = 0
    
    content_left < styles.content.get
    content_left.select.where = colPos = 1
    content_left.renderObj.stdWrap.wrap = <div class="left"> | </div>

    content_right < styles.content.get
    content_right.select.where = colPos = 2
    content_right.renderObj.stdWrap.wrap =  <div class="right"> | </div>
  }
}
```

Nur gibt das allerdings folgende Ausgabe:

<div class="left"></div>
<div class="left"></div>
<div class="left"></div>
<div class="right"></div>
<div class="right"></div>
<div class="right"></div>

Ich hätte aber gerne:
<div class="left"></div>
<div class="right"></div>
<div class="left"></div>
<div class="right"></div>
<div class="left"></div>
<div class="right"></div>

Kann mir hier jemand weiterhelfen?

Vielen Dank schon mal.

## Antworten

### [#2](https://www.typo3.net/d/116989-2-spaltiges-fluid-template/2) · Schweriner · 2014-01-02

In deinem Fall würde ich wohl in Fluid nur ein Typoscript Objekt einbinden. Im Typoscript würde ich dann ein CONTENT Objekt erstellen um die Datensätze zu holen und diese dann mit dem Fluid Viewhelper "cycle" abwechselnd links und rechts ausgeben.

Wenn es wirklich abwechselnd sein soll, dann frage ich mich, warum Du die colPos noch in deine Abfrage mit einbeziehst. Du könntest Alternativ auch mit einem optionSplit jeweils abwechselnde wraps vergeben.

### [#3](https://www.typo3.net/d/116989-2-spaltiges-fluid-template/3) · WimDim · 2014-01-02

Hallo Schweriner,
vielen Dank für die Antwort.
Die Variante mit dem CONTENT Objekt hört sich gut an, leider weiss ich nicht genau, wie ich das einsetzen kann, bzw. mit Fluid verbinden kann. Kannst du mir vielleicht einen Tipp geben?

Vielen Dank.

### [#4](https://www.typo3.net/d/116989-2-spaltiges-fluid-template/4) · Schweriner · 2014-01-02

Im Fluid Template etwa so:
<f:cObject typoscriptObjectPath="lib.someLibObject" />

Und im Typoscript etwas ála

lib.someLibObject = CONTENT
lib.someLibObject {
 table = tt_content
 select {
   pidInList = this
   orderBy = sorting
 }
}

Vielleicht musst Du das Select noch anpassen.

### [#5](https://www.typo3.net/d/116989-2-spaltiges-fluid-template/5) · WimDim · 2014-01-02

Super, danke.
Ich habe das jetzt so umgesetzt wie Du gesagt hast, und die Inhalte werden mir auch angezeigt. Nun müsste ich allerdings jeweils um die Inhalte immer abwechselnd <div class="left"></div> UND
<div class="right"></div> wrappen. Wie kann ich denn nun die einzelnen Inhalte mit einem wrap versehen?

### [#6](https://www.typo3.net/d/116989-2-spaltiges-fluid-template/6) · Schweriner · 2014-01-02

Irgendwie so könnte es funktionieren.

```html
<f:for each="{f:cObject(typoscriptObjectPath: 'lib.someLibObject')}" as="foo" iteration="iter">
<f:if condition="iter.isOdd">
<f:then>
  Links Ausgabe
  {foo}
</f:then>
<f:else>
  Rechte Ausgabe
  {foo}
</f:else>
</f:for>
```

### [#7](https://www.typo3.net/d/116989-2-spaltiges-fluid-template/7) · WimDim · 2014-01-02

Hallo,
nun erhalte ich folgende Fehlermeldung:
#1237900529: The argument "each" was registered with type "array", but is of type "string" in view helper "Tx_Fluid_ViewHelpers_ForViewHelper"

Das fehlende </f:if> am Ende habe ich schon ergänzt. Woran kann das liegen?

### [#8](https://www.typo3.net/d/116989-2-spaltiges-fluid-template/8) · Schweriner · 2014-01-02

Tjoa dann liefert das Typoscript wohl fast wie ich es befürchtet habe einen String anstelle eines Arrays zurück. Irgendwie brauchst Du für den For Viewhelper aber ein Array :-x

### [#9](https://www.typo3.net/d/116989-2-spaltiges-fluid-template/9) · WimDim · 2014-01-02

Das hört sich ja nicht gut an :-).
Gibt es nicht eine andere Möglichkeit, das von mir gewünschte Ergebnis mittels Content Object zu erreichen?

### [#10](https://www.typo3.net/d/116989-2-spaltiges-fluid-template/10) · Schweriner · 2014-01-02

renderObj.stdWrap.wrap = <div class="right">|</div>|*|<div class="left">|</div>

Vielleicht :P

### [#11](https://www.typo3.net/d/116989-2-spaltiges-fluid-template/11) · WimDim · 2014-01-02

Guter Ansatz, Danke.
Nur zeigt er mir nun nur "right" an, "left" kommt gar nicht.  :-)

### [#12](https://www.typo3.net/d/116989-2-spaltiges-fluid-template/12) · Schweriner · 2014-01-02

Und bei renderObj.stdWrap.wrap = <div class="right">|</div>||<div class="left">|</div> ?

### [#13](https://www.typo3.net/d/116989-2-spaltiges-fluid-template/13) · WimDim · 2014-01-02

Nein, leider auch nicht. Das bleibt bei "right".
Gibt es keine Möglichkeit, hier:

```typoscript
page.10 = FLUIDTEMPLATE
page.10 {
  partialRootPath = fileadmin/templates/partials/
  layoutRootPath = fileadmin/templates/layouts/

  variables {
    headertext < styles.content.get
    headertext.select.where = colPos = 0

    content_left < styles.content.get
    content_left.select.where = colPos = 1
    content_left.renderObj.stdWrap.wrap = <div class="left"> | </div>

    content_right < styles.content.get
    content_right.select.where = colPos = 2
    content_right.renderObj.stdWrap.wrap =  <div class="right"> | </div>
  }

}
```

eine Codezeile einzubauen, die alle Einträge immer Zeilenweise ausgibt? (Ich weiss, ist der "alte" Aufbau!)

Prinzipiell möchte ich lediglich ein 2-Spaltiges Layout, bei dem sich die rechte Spalte der linken Spalte in der Höhe automatisch anpasst. Wenn es dafür eine Lösung gibt, wäre mir sehr geholfen.

### [#14](https://www.typo3.net/d/116989-2-spaltiges-fluid-template/14) · jenses · 2014-01-03

Warum machst du das nicht per CSS und Javascript?

### [#15](https://www.typo3.net/d/116989-2-spaltiges-fluid-template/15) · WimDim · 2014-01-03

Hallo Jenses,
über CSS wird das ja schon gesteuert, aber dafür muss ich die Reihenfolge halt immer abwechselnd haben. Ich würde das schon gerne über Typoscript und Templates machen, da nicht jeder (wenn auch nur wenige Leute) Javascript aktiviert hat. Gibt es denn da nicht eine Art "Split" oder so?

### [#16](https://www.typo3.net/d/116989-2-spaltiges-fluid-template/16) · etux · 2014-01-03

> **WimDim schrieb:**
>
> ... Gibt es denn da nicht eine Art "Split" oder so?

Beispielsweise:
<http://wiki.typo3.org/De:TSref/split>
Siehe „Split und Datenbank“ (weiter unten auf der Seite).

P.S.: Elementen auch ohne extra Klassen in zwei Spalten positionieren:
<http://tests.emil-webdesign.net/Inhaltselementen-in-zwei-Spalten/>
Letzte zwei Beispiele können mit ein wenig extra Aufwand auch für die alten Browser angepasst werden.

### [#17](https://www.typo3.net/d/116989-2-spaltiges-fluid-template/17) · typix · 2014-01-03

Hallo zusammen,

ja, der Sprung von TYPO3 4.5 auf TYPO3 6.x ist offenbar selbst für die "alten Hasen" doch nicht ganz so einfach.

Das ist (fast) perfekt:

```typoscript
    page.10 = FLUIDTEMPLATE
    page.10 {
[Es fehlt]
    templateRootPath = fileadmin/templates/template/irgendwas.html
[/]
    partialRootPath = fileadmin/templates/partials/
    layoutRootPath = fileadmin/templates/layouts/
     
    variables {
    content_left < styles.content.get
    content_left.select.where = colPos = 1
     
    content_right < styles.content.get
    content_right.select.where = colPos = 2
    }
    }
```

Das ist Murks:

```typoscript
    headertext < styles.content.get
    headertext.select.where = colPos = 0

    content_left.renderObj.stdWrap.wrap = <div class="left"> | </div>
     
    content_right.renderObj.stdWrap.wrap = <div class="right"> | </div>
    }
    }
```

Warum? Ganz einfach. Wie ist der Standardaufbau einer Seite in HTML?

```html
html
header
/header
body
Dein Code
/body
Footer
/Footer
/html
```

Oder so. Ich schreibe das jetzt nur aus dem Gedächtnis. Also bitte keine Meckerei über Details:)

In anderen Worten: Hier will jemand Inhalte, die idR über das TS mit page.10.headerdata dem Header einer Seite zugewiesen werden, über die Ausgabe von headertext.select.where = colPos = 0 rendern lassen. Sorry, aber colPos = 0 ist die Spalte "Normal" im Body der Seite. Wie bitte soll TYPO3 Inhalte des Body in den Header schreiben????

2. Fehler:
Im TS bzw. im Setup der Page definiert man idR nur die Subparts, die dann von den Fluid-Templates gerendert werden. Die Idee mit:

```typoscript
 content_left.renderObj.stdWrap.wrap = <div class="left"> | </div>
```

kann nicht funzen.

CSS-Container werden mit Fluid bitte schön SO in den Templates zugewiesen:

```typoscript
<f:layout name="Default" />

<div class="left">
        <f:format.html parseFuncTSPath="">{content_left}</f:format.html>
</div>
```

Ob man diese Zuweisung nun im Haupttemplate, im Layout oder den Partials macht, bleibt jedem selbst überlassen.

Viele Grüsse

### [#18](https://www.typo3.net/d/116989-2-spaltiges-fluid-template/18) · etux · 2014-01-04

Hallo typix,
Es ist keineswegs alles falsch, was Du sagst. :)
Eher hast Du was missverstanden, bzw. verwechselst Du paar Dinger. ;)
Ins Detail gehen, kann ich leider gerade nicht. Außerdem würde eine daraus entstehende Diskussion  dem Thread hier nicht unbedingt dienlich. Da gebe ich Dir völlig Recht. ;)

### [#19](https://www.typo3.net/d/116989-2-spaltiges-fluid-template/19) · WimDim · 2014-01-04

Hallo Zusammen und vielen Dank für die Informationen.
Ich kriege es leider beim besten Willen nicht hin, dass die Inhalte immer abwechselnd gezeigt werden. Ich möchte links einen kurzen Text und rechts dann eine lange Beschreibung. Beim nächsten Eintrag, soll der 2te kurze Text links erst unterhalb der Höhe des ersten Beschreibungstextes auf der rechten Seite erscheinen.

Also in etwa so:

```typoscript
1. Lorem Ipsum      Lorem ipsum dolor sit amet, consetetur sadipscing elitr, 
                    sed diam nonumy eirmod tempor invidunt ut labore et dolore 
                    magna aliquyam erat, sed diam voluptua. At vero eos et accusam 
                    et justo duo dolores et ea rebum. Stet clita kasd gubergren, 
                    no sea takimata sanctus est Lorem ipsum dolor sit amet.

2. Lorem Ipsum      Lorem ipsum dolor sit amet, consetetur sadipscing elitr, 
                    sed diam nonumy eirmod tempor invidunt ut labore et dolore 
                    magna aliquyam erat, sed diam voluptua. At vero eos et accusam 
                    et justo duo dolores et ea rebum. Stet clita kasd gubergren, 

usw. ...
```

Anbei mal der Code, den ich bisher habe.

```typoscript
page.10 = FLUIDTEMPLATE
page.10 {
  partialRootPath = fileadmin/templates/partials/
  layoutRootPath = fileadmin/templates/layouts/

  variables {
    headertext < styles.content.get
    headertext.select.where = colPos = 1

    content_left < styles.content.get
    content_left.select.where = colPos = 2

    content_right < styles.content.get
    content_right.select.where = colPos = 3
  }

}

page.10.file.stdWrap.cObject = CASE
page.10.file.stdWrap.cObject {
  default = TEXT
  default.value = fileadmin/templates/twoColumn.html

  2 = TEXT
  2.value = fileadmin/templates/twoColumn.html
}

page.includeCSS {
  file1 = fileadmin/templates/css/style.css
}
```

und das Template:

```typoscript
<f:layout name="main" />
<f:section name="content">
  <div id="headertext"><f:format.html parseFuncTSPath="lib.parseFunc">{headertext}</f:format.html></div>
  <div id="left">
     <f:format.html parseFuncTSPath="lib.parseFunc">{content_left}</f:format.html>
  </div>
  <div id="right">
    <f:format.html parseFuncTSPath="lib.parseFunc">{content_right}</f:format.html>
  </div>
</f:section>
```

Vielen Dank für eure Mühe :-)

##########################################     NACHTRAG     ##########################################

Nach langem Ausprobieren, habe ich nun einen Aufbau über MARKER erstellt und auch hier erhalte ich wieder zuerst alle linken Elemente, dann alle rechten Elemente ist hier eine splittung der Content-Elemente vielleicht einfacher?

Anbei mal mein Typoscript:

```typoscript
page.stylesheet = fileadmin/templates/css/style.css

page.typeNum = 0
 
page.10 = TEMPLATE

page.10.template = FILE

page.10.template.file = fileadmin/templates/template.html

page.10.workOnSubpart = DOCUMENT_BODY

page.10.subparts {
     
HEADER = CONTENT
HEADER {
table = tt_content
select.orderBy = sorting
select.languageField = sys_language_uid
select.where = colPos = 1
renderObj < tt_content
}
 
LEFTCONTENT = CONTENT
LEFTCONTENT {
table = tt_content
slide = -1
select.orderBy = sorting
select.languageField = sys_language_uid
select.where = colPos = 2
renderObj < tt_content
renderObj.stdWrap.wrap = <div class="content_left"> | </div>
}
  
RIGHTCONTENT= CONTENT
RIGHTCONTENT {
table = tt_content
slide = -1
select.orderBy = sorting
select.languageField = sys_language_uid
select.where = colPos = 3
renderObj < tt_content
renderObj.stdWrap.wrap = <div class="content_right"> | </div>
}
    MENU = HMENU

    MENU.1 = TMENU
    MENU.1 {
        NO = 1
      wrap = <ul class="mainNav">|</ul>
      expAll = 1
      NO.wrapItemAndSub = <li class="first">|</li>|*|<li>|</li>|*|<li class="last">|</li>
              
      ACT < .NO
      ACT = 1
      ACT.wrapItemAndSub = <li class="active">|</li>
    }
     
    MENU.2 = TMENU
    MENU.2 {
        NO = 1
      wrap = <ul class="submenu">|</ul>
      NO.allWrap = <li class="subfirst">|</li>|*|<li>|</li>|*|<li class="sublast">|</li>
    }
}
```

Vielen Dank.

[Bild: \[upl-image-preview uuid=14feb681-6925-5744-9dc1-0d2b216f8c46 url=https://www.typo3.net/assets/files/typo3net/1361-show.jpg alt=show.jpg thumbnail_url=https://www.typo3.net/assets/files/typo3net/1361-show.jpg\]](https://www.typo3.net/assets/files/typo3net/1361-show.jpg)

### [#20](https://www.typo3.net/d/116989-2-spaltiges-fluid-template/20) · etux · 2014-01-05

So lange Du die Backend-Spalten einzeln im Template einbindest, wird das schwierig zu realisieren.
Theoretisch ginge es, die Inhaltselementen aus den zwei Backend-Spalten über TypoScript (oder im Fluid-Template) paarweise zu sortieren und an einer Stelle im Template einzubinden.
Noch einfache wäre es, wenn Du auch im Backend mit nur eine Spalte arbeitest.
Wobei Du dann nicht unbedingt Klassen bräuchtest – wie es auch ohne extra Klassen gehen könnte, siehst Du ja in meinem Beispiel (s. Beitrag vom 03.01.2014, 11:55).

### [#21](https://www.typo3.net/d/116989-2-spaltiges-fluid-template/21) · WimDim · 2014-01-05

Hallo, ich hatte das mal ausprobiert wie du gesagt hattest, aber leider brauche ich die verschiedenen Klassen um die Darstellung rechts und links etwas unterschiedlich zu haben. Gibt es denn keine Möglichkeit, dies mit MARKERN und Typo3 zu erreichen?

### [#22](https://www.typo3.net/d/116989-2-spaltiges-fluid-template/22) · etux · 2014-01-05

Also nochmal die einfachste Variante an Beispiel von Deinem TypoScript vom letzten Beitrag:
Wenn Du in der Backend-Spalte (colPos = 3) die Inhaltselemente so setzen würdest, wie die im generierten Quellcode erscheinen sollten (kurzer Text, Beschreibung, kurzer Text, Beschreibung, … usw.), dann bräuchtest Du nur noch bei „renderObj“ optionSplit anzuwenden:

```typoscript
renderObj.stdWrap.wrap = <div class="left"> | </div> || <div class="right"> | </div>
```

Wenn Du den „kurzen Text“ immer in einer Backend-Spalte setzest und die „Beschreibungen“ in einer anderen, dann müsstest Du die Inhaltselementen in TypoScript (oder spätestens im Fluid-Template) paarweise gruppieren – erstes Element aus der „Text-Spalte“ mit dem ersten Element aus der Spalte „Beschreibung“, zweites E. Aus „Text“ mit dem zweiten aus „Beschreibung“, usw.
Das würde sicher auch gehen, ist aber aufwendiger.

### [#23](https://www.typo3.net/d/116989-2-spaltiges-fluid-template/23) · WimDim · 2014-01-05

Jetzt habe ich einen allgemeinen Content, und die beiden Backendspalten auf eine reduziert. Er gibt mir auch alle Inhalte aus, aber mit deinem Code kommt immer nur "<div class="left"></div>" und "right" gar nicht.
Anbei mal die Code-passage:

```typoscript
CONTENT = CONTENT
CONTENT {
table = tt_content
slide = -1
select.orderBy = sorting
select.languageField = sys_language_uid
select.where = colPos = 2
renderObj < tt_content
renderObj.stdWrap.wrap = <div class="left"> | </div> || <div class="right"> | </div>
}
```

Woran kann das liegen?  Danke für die Hilfe :-)

### [#24](https://www.typo3.net/d/116989-2-spaltiges-fluid-template/24) · etux · 2014-01-05

O.K. Den Link zur „split“-Funktion hatte ich Dir schon gepostet. ;)
Mach bitte folgendes:
Die Inhaltselementen der Spalte Rechts (colPos = 2) **zuerst** spliten:

```typoscript
lib.content < styles.content.getRight
lib.content {
  renderObj < tt_content
  renderObj {
    stdWrap {
      outerWrap = |###SPLITTER###
    }
  }
}
```

Dann den MARKER so umschreiben:

```typoscript
... {
  CONTENT = COA
  CONTENT {
    10 < lib.content
    stdWrap.split {
      token = ###SPLITTER###
      cObjNum = |*|1||2|*|3
      1.current = 1
      1.wrap = <div class="left">|</div>
      2.current = 1
      2.wrap = <div class="right">|</div>
      3.current = 1
      3.wrap =
    }
  }
}
```

### [#25](https://www.typo3.net/d/116989-2-spaltiges-fluid-template/25) · WimDim · 2014-01-05

SUUUPER, vielen vielen Dank. Nun klappt es endlich. Wahnsinn :-) ...
Vielen Dank an euch Alle für die Hilfe und die Geduld :-)

---

Quelle: „2 spaltiges Fluid-Template“, typo3.net, https://www.typo3.net/d/116989-2-spaltiges-fluid-template
Beiträge von Mitgliedern des Forums. Bitte mit Link auf die Diskussion zitieren.
