Zum Inhalt springen

Datensätze per RECORD einlesen und an bestimmter Stelle splitten

Erstellt am 24. Februar 2009 · 2 Antworten · letzte Antwort am 11. März 2009

Tags: Frage

nk36 ·

hallo,
ich lese die Datensätze einer bestimmten Tabelle per Typoscript aus und will gerne nach jedem Xten Datensatz einen neuen Div-Container beginnen. Ist das über Typoscript möglich und wenn wie?
zur Veranschaulichung mal ein Beispiel:
reguläre Ausgabe

<div class="box">
  <p>Titel 1</p>
  <p>Titel 2</p>
  <p>Titel 3</p>
  <p>Titel 4</p>
</div>

So will ich es gerne haben:

<div class="box">
  <p>Titel 1</p>
  <p>Titel 2</p>
</div>
<div class="box">
  <p>Titel 3</p>
  <p>Titel 4</p>
</div>

die Datensätze lese ich über RECORDS:

20= RECORDS
20.wrap = <div class="box">|</div>
20.source.current=1
20.tables = tt_content
20.conf.tt_content = COA
20.conf.tt_content {
# ...
}

kann ich irgendwie den Index der aktuellen Reihe auslesen?
dann würde das wahrscheinlich über if abfragen klappen

Danke!

kraftb ·

Hallo !

Ja. Das sollte klappen (ungetestet) - wenn du zum beispiel folgerndermassen deinen Inhalt ausgibst (im RECORDS objekt):

20.conf.tt_content = COA
20.conf.tt_content {
	dataWrap = <p>{field:title}</p>
}

dann solltest du mit folgender änderung ein bei 1 beginnende nummerierung erhalten:

dataWrap = <p>{cobj:parentRecordNumber}: {field:title}</p>

nun könntest du "klug" mit prioriCalc und dem modulo operator "%" (siehe "Modulo" auf wikipedia) nach jedem "xten" element ein neues div beginnen. ca. so (ungetestet):

20 = RECORDS
20 {
	tables = tt_content
	wrap = <div class="box">|</div>
	source.current=1
	conf.tt_content = COA
	conf.tt_content {
		prepend = TEXT
		prepend {
			value = </div><div class="box">
			# wenn z.B. das 3. Element ausgegeben wird (parentRecordNumber = 3)
			# dann ergibt: (3-1) = 2 ... und 2 % 2 == 0
			if.isFalse.dataWrap = ({cobj:parentRecordNumber}-1) % 2
			if.isFalse.prioriCalc = intval
			# jedoch nicht beim allerersten objekt (parentRecordNumber = 1) ausführen
			# denn: (1-1) % 2 => 0 ..
			# also: parentRecordNumber > 1
			if.isGreaterThan.data = parentRecordNumber
			if.value = 1
		}
		dataWrap = <p>|</p>
	} 
}

Wie gesagt: ungetestet - aber das wäre die Lösung die ich wählen würde. Eventuell bedard das "if" konstrukt im "prepend" etwas finetuning. Im Prinzip wird halt nur nachgesehen - ist die aktuelle position durch zwei teilbar (oder besser gesagt - das element vor der aktuellen position (-1) - und wenn dies der fall ist, wird VOR dem aktuellen <p>|</p> noch ein </div><div class="box"> eingefügt ...

und da das ganze ja sowieso in einem wrap = <div class="box">|</div> sitzt, passt es auch mit dem <div> davor und danach ... 8-)

grüsse,
Bernhard

nk36 ·

hi,
nun komm ich endlich zum testen.
Es klappt nicht auf anhieb (jedes element wird nun mit der div.box gewrappt), aber du hast mir mit cobj:parentRecordNumber schon sehr geholfen!
ich werd da jetzt mal ein bisschen rumprobieren.
danke!

ps. auch fuer deine wunderbare kb_shop extension!!