Hallo zusammen,
ich stehe gerade total auf dem Schlauch und würde mich freuen, wenn Ihr mir helfen könntet.
Und zwar lasse ich für jeden Benutzer mittels Typoscript eine monatliche Aufstellung mit Summeneinträgen generieren...
Monat Januar = 100
Monat Februar = 90
Monat März = 30
Summe = 220
Das klappt auch alles soweit. Nun möchte ich gerne die einzelnen Monate mit einer Detailansicht verlinken und dort zieht mir Typoscript leider immer nur den letzten Link bzw. Parameter. Ich komme aktuell einfach nicht weiter. Ich weiß, dass das mit PHP sicherlich eleganter zu lösen ist, ich habe jetzt aber mit TS angefangen und würde mich freuen wenn ich dies auch komplett mit TS lösen könnte bzw. mit Eurer Hilfe #giggle# Habt Ihr eine Idee? Ich bin über jeden Ansatz dankbar!!!!
Das Script sieht folgendermaßen aus:
temp.templatexy = COA
temp.templatexy {
10 = CONTENT
10{
table = tx_tabelle
select {
pidInList = 13
}
renderObj = COA
renderObj {
wrap = <table style="width:100%">|</table>
15 = TEXT
15.wrap = <table style="width:100%">|</table>
15.current = 1
15.setCurrent.field = spalte4
15.setCurrent.dataWrap = | + {field:spalte1}+{field:spalte2}+{field:spalte3}
15.if {
value.field = tx_tabelle_auth
equals.data = TSFE:fe_user|user|tx_tabelle_auth
}
15.prioriCalc = 1
15.dataWrap = <tr style="background-color:#e6e6e6;">
<td colspan="2" style="width:75%; height:20px; font-weight:bold">Saldo vom {field:datum}</td>
<td style="text-align:right; font-weight:bold">|</td></tr>
# Links zu den Einzelübersichten
# Januar
15.typolink {
parameter = 14
if.value.field = datum
if.equals = 15.01.2011
}
# Februar
15.typolink {
parameter = 15
if.value.field = datum
if.equals = 15.02.2011
}
# März
15.typolink {
parameter = 16
if.value.field = datum
if.equals = 15.03.2011
}
}
}
}
TS ist schon was Feines.... :p
Bin selber nicht so der Fan von current/setCurrent, weil sich mir das noch nicht so ganz erschlossen hat... :-(
Würde es eher im größeren Bogen anpacken und die Felder als einzelne TEXT-cObjects ine in COA packen und darauf dann via stdWrap mit prioriCalc draufgehen.
Viele Grüße
Julian
Julian.Hofmann schrieb
TS ist schon was Feines.... :p
Bin selber nicht so der Fan von current/setCurrent, weil sich mir das noch nicht so ganz erschlossen hat... :-(
Würde es eher im größeren Bogen anpacken und die Felder als einzelne TEXT-cObjects ine in COA packen und darauf dann via stdWrap mit prioriCalc draufgehen.
Viele Grüße
Julian
Hallo Julian,
vielen Dank schon mal für Deine schnelle Unterstützung! Ich werde es ausprobieren. Helfen mir die einzelnen TEXT-cObjects etc. bei den fehlerhaften Links?
Ah...jetzt #angry# Deine Frage bezieht sich eigentlich nur auf den unteren Bereich, wo die typolinks stehen. Dachte es hängt in oberen bereich.
Was möchtest Du dort genau erreichen? Im Moment überschreibt Dir der letzte Block einfach die vorherigen zwei. TS wird vor dem Parsen ine in PHP-Array gewandelt, d.h. auf 'parameter' beschränkt erfolgt:
$ts['temp.']['templatexy.']['10.']['renderObj.']['15.']['parameter'] = 14;
// ...im Verlauf dann...
$ts['temp.']['templatexy.']['10.']['renderObj.']['15.']['parameter'] = 15;
// ...und
$ts['temp.']['templatexy.']['10.']['renderObj.']['15.']['parameter'] = 16;
Somit ist der Wert immer 16, das if greift zwar ggf. (de)aktiviert aber nur die Verlinkung.
Für die Fallunterscheidung hilft Dir CASE
15.typolink.parameter.cObject = CASE
15.typolink.parameter.cObject.key.field = datum
Wobei das IMHO von nummerischen Keys für die Unterscheidung ausgeht...
Vielen Dank Julian, es funktioniert! 🙂
Leider habe ich es mit CASE nicht hinbekommen bzw. den korrekten Lösungsweg nicht gefunden aber dank deiner Hilfe habe ich das nun wie folgt geregelt:
...
# Links zu den Einzelübersichten
15.dataWrap.cObject = COA
15.dataWrap.cObject {
key.field = datum
10 = TEXT
10 {
if.value = 15.01.2011
if.isInList.field = datum
typolink.parameter = 14
}
20 = TEXT
20 {
if.value = 15.02.2011
if.isInList.field = datum
typolink.parameter = 15
negate = 1
}
30 = TEXT
30 {
if.value = 15.03.2011
if.isInList.field = datum
typolink.parameter = 16
negate = 1
}
}
Das ist bestimmt nicht die eleganteste Lösung aber es funktioniert. TS ist echt eine feine Sache!!
Hallo zusammen,
ein kleiner Fehler hat sich doch noch eingeschlichen. Und zwar wird auch pro Datensatz eine Tabelle für die Datensätze der anderen Benutzer generiert. Es ist zwar kein Inhalt vorhanden aber ich habe jetzt zwischen den Zeilen im Frontend jede Menge leere Tabellen. o.O
Habt Ihr eine Idee wie man das unterbinden kann? Ich bin für jeden Lösungsansatz dankbar. 🙂
Sinnvoll wäre da in die Select-Abfrage gleich die Bedingung einzubauen, dass nur Datensätze des angemeldeten FE-Users selektiert werden. Das sollte Dein Problem lösen.
Perfekt!!! Danke Julian es funktioniert. Da hätte ich Esel aber auch selber drauf kommen können. #angry#
Anbei noch einmal das überarbeitete Script:
temp.templatexy = COA
temp.templatexy {
10 = CONTENT
10 {
table = tx_tabelle
select {
pidInList = 13
}
renderObj = COA
renderObj {
wrap = <table style="width:100%">|</table>
# BEDINGUNG DER SELECT-ABFRAGE
wrap.if {
value.field = tx_tabelle_auth
equals.data = TSFE:fe_user|user|tx_tabelle_auth
}
15 = TEXT
15.wrap = <table style="width:100%">|</table>
15.current = 1
15.setCurrent.field = spalte4
15.setCurrent.dataWrap = | + {field:spalte1}+{field:spalte2}+{field:spalte3}
15.if {
value.field = tx_tabelle_auth
equals.data = TSFE:fe_user|user|tx_tabelle_auth
}
15.prioriCalc = 1
15.dataWrap = <tr style="background-color:#e6e6e6;">
<td colspan="2" style="width:75%; height:20px; font-weight:bold">Saldo vom {field:datum}</td>
<td style="text-align:right; font-weight:bold">|</td></tr>
# Links zu den Einzelübersichten
15.dataWrap.cObject = COA
15.dataWrap.cObject {
key.field = datum
10 = TEXT
10 {
if.value = 15.01.2011
if.isInList.field = datum
typolink.parameter = 14
}
20 = TEXT
20 {
if.value = 15.02.2011
if.isInList.field = datum
typolink.parameter = 15
negate = 1
}
30 = TEXT
30 {
if.value = 15.03.2011
if.isInList.field = datum
typolink.parameter = 16
negate = 1
}
}
}
}
}
TAUSEND DANK Julian!! 🙂
Ähm, nein, so war das nicht gemeint.
Im Moment selektierst Du alle Datensätze aus tx_tabelle, durchläufst alle und entscheidest erst beim Rendern, ob Du den Datensatz überhaupt angezeigt haben willst. Sinnvoller dürfte es aber sein, dass Du bereits bei der Abfrage aus der Datenbank nur das rausholst, was den FE-User überhaupt etwas angeht (also seine eigeen Daten).
In tx_tabelle steht vermutlich die ID des FE-Users (Annahme: Spalte fe_user_ID):
#...
table = tx_tabelle
select {
pidInList = 13
where = 1=1
andWhere.data = TSFE:fe_user|user|uid
andWhere.wrap = fe_user_ID=|
}
#...
Du hast recht, das ist natürlich sinnvoller. Ich habe es bereits umgestellt und es funktioniert ebenfalls. TAUSEND DANK nochmal. 🙂