Hallo,
meine tt_news-Extension habe ich so realisiert, dass die News in Kategorien-Ordner erstellt werden und nicht in einem SysOrdner mit Kategorien. Dadurch erhalte ich einen Linkverfolger, den ich benötige, damit die Besucher genau wissen, wo sie sich gerade befinden:
Startseite | Verbraucher | Gesundheit
Startseite | Unternehmen | Haustechnik
Außerdem ist die Verwaltung für die Redakteure einfacher. Die Single-Ansicht löse ich mit TypoScript:
[globalVar = GP:tx_ttnews|tt_news > 0]
plugin.tt_news.code >
plugin.tt_news.code = SINGLE
page.10.subparts.CONTENT >
page.10.subparts.CONTENT < plugin.tt_news
config.no_cache = false
[end]
Das funktioniert ja alles super. Jetzt aber das Problem:
Auf der Startseite befindet sich eine News-Liste mit bspw. 10 aktuellen News. Auf der Verbraucher-Seite die 10 aktuellsten Verbraucher-News. Wenn ich jetzt eine News in einer dieser Liste anklicke, fehlen mir die entsprechenden Seitenbereiche wo sich diese News befindet (weil auf der gleichen Seite die Single-Ansicht statt findet). Wenn ich auf der Startseite den Link anklicke fehlt mir also der News-Bereich und die Kategorie und in der nächsten Ebene fehlt mir dann nur noch die Kategorie. Ich habe versucht die fehlenden Bereiche zu rekonstruieren, indem ich die übermittelte "backPid" per TS überprüft habe. Stammt die ID von der Startseite (1), so soll er die pid (Ausgangspunkt) der News aus der tt_news-Tabelle entnehmen und den Titel des Verzeichnisses aus der pages-Tabelle entnehmen. Aber hier scheitere ich schon an der Aufgabe und TS gibt mir da keine Ausgabe. Was mache ich da falsch?
page.10.marks.MITVERFOLGER = TEXT
page.10.marks.MITVERFOLGER.field =
[globalVar = GP:tx_ttnews|backPid=1]
tmp.KATEGORIE = RECORDS
tmp.KATEGORIE {
source.data = GPVar:tx_ttnews|tt_news
tables = tt_news
conf.tt_news = TEXT
conf.tt_news.field = pid
}
page.10.marks.MITVERFOLGER = RECORDS
page.10.marks.MITVERFOLGER {
source.data = tmp.KATEGORIE
tables = pages
conf.tt_news = TEXT
conf.tt_news.field = title
}
[global]
Hat jemand auch eine andere Idee, wie man das elegant lösen könnte?
Habe nun rausgefunden, wie man einen Datenfeldbezug durch einen String ermitteln kann:
DB:Tabelle:UID:Feldname
Benötigte Werte innerhalb dieses Strings, die dynamisch sind, können durch die geschweiften Klammern angekündigt werden. Hoffe, damit können auch die übermittelten GET-Variablen (GPVar) angesprochen werden.
Somit habe ich mein TS um einige Zeilen verkürzen können:
page.10.marks.MITVERFOLGER = TEXT
page.10.marks.MITVERFOLGER.value = <
[globalVar = GP:tx_ttnews|backPid=1]
page.10.marks.MITVERFOLGER = RECORDS
page.10.marks.MITVERFOLGER {
source.data = DB:tt_news:{GPVar:tx_ttnews|tt_news}:pid
tables = pages
conf.pages = TEXT
conf.pages.field = title
wrap = <a href="/index.php?id={???}">|</a>
}
[global]
Allerdings bewirkt dieses TS leider immer noch nichts und der Marker bleibt einfach leer... o.O
Wie kann ich eigentlich in den Markerbereich noch zusätzlich etwas dranhängen?
So! Wir hamm's ja fast. 😃
Jetzt bin ich der Lösung meines Problems ein Schritt weiter gekommen.
Nun bin ich auch auf die sagenhafte Idee gekommen, dass alles in COA reinzupappen. #paralyzed#
page.10.marks.MITVERFOLGER = TEXT
page.10.marks.MITVERFOLGER.value =
[globalVar = GP:tx_ttnews|backPid=1]
page.10.marks.MITVERFOLGER = COA
page.10.marks.MITVERFOLGER {
10 = TEXT
10 {
data = DB:tt_news:{GPVar:tx_ttnews|tt_news}:pid
wrap = <a href="/index.php?id=|">
}
20 = RECORDS
20 {
source.data = DB:tt_news:{GPVar:tx_ttnews|tt_news}:pid
tables = pages
conf.pages = TEXT
conf.pages.field = title
wrap = |</a>
}
}
[global]
Wenn ich die geschweiften Klammern durch eine entsprechende UID ersetze, so funktioniert der ganze Kram! Juchu! Aber wie füge ich nun die Variable ein? Hab bis jetzt noch keine Hinweise bekommen, wie hier vorgegangen werden muss.
Langsam kommen mir keine Ideen mehr.
Folgendes habe ich versucht:
#Constants:
ttnewsUid = {GPVar:tx_ttnews|tt_news}
#Setup:
data = DB:tt_news:{$ttnewsUid}:pid
Fehlanzeige, auch wenn der Ansatz doch eigentlich richtig sein sollte?!! Wenn dann einen festen Wert für die Konstante eintrage, so funktioniert's wieder...
Dann nächster Versuch:
dataWrap = DB:tt_news:{GPVar:tx_ttnews|tt_news}:pid
So gibt er mir wenigstens den String "DB:tt_news:54:pid" aus. Wie kann ich also den übersetzten String dann für .data verwenden?!?!
Echt ein Teufelskreis hier.
Es nimmt kein Ende.
Nun habe ich es mit LOAD_REGISTER versucht:
[...]
5 = LOAD_REGISTER
5 {
ttnewsUid = RECORDS
ttnewsUid {
source.data = GPVar:tx_ttnews|tt_news
tables = tt_news
conf.tt_news = TEXT
conf.tt_news.field = pid
}
}
[...]
data = register:ttnewsUid
[...]
Nur dort setzt er mir den String RECORDS rein und nicht die ermittelte "pid" aus der tt_news-Tabelle. #angry#
Genug für heute. Ich habe allerdings einen kleinen Erfolg zu verzeichnen:
page.10.marks.MITVERFOLGER = TEXT
page.10.marks.MITVERFOLGER.value =
### News-Seite wird über die Startseite angezeigt?
[globalVar = GP:tx_ttnews|backPid=1]
### Vorbereiten der PID
temp.ttnewsCat2 = RECORDS
temp.ttnewsCat2 {
source.dataWrap = DB:tt_news:{GPvar:tx_ttnews|tt_news}:pid
source.wrap3 = {|}
source.insertData = 1
tables = pages
conf.pages = TEXT
conf.pages.field = uid
}
### Marker befüllen
page.10.marks.MITVERFOLGER = COA
page.10.marks.MITVERFOLGER {
### Link erstellen für News-Bereich
40 = TEXT
40.value = | <a href="/index.php?id=
50 < temp.ttnewsCat2
### Titel der News-Kategorie (Seitentitel)
60 = RECORDS
60 {
source.dataWrap = DB:tt_news:{GPvar:tx_ttnews|tt_news}:pid
source.wrap3 = {|}
source.insertData = 1
tables = pages
conf.pages = TEXT
conf.pages.field = title
wrap = ">|</a>
}
}
[global]
Wobei dies hier
source.dataWrap = DB:tt_news:{GPvar:tx_ttnews|tt_news}:pid
source.wrap3 = {|}
source.insertData = 1
das Herzstück darstellt, um einen verschachtelten Data-String zu ermöglichen:
Jetzt habe ich nur noch ein einziges Problem:
temp.ttnewsCat1 = RECORDS
temp.ttnewsCat1 {
source.dataWrap = DB:tt_news:{GPvar:tx_ttnews|tt_news}:pid
source.wrap3 = {|}
source.insertData = 1
tables = pages
conf.pages = TEXT
conf.pages.field = pid
}
*schnipp*
### Link erstellen für News-Bereich
10 = TEXT
10.value = | <a href="/index.php?id=
20 < temp.ttnewsCat1
### Titel der News-Kategorie (Seitentitel)
30 = RECORDS
30 {
source < temp.ttnewsCat1 ### ???
tables = pages
conf.pages = TEXT
conf.pages.field = title
wrap = ">|</a>
}
Ich kann die "temp.ttnewsCat1" gespeicherte pid natürlich nicht für "source" (Zeile 23) übergeben! #angry#
Problem gelöst!!! 😃
Ich wußte doch, dass das in TypoScript geht!!! Wäre doch gelacht!
### Mitverfolger realisieren ###
page.10.marks.MITVERFOLGER = TEXT
page.10.marks.MITVERFOLGER.value =
### News-Seite wird auf der Startseite realisiert?
[globalVar = GP:tx_ttnews|backPid=1]
### Marker befüllen
page.10.marks.MITVERFOLGER = COA
page.10.marks.MITVERFOLGER {
### pid der Seite zwischenspeichern
10 = LOAD_REGISTER
10 {
ttnewsCat.cObject = RECORDS
ttnewsCat.cObject {
source.dataWrap = DB:tt_news:{GPvar:tx_ttnews|tt_news}:pid
source.wrap3 = {|}
source.insertData = 1
tables = pages
conf.pages = TEXT
conf.pages.field = pid
}
}
### Titel des News-Bereiches (Seitentitel)
20 = RECORDS
20 {
source.data = register:ttnewsCat
tables = pages
conf.pages = TEXT
conf.pages {
### Link erstellen
typolink {
parameter.dataWrap = {field:uid}
returnLast = url
}
dataWrap = &124; <a href="|">{field:title}</a>
}
}
### Titel der News-Kategorie (Seitentitel)
30 = RECORDS
30 {
source.dataWrap = DB:tt_news:{GPvar:tx_ttnews|tt_news}:pid
source.wrap3 = {|}
source.insertData = 1
tables = pages
conf.pages = TEXT
conf.pages {
### Link erstellen
typolink {
parameter.dataWrap = {field:uid}
returnLast = url
}
dataWrap = &124; <a href="|">{field:title}</a>
}
}
}
[global]
Man beachte:
Wenn man einen Wert "zwischenspeichern" will, diesen also an anderer Stelle weiterverwenden möchte, so bedient man sich dem LOAD_REGISTER, welches aber im COA-Objekt erstellt werden muss (.10). An meiner Stelle muss der RECORDS-Teil zusätzlich an ein cObject-Array verknüpft werden. Vermutlich deshalb, damit es an Ort und Stelle geparst werden kann und kein String "RECORDS" übergeben wird. Somit kann die Variable ttnewsCat über .data mit register:ttnewsCat an beliebiger Stelle eingefügt werden (vermute jetzt einfach mal innerhalb des COA-Objekts).
Die Links habe ich dann noch über das typolink-Objekt erzeugt, was die Übersichtlichkeit verbessert und die Größe des TypoScript wohlwollend reduziert.
Typo Voila! 😃
Ich bedanke mich hiermit allen Mitlesern und Interessierten, die dieses Thema mitverfolgt haben. Vielen Dank! :o