Unmengen von Neuigkeiten
24. Juni 2009
Für eine TYPO3-Seite benutze ich ein bisschen TypoScript, um tt_news-Einträge in einen Marker zu kopieren, damit diese News-Liste auf allen Seiten an der selben Stelle angezeigt wird.
1 2 3 4 5 6 7 8 9 |
Hierbei wird einfach in Zeile 5 die entsprechende Tabelle ausgewählt und in Zeile 6 die ID des tt_news-Plugins angegeben. Das ganze kann man dann noch entsprechend stylen und alles ist gut.
Bis irgendwann noch eine Kategorie hinzukommt und man alle Einträge anzeigen lassen will außer die, die in einer bestimmten Kategorie stehen.
Dabei hilft das obige TypoScript nicht mehr, dann muss man die Einträge direkt auswählen und selbst rendern. Da die Liste der News-Titel natürlich auch noch verlinkt werden soll, muss man zuerst ein Muster für den Link vorbereiten:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Hat man das, muss man die entsprechenden Einträge aus der tt_news-Tabelle auslesen (Zeilen 3-11) und dann rendern (Zeilen 13-18). Und im Ergebnis hat man die selbe Liste wie vorher, nur das alle Einträge, die in einer bestimmten Kategorie stehen, nicht auftauchen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | temp. contextnews = CONTENT temp. contextnews { table = tt_news select { pidInList = {$plugin.tt_news.pid_list} orderBy = tstamp DESC selectField = uid,tstamp,title max = 5 where = uid_foreign NOT IN ({$plugin.tt_news.ignore_uids}) join = tt_news_cat_mm ON (tt_news.uid=tt_news_cat_mm.uid_local) } renderObj = TEXT renderObj { field = title typolink.parameter = {$plugin.tt_news.singlePid} typolink.additionalParams.cObject < temp.newsMenuLinkParams } } lib.contextnews < temp.contextnews |
- Zeile 3: Tabelle auswählen
- Zeile 5: ID des Newsordners
- Zeile 6: Nach Datum sortieren, neueste zuerst
- Zeile 7: uid (ID des Artikels), title (Titel des Artikel) und tstamp (Erstellungsdatum des Artikels) auswählen
- Zeile 8: Maximal 5 Artikel anzeigen
- Zeile 9: Alle Kategorien außer die bestimmte auswählen. Über eine kommaseparierte Liste kann man auch mehrere Kategorie-Ids angeben
- Zeile 10: Über einen Join die News-Kategorie- und News-Artikel-Tabelle verknüpfen.
Damit sind die entsprechenden Einträge ausgewählt, die dann noch gerendert werden müssen. Dazu brauchen wir dann auch das Objekt, das das Muster des tt_news-Links enthält, also.
- Zeile 15: Titel als Link benutzen
- Zeile 16: Linkziel ist die Einzelansicht der News
- Zeile 17: Der zusätzliche Parameter zum erzeugen des tt_news-Links ist das erstellte Objekt, das mit den entsprechenden Daten (aus dem tstamp, der in Zeile 7 mit ausgewählt wurde) befüllt wird
Das war es schon. ;-)
Eventuell gibt es einfacherer oder elegantere Wege, die gewünschte Liste zu erstellen. Aber es funktioniert.
4 Kommentare und Trackbacks
Kommentar(e)
-
Laut tt_news Handbuch sollte folgendes funktionieren:
1
2
3
4
5
6
7plugin.tt_news {
# show news which have none of the selected categories assigned (OR)
categoryMode = -2
# Kategorie abwählen
categorySelection = 6
} -
Leg’ Dir irgendwo versteckt eine Seite hin, in der Du im Content tt_news einbindest mit den entsprechenden Katagorie-Konfigurationen und zieh’ den Inhalt dieser Seite in Deinen Bereich mit:
-
@tomk und @andreas: Beide Varianten funktionieren auch, allerdings haben die jeweils auch Nachteile, genau wie mein Ansatz. ;-)
Bei der Variante von Tom K. muss das tt_news erst konfiguriert und ein Template geschrieben werden, bei der Variante von Andreas benötigt man eine extra Seite. Es scheint ca. 1000 Wege zu geben, TYPO3 dazu zu bekommen, das zu tun, was man von ihm möchte.
-
Es wäre besser wenn man statt tstamp, die datetime verwendet, da der timestamp ja nur das bearbeiten der News, und nicht das offizielle Veröffentlichungsdatum wiederspiegelt.
Den Tag sollte man auch noch gleich mit einbeziehen.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17temp.newsMenuLinkParams {
10 = TEXT
10.field = uid
10.wrap = &tx_ttnews[tt_news]=|
20 = TEXT
20.field = datetime
20.date = Y
20.wrap = &tx_ttnews[year]=|
30 = TEXT
30.field = datetime
30.date = m
30.wrap = &tx_ttnews[month]=|
40 = TEXT
40.field = datetime
40.date = d
40.wrap = &tx_ttnews[day]=|
}