TYPO3-Testaccount
Testen Sie die aktuellste TYPO3-Version kostenlos und unverbindlich für einen Monat!

Jetzt testen!

Schulungen

Datensätze per RECORD einlesen und an bestimmter Stelle splitten


Autor Nachricht
Verfasst am: 24. 02. 2009 [15:45]
nk36
Themenersteller
Dabei seit: 09.03.2006
Beiträge: 42
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

HTML
<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:
HTML
<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:
TYPOSCRIPT
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!
Profil
Verfasst am: 26. 02. 2009 [11:37]
kraftb
Dabei seit: 31.03.2004
Beiträge: 10
Hallo !

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

TYPOSCRIPT
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:

TYPOSCRIPT
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):

TYPOSCRIPT
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 ... icon_cool.gif


grüsse,
Bernhard

[Dieser Beitrag wurde 2mal bearbeitet, zuletzt am 26.02.2009 um 11:39.]
ProfilWWWICQ
Verfasst am: 11. 03. 2009 [16:00]
nk36
Themenersteller
Dabei seit: 09.03.2006
Beiträge: 42
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!!
Profil