Natürlich kannst du das:
https://docs.typo3.org/m/typo3/reference-typoscript/main/en-us/Functions/Typolink.html
Content im Frontend sortieren per Link
Hi,
das hab ich mir schon durchgelesen. Mir fehlt das Verbindungsstück zwischen Typolink und Sortierung.
Hier mein bisheriges Gewurschtel, bei dem sich einige wahrscheinlich die Haare raufen werden. Aber bisher komm ich nur mit "Versuch & Irrtum" durch Typoscript.
page.10.marks.TEST = TEXT
page.10.marks.TEST {
value = test
typolink {
parameter.data = TSFE : id
additionalParams.cObject = COA
additionalParams.cObject {
1 = TEXT
#1.data =
1.table = tt_content
1.select {
orderBy = sorting
where = colPos=0
languageField = sys_language_uid
}
}
}
}
Vielleicht könnt ihr mir da nen kleinen Schupps in die richtige Richtung geben.
Ich habe jetzt noch mal etwas geforscht und gesammelt. 😃
Aber durch rumprobieren komme ich nicht weiter. Die Profis sehen wahrscheinlich sofort das mein TS ne Katastrophe ist, aber ich wäre sehr froh man gibt mir nen paar Tipps wie ich das korrekt verknüpfe/verschachtel. Ich finde leider kein ähnliches Beispiel, ich will jetzt auch nicht einfach aufgeben nur weil ich das nicht hinbekomme. Also schon mal Danke für eure Kommentare.
page.10.marks.TEST = TEXT
page.10.marks.TEST {
value = test
typolink {
addQueryString = 1
addQueryString.method = GET
parameter.field = section_frame
parameter.data = TSFE : id
#additionalParams.stdWrap {
# if
#}
#ATagParams.stdWrap.cObject = TEXT
#ATagParams.stdWrap.cObject {
# value = class="sortieren"
#}
additionalParams.cObject = COA
additionalParams.cObject {
#1 = TEXT
#1.data =
1.table = tt_content
1.select {
orderBy = title
#selectFields = section_frame
#where = colPos = 0 AND section_frame != 1
#languageField = sys_language_uid
}
}
}
}
Hi Felix,
also ich persönlich würde das schon über conditions lösen, weil man da schön flexibel Werte eben konditional bestimmen kann. Hier mal ein einfaches aber funktionierendes Beispiel wie du den Inhalt einer Spalte aufsteigend oder absteigend sortieren kannst und dabei dynamisch die Link parameter anpasst. Das ganze lässt sich dann beliebig erweitern / verändern mit zwei, drei oder mehr Links, wie man es eben gerade braucht.
In die Constants trägst du das hier ein:
reihenfolge = ASC
umgekehrt = DESC
sortLinktext = absteigend sortieren
[globalVar = GP:sort = DESC]
reihenfolge = DESC
umgekehrt = ASC
sortLinktext = aufsteigend sortieren
[end]
Dann ins Setup deinen Link und die Konstante ins select.orderBy:
# zunächst definiere ich hier meinen Sortierlink mit variablem sortLinktext,
# dem Parameter sort und der aktuellen Seitenid über TSFE : id
page {
5 = TEXT
5 {
value = {$sortLinktext}
typolink {
parameter.data = TSFE : id
additionalParams =&sort={$umgekehrt}
}
}#text
10 = CONTENT
10{
table = tt_content
select {
where = colPos=2
orderBy = sorting {$reihenfolge}
languageField = sys_language_uid
}#select
}#content
}#page
So kann man theoretisch mit allen möglichen anderen Parametern sortieren. Du könntest z.B. das "sorting" selber in eine zweite Konstante aufnehmen und dann eben mehrere Links definieren wo Du dann meinetwegen nach "title", "crdate" oder auch wie in deinem Fall nach "section_frame" etc. sortieren kannst. Dir fällt dazu sicher was ein 🙂
Gruß Alex
Super, vielen Dank, Alex.
Werd gleich mal rumwurschteln. 🙂
Hallo,
kann mir vielleicht noch mal kurz jemand helfen. Ich versuche den section_frame in das Beispiel von Alex einzubringen, hat aber bisher nicht wirklich funktioniert. Ich weiß nciht wie ich den section_frame richtig anspreche und sortiere.
Muss ich da nach dem Key (Zahl) oder dem Namen sortieren?
Wäre super dankbar für die Hilfe.
LG Felix
Hey Felix,
was klappt denn nicht, oder besser gesagt was hast du denn bisher gemacht?! Poste mal deinen Code, dann können wir hier besser nachvollziehen, wo es denn gerade hakt.
Gruß Alex
Also der aktuelle Code funktioniert nicht und ich habe schon verschiedenes mit den Konstanten probiert, aber mir fehlt da einfach die Erfahrung. Hier der Code:
Setup:
page.10.marks.TEST = COA
page.10.marks.TEST {
5 = TEXT
5 {
value = geloest
typolink {
parameter.data = TSFE : id
additionalParams = &sort={$geloest}
}
}
}
page.10.marks.CONTENT = CONTENT
page.10.marks.CONTENT {
table = tt_content
select {
where = colPos=0
orderBy = serction_frame=100
languageField = sys_language_uid
}
}
}
Constants:
ungeloest = 100
geloest = 101
info = 102
orderBy = serction_frame=100
das ist ja schon mal falsch.. wenn heißts section_frame und das =100 danach gehört weg bzw ersetzt mit asc oder desc
georg
jenau! 🙂
Ja so hatte ich es auch mal, aber da hing es wahrscheinlich an was anderem, dass es nicht funzte. 😃
EDIT: Noch mal zu meinem Ziel. Ich möchte am Ende mehrere Links haben (ungelöst, gelöst, info) nach denen die Inhalte sortiert werden.
EDIT2: Funktioniert das überhaupt wenn ich nur über ASC und DESC sortieren kann, aber 3 Links habe? Müssen die dann über Konstanten alle nach ASC sortiert werden, oder wie kann ich mir das vorstellen?
Ach ja und wenn du nach ganz bestimmten Kriterien sortieren willst, oder besser gesagt nur eine Teilmenge n aus m anzeigen willst dann kannste das, was Du bei sorting eingetragen hast bei "where" reinschreiben. Also konkret:
select.where = colPos=0 AND section_frame=100
bzw. variabel dann
select.where = colPos=0 AND section_frame={$deineFrameKonstante}
Damit sollteste dann jetzt eigentlich klarkommen. Denn nun weisst Du, wie Du eine Teilmenge einschränkst, die Du dann anschließend noch sortieren kannst.
Gruß Alex
Und das sorting funktioniert dann weiterhin über ASC und DESC?
natürlich. ausprobieren ging aber schneller 😉
Hast ja recht. 🙂
Danke für eure Geduld, mit dem Wissen werde ich mich mal an die Arbeit machen. Ich hoffe ich krieg das jetzt hin.
Ich komme der Sache langsam näher, zumindest was die Funktionsweise meiner Links betrifft. Es funktioniert sogar schon EIN BISSCHEN. 😃
Constants:
rahmen =
[globalVar = GP:section_frame<100,GP:section_frame>100]
rahmen = AND section_frame=100
[globalVar = GP:section_frame<101,GP:section_frame>101]
rahmen = AND section_frame=101
[globalVar = GP:section_frame<102,GP:section_frame>102]
rahmen = AND section_frame=102
[end]
Setup:
page.10.marks.TEST = COA
page.10.marks.TEST {
5 = TEXT
5 {
value = ungelöst
typolink {
parameter.data = TSFE : id
additionalParams =§ion_frame=100
}
}
6 = TEXT
6 {
value = gelöst
typolink {
parameter.data = TSFE : id
additionalParams =§ion_frame=101
}
}
7 = TEXT
7 {
value = info
typolink {
parameter.data = TSFE : id
additionalParams =§ion_frame=102
}
}
}
page.10.marks.CONTENT = CONTENT
page.10.marks.CONTENT {
table = tt_content
select {
where = colPos=0 {$rahmen}
orderBy = sorting
languageField = sys_language_uid
}
}
EDIT: Die Seite steht wenn sie aufgerufen wird auf info(102), die Links "ungelöst" und "gelöst" funktionieren nicht. Link "info" schaltet die Seite auf gelöst(101). Verwirrend. 🙁
EDIT2: Scheinbar funktioniert nur die Letzte Condition bei den Konstanten. Hab ich da nen Fehler drin, dass die anderen nicht funktionieren?
Wenn jemandem das Problem schon auffällt, kann er sich ja melden. Werde mal weiter basteln. 🙂
Schau Dir mal deine Conditions an und denk mal genau drüber nach, was Du da geschrieben hast. Im ersten Fall schreibst Du "wenn kleiner oder größer als 100" das schließt die 100 aus und lässt nur noch 101 oder 102 im Beispiel zu.
Im Falle von 101 bekommste dann aber schon dein erstes logische Problem, denn Typoscript wird zeilenweise geparst und 101 trifft in der ersten Condition zu, da 101 größer ist als 100, aber dann gehts ja weiter im Text und bei der 102er Condition haste dann wieder einen Treffer, der dir den Wert 100 wieder auf 102 überschreibt, denn 101 ist auch kleiner als 102.
Du arbeitest mit drei Werten von denen sich immer jeweils zwei gegeneinander ausschließen müssen. Denn im Klartext steht in deiner ersten Condition "Hier trifft ALLES zu, was NICHT 100 ist" in der zweiten "ALLES was NICHT 101" und das gleiche für Condition 3. So kann das ja auch nicht funktionieren...
Wenn Du das Problem was ich gerade oben dargstellt habe verstanden hast, dann sollte Dir auch direkt der Fehler auffallen und die Lösung ist wirklich simpel. 🙂
Gruß Alex
Ok, ja so kanns ned funktionieren. 🙂
Also im Prinzip muss ich über die Condition den Wert des section_frame in das where-Objekt reinschreiben.
Also müsste es so funktionieren:
[globalVar= GP:section_frame=100]
rahmen = AND section_frame=100
Sprich: Link wird gedrückt und hängt section_frame=100 an die URL, Condition sieht section_frame=100 und gibt dem rahmen den wert für das where-Objekt mit. Dieses schließt nun alle Objekte im tt_content aus die nicht section_frame=100 sind.
Geht das so? Da wird ja zweimal zwischen Constants und Setup hin und her gesprungen, geht das denn? Also praktisch gehts nicht, sonst würde ich es sehen. Aber liegts an meinem Code oder an der Struktur?
Jip, genau das war der Fehler 🙂
allerdings kann ich nicht nachvollziehen, warum es dann jetzt nicht bei dir läuft. Es wird auch nicht hin und her gesprungen denn beim Request deiner Seite werden zunächst alle Konstanten abgearbeitet bzw. Bedingungen geprüft und gesetzt und dann wird der Setup Code mit den resultierenden Konstanten "befüllt". Von daher steht in deinem Select Statement dann auch tatsächlich der Code drin, den du per Konstante bei "where" hinten anhängst.
Trage zum Testen doch mal hart das "AND section_frame=100" hinter "colpos" ein und wiederhole das nacheinander auch mit 101 und 102. Wenn du dann immernoch keine Ausgabe bekommst, dann solltest Du mal in der Datenbank nachschauen, ob die Bedingung die Du übergibst auch zutreffen kann, oder Du hast evtl. noch einen Schreibfehler in deinen Konstanten...
Gruß Alex
Also es passiert nichts, es werden alle Kategorien (section_frame) angezeigt und beim Klicken auf die Links passiert eben nichts. 🙁
Hart eingetragen funktioniert die Ansicht. Hier mein Code, vielleicht ist doch irgendwo nen Denkfehler. 🙁
Constants:
rahmen = #alle
[globalVar= GP:section_frame=100] #ungelöst
rahmen = AND section_frame=100
[globalVar= GP:section_frame=101] #gelöst
rahmen = AND section_frame=101
[globalVar= GP:section_frame=102] #info
rahmen = AND section_frame=102
[end]
Setup:
page.10.marks.TEST = COA
page.10.marks.TEST {
5 = TEXT
5 {
value = ungelöst
typolink {
parameter.data = TSFE : id
additionalParams = §ion_frame=100
}
}
6 = TEXT
6 {
value = gelöst
typolink {
parameter.data = TSFE : id
additionalParams = §ion_frame=101
}
}
7 = TEXT
7 {
value = info
typolink {
parameter.data = TSFE : id
additionalParams = §ion_frame=102
}
}
}
page.10.marks.CONTENT = CONTENT
page.10.marks.CONTENT {
table = tt_content
select {
where = colPos=0 {$rahmen}
orderBy = sorting
languageField = sys_language_uid
}
}