Hallo Gemeinde,
ich habe folgende Datenbankabfrage:
temp.listContent = CONTENT
temp.listContent{
table = tt_content
select{
pidInList.cObject < temp.subPagesIDs
where = (tx_templavoila_ds = 10 or cType = "image")
orderBy = sorting DESC
}
in temp.subPagesIDs befinden sich die jeweiligen UID´s der Seiten aus dem ich den Inhalt geliefert bekommen möchte.
Als Ergebnis erhalte ich einen bestimmten Textabschnitt und ein Bild der oben genannten Seiten, welches ich mir als Liste auf einer anderen Seite ausgeben lassen.
Mein Problem ist die Sortierung. Ich müsste eigentlich nach der Spalte sorting, der Tabelle pages sortieren. Ist es möglich folgende vereinfachte SQL-Abfrage als Typoscript darzustellen? Entweder in das oben bestehende Typoscript hinein oder irgend wie Verschachtelt?
SELECT * FROM tt_content content, pages page
WHERE content.pid = 20, 30, 50
AND pages.uid = 20, 30, 50
AND (content.tx_templavoila_ds = 10
OR content.cType = "image")
ORDER BY pages.sorting;
Die ID´s in content.pid sind identisch mit temp.subPagesIDs aus dem Typoscript
Wäre für jeden Tip dankbar.
Hallo.
Deine Abfrage sollte via geeignetem Join möglich sein.
Viele Grüße
Julian
aber wie mache ich das denn in typoscript?
ich schreibe ins anfängerforum weil ich auch tasächlich anfänger bin ^^
Ist ja immer die Frage, in was mal Anfänger ist, ob "nur" in TYPO3, auch in SQL,... und wie sehr mal sich selber reindenken will bzw. ob man nur einen Denkanstoß braucht. 😉
# ...
table = tt_content
select {
pidInList.cObject < temp.subPagesIDs
leftjoin = pages ON(pages.uid=tt_content.pid)
where = (tt_content.tx_templavoila_ds = 10 or tt_content.cType = "image")
orderBy = pages.sorting DESC
}
Kann sein, dass da jetzt noch was nicht 100% stimmt, aber denke, es geht ja doch v.a. um den Ansatz.
Viele Grüße
Julian
Ah cool, wusste nicht, dass das so in der Art geht, ich finde es irgend wie schwierig sämtliche Möglichkeiten zu finden.
Bin übrigens Typo3-Anfänger und da ich eine recht hohe Auffassungsgabe habe reichen meistens Denkanstöße 🙂
vielen Dank Julian.Hofmann ich werde gleich mal testen und dann die Lösung posten 🙂
Ach verdammt,
leider verhält sich die Seite nun sehr merkwürdig, sodass auch meine Auffassungsgabe nicht ausreicht 🙁
die Bilder werden korrekt angezeigt auch die jeweilige Überschrift sowie der Weiterbutton. Doch durch den Join hat Typo3 Probleme mit der Textpasage.
Bei der ersten kommt der Fehler
TemplaVoila ERROR:
Couldn't find a Data Structure set for table/row "tt_content:25".
Please select a Data Structure and Template Object first.
Seltsamer weise bei der zweiten Textpasage kommt keine Fehlermeldung, stattdessen wird die Komplette Seite an dieser Stelle angezeigt.
Zum besseren Verständnis kann man hier schauen:
http://goltz-haustierrassen.de/homepage/index.php?id=13
Die Seiten mit den ids 25 und 30 sind die jeweiligen Detailseiten aus denen die inhalte kommen
Woran kann das liegen? nehme ich den Join raus sind die Inhalte die richtigen
Scheint, als würde Templavoila da innerhalb der Datensätze durcheinander kommen. Ein Ausweg könnte sein, dass Du in die Abfrage noch mit
selectFields = tt_content.*
erweiterst. Damit wäre in den Abfrageergebnissen nur das, was normal in Inhaltselementen vorkommt (und nicht alle Spalten von tt_content und pages, was evtl. zu Überschneidungen führt).
Hey Julian
erst einmal vielen Dank für deine schnelle Unterstützung.
Leider wird nach selectFields gar nichts mehr angezeigt.
ich habe das TS jetzt noch einmal so geändert, dass alles, bis auf die Sotierung richtig angezeigt wird, also ohne join, damit Du sehen kannst wie es ungefähr aussehen soll.
außerdem hier jetzt noch einmal das komplette TS mit join.
ist ziemlich lang, sorry dafür aber wenn Du Zeit und Lust hast, kannst ja mal darüber schauen. ich neige oft dazu mich zu verrennen und vielleicht siehst Du ja auch andere Ansatzmöglichkeiten oder aber einen Fehler.
temp.listContent = CONTENT
temp.listContent{
table = tt_content
select{
pidInList.cObject < temp.subPagesIDs
selectFields = tt_content.bodytext tt_content.image
leftjoin = pages ON(pages.uid = tt_content.pid)
where = (tt_content.tx_templavoila_ds = 10 or tt_content.cType = "image")
orderBy = pages.sorting ASC
}
renderObj = COA
renderObj{
10 = IMAGE
10.if.value = image
10.if.equals.field = CType
10.file = GIFBUILDER
10.file{
XY = 142, 88
format = png
quality = 100
10 = IMAGE
10.file.import{
field = image
listNum = 0
wrap = uploads/pics/|
}
10.file.width = 142c
10.file.height = 88c-0
}
10.wrap = <div class="left">|</div>
20 = TEXT
20.value = <div class="clear"></div>
30 = COA
30{
10 = USER
10.userFunc = user_functions->load_listHeader
20 =< tt_content
20.if.value = templavoila_pi1
20.if.equals.field = CType
40 = IMAGE
40.if.value = templavoila_pi1
40.if.equals.field = CType
40{
file = fileadmin/img/button/btn_mehr.png
stdWrap.typolink.parameter.field = pid
wrap = <div class="right">|</div>
}
50 = TEXT
50.value = <div class="clear"></div>
}
30.wrap = <div class="listentext">|</div>
}
}
Viele Grüße
Mathias
Du verwendest beim Rendern eine Abfrage auf das Feld CType, das Du aber beim select nicht mit abfragst...
Die Zeile 6 war von mir wirklich mit Stern (tt_content.*) gemeint, damit alles aus der Tabellenzelle erst einmal verfügbar ist.
Das TS ist doch noch kurz. Wenn ich mir da manch anderes anschauen.... 😉
Wenn ich solche Queries über TS löse, dann meist um solchen selectFields Problemen aus dem Weg zu gehen in zwei Schritten verschachtelt. Das dürfte dir auch hier helfen:
temp.listContent = CONTENT
temp.listContent{
table = tt_content
select{
pidInList >
andWhere < temp.subPagesIDs
andWhere.wrap = uid IN (|)
orderBy = sorting ASC
}
renderObj = CONTENT
renderObj{
table = tt_content
select{
pidInList.field = uid
where = (tt_content.tx_templavoila_ds = 10 or tt_content.cType = "image")
}
renderObj = COA
renderObj{
10 = IMAGE
10.if.value = image
10.if.equals.field = CType
10.file = GIFBUILDER
10.file{
XY = 142, 88
format = png
quality = 100
10 = IMAGE
10.file.import{
field = image
listNum = 0
wrap = uploads/pics/|
}
10.file.width = 142c
10.file.height = 88c-0
}
10.wrap = <div class="left">|</div>
20 = TEXT
20.value = <div class="clear"></div>
30 = COA
30{
10 = USER
10.userFunc = user_functions->load_listHeader
20 =< tt_content
20.if.value = templavoila_pi1
20.if.equals.field = CType
40 = IMAGE
40.if.value = templavoila_pi1
40.if.equals.field = CType
40{
file = fileadmin/img/button/btn_mehr.png
stdWrap.typolink.parameter.field = pid
wrap = <div class="right">|</div>
}
50 = TEXT
50.value = <div class="clear"></div>
}
30.wrap = <div class="listentext">|</div>
}
}
}
ungetestet!
Wobei ich mich gerade frage was in temp.subPagesIDs definiert ist... Kannst du nicht irgendwie dort schon die Reihenfolge bestimmen?
yar Julian, mein Retter, es lag an der unvollständigen select 🙂
Jetzt passt die Reihenfolge im HTML-Quellcode, muss nur noch css angepasst werden.
*freu*
Vielen Dank
Kitsunet, deinen code habe ich mal einfach copy pastet, geht natürlich nicht auf anhieb, aber sieht interessant aus und werde mir das mal genauer anschauen
und für alle anderen, hier nocheinmal zusammengefasst die Lösung
temp.listContent = CONTENT
temp.listContent{
table = tt_content
select{
pidInList = 10,11,12
selectFields = tt_content.*
leftjoin = pages ON(pages.uid = tt_content.pid)
where = (tt_content.tx_templavoila_ds = 10 or tt_content.cType = "image")
orderBy = pages.sorting ASC
}