Zum Inhalt springen

GPvar:tx_ttnews|tt_news im Typoscript weiterverarbeiten

Erstellt am 30. Januar 2007 · 25 Antworten · letzte Antwort am 5. März 2013 · Seite 1 von 2

Tags: tt_news, TYPO3 4, Frage

EvilBMP ·

Hallo,

soweit mir bekannt ist kann man mit Hilfe des "data" Attributes z.B. ganz bestimmte Daten aus der DB ziehen.

Ich möchte nun den Titel der aktuellen angezeigten News erhalten ...

10 = TEXT
10.data = DB:tt_news:AKT_ID:title

Anstelle von AKT_ID müsste die per GET übergebene ID der angezeigten News eingesetzt werden! Ich habe schon ein wenig probiert:

10.TEXT
10.data = DB:tt_news:{GPvar:tx_ttnews|tt_news}:title

Das funktioniert leider schonmal nicht 🙁

Gibts eine Möglichkeit diese zwei data Objekte zu verschachteln ... ODER gibts vielleicht eine einfachere Möglichkeit auf den Titel der akt. News (Single Ansicht) zuzugreifen?!

Gruß, Evil

EvilBMP ·

das geht aber leider nicht mit dem data attribut, sondern nur mit dem value attribut ...

nehme ich also statt data das value attribut, dann gibt er mir einfach den string aus mit der ersetzten GPvar

10.TEXT
10.value = DB:tt_news:{GPvar:tx_ttnews|tt_news}:title
10.insertData = 1

Ergebnis:

DB:tt_news:19:title

Nur wie bekomme ich nun diesen value per data verarbeitet ? o.O

EDIT:

Also ich hab dann jetzt mal noch ein bissl probiert und gegoogled 😉

Der Tip von steffenk war schonmal ganz gut, jedoch bewirkt das insertData = 1 leider nur, dass die GPvar geparst wird.

Standardmäßig kann man in eine DB-Klausel keine GPvars einfügen - Konstanten oder andere Variablen funktionieren jedoch. Damit also der Data-String zweimal geparst wird, muss über dataWrap erst einmal die GPvar in den String eingefügt und durch wrap3 noch einmal umschlossen werden, so dass daraus eine Typoscript Variable wird. Dadurch kann per insertData noch einmal der umgesetzte DB-String geparst bzw. übersetzt werden.

wrap3 wird in der TYPO3-Funktion vor insertData und nach dataWrap aufgerufen - es ist also völlig belanglos in welcher Reihenfolge die Variablen gesetzt werden, da diese eine feste Abarbeitungsreihenfolge besitzen.

10.dataWrap = DB:tt_news:{GPvar:tx_ttnews|tt_news}:title
10.wrap3 = {|}
10.insertData = 1

Umsetzung:

1. Zeile: DB:tt_news:{GPvar:tx_ttnews|tt_news}:title
2. Zeile: {DB:tt_news:19:pid}
3. Zeile: News-Titel der News mit der ID 19

Eingesetzt ist TYPO3 v4.04

Ich hoffe, ich kann hiermit einigen anderen Suchenden helfen ... Viel Spaß beim probieren 8-)

Gruß, Evil

sissi ·

Hey Evil,

ich hab das mal eben versucht zu uebertragen und zwar moechte ich den titel (sitzt in der spalte titel in der tabelle tt_news_cat) der jeweiligen kategorie aus der tt_news_cat-Datenbank auslesen...

page.10.marks.PAGETITLE = TEXT
page.10.marks.PAGETITLE.dataWrap = DB:tt_news_cat:{GPvar:tx_ttnews|cat}:title
page.10.marks.PAGETITLE.wrap3 = {|}
page.10.marks.PAGETITLE.insertData = 1

gibt aber nix aus....habsch irgendwo nen denkfehler?!

viele gruesse
sissi

EvilBMP ·
sissi schrieb

...und zwar moechte ich den titel (sitzt in der spalte titel in der tabelle tt_news_cat) der jeweiligen kategorie aus der tt_news_cat-Datenbank auslesen...gibt aber nix aus....habsch irgendwo nen denkfehler?!

Nein, einen Denkfehler hast du an sich nicht, aber meines Erachtens einen semantischen Fehler!

page.10.marks.PAGETITLE.dataWrap = DB:tt_news_cat:{GPvar:tx_ttnews|cat}:title

Ich denke hier liegt das Problem, denn wenn ich z.B. eine einzelne News "anklicke" um zur Detailansicht zu kommen, dann wird bei mir keine GET-Variable names tt_news[cat]=X mitgegeben. Mir ist jetzt gerade nicht ganz klar, ob man das irgendwo einstellen kann, dass die News Ext. genau das macht. Ebenso kannst du natürlich deine News Ext. auch per eigener Ext. erweitert haben, damit die SingleView-Links eben genau diesen zusätzlichen Parameter enthalten.

Gesetz dem Fall, dass du aber die Standardversion verwendest, dann würde ich mal behaupten, dass durch die fehlende GET-Variable der obige Wert einfach leer ist.

Ergebnis ist:

DB:tt_news_cat::title

und nicht z.B.:

DB:tt_news_cat:2:title

Was also nun?
--> Wir wissen ja, dass für die Einzelansicht einer News die ID der jeweiligen News mitgeben wird. Das heißt wir bekommen darüber aus der DB die ID der Newskategorie der jeweiligen News.

page.10.marks.PAGETITLE.dataWrap = DB:tt_news:{GPvar:tx_ttnews|tt_news}:category

Jetzt bekommst allerdings nur die ID der Newskategorie ausgegeben, aber nicht den Titel. Mit der ID können wir ja aber nun die tt_news_cat abfragen - im SQL Fachjargon wäre das jetzt eine verschachtelte SQL Abfrage.

Im Prinzip ebend dann so - aber gleich vorneweg, so geht es leider nicht - das packt dann TYPO3 doch noch nicht 😃

page.10.marks.PAGETITLE.dataWrap = DB:tt_news_cat:{DB:tt_news:{GPvar:tx_ttnews|tt_news}:category}:title

Man braucht also was Anderes um die verschachtelte Abfrage auszuführen. Hierbei hilft das RECORDS Objekt!

Es erlaubt ja via source Attribut die Angabe von einer bzw. mehreren kommaseparierten uid(s). Da dieses Attribut stdWrap zulässt ist unser Problem gelöst - denn dadurch können wir hier auch die dataWrap "Geschichte" anwenden.

Somit ergibt sich:

page.10.marks.PAGETITLE = RECORDS
page.10.marks.PAGETITLE {
  source.dataWrap = DB:tt_news:{GPvar:tx_ttnews|tt_news}:category
  source.wrap3 = {|}
  source.insertData = 1
  tables = tt_news_cat
  conf.tt_news_cat = TEXT
  conf.tt_news_cat.field = title
}

Also nochmal in short:
source: uid der Kategorie der angezeigten News
tables: Tabelle die im RECORDS Objekt abgefragt werden soll
conf: Ausgabe der jeweiligen Daten, hier der Titel der Newskategorie

In SQL-Sprache ergibt obiges also:

SELECT title FROM tt_news_cat WHERE uid = (SELECT category FROM tt_news WHERE uid = UID_VON_DER_AKTUELLEN_NEWS_VIA_GETVAR)

ps: es gibt keinen reinen "Code" BBCode ... also nicht vom Php: verwirren lassen

Grüße, Evil 8-)

thomas_swoon ·

Hi!
der link scheint leider nicht mehr zu gehen, kannst du die lösung bitte hier posten.
Ich brauche für eine condition die id der Kategorie in der single view, die wie schon oben geschrieben aber nicht als globale variable verfügbar ist.
das ganze wird noch erschwert, dass tt_news die einzelnen News-Einträge über eine eigene Tabelle tt_news_cat_mm mit der jeweiligen Kategorie verknüpft.

Mopps ·

Vielen Dank für die Beiträge.

Der Google Cache hilft manchmal weiter.

temp.newscat = CONTENT
temp.newscat {
  table = tt_news_cat
  select {
    pidInList = 46  # Sysfolder-ID der News
    andWhere {
      data = GPvar:tx_ttnews|cat
      wrap = uid=|
    }                                                   
  }
  renderObj = TEXT
  renderObj.field = title
}
rob-master ·

Hallo ihr,

ich wärme mal den alten Thread hier auf, weil ich gerade das Problem habe, den Kategorien-Titel auszulesen. Dazu habe ich einmal folgendes geschrieben, für die SingleView Ansicht:

[globalVar = GP:tx_ttnews|tt_news > 0]
temp.newscat = RECORDS
temp.newscat {
  source.dataWrap = DB:tt_news:{GPvar:tx_ttnews|tt_news}:category
  source.wrap3 = {|}
  source.insertData = 1
  tables = tt_news_cat
  conf.tt_news_cat = TEXT
  conf.tt_news_cat.field = title
}
page.10.marks.CONTENT.10 >
plugin.tt_news {
  templateFile = fileadmin/templates/tt_news.html
  code = SINGLE
  catTextMode = 1
}
page.10.marks.CONTENT.30.10 >
page.10.marks.CONTENT.30.20 = TEXT
page.10.marks.CONTENT.30.20.wrap = <div class="floatbox"><h1 class="frontpage">|</h1></div>
page.10.marks.CONTENT.30.20.value < temp.newscat.value
plugin.tt_news.listOrderBy = datetime desc
page.10.marks.CONTENT.30.30 < plugin.tt_news
page.10.marks.CONTENT.30.wrap = <div class="box">|</div>
[global]

Was ich allerdings für meinen Titel...

page.10.marks.CONTENT.30.20.value

...im FE dann sehe, ist dann aber überraschend, nämlich "NIX". Kann mir da jemand einmal helfen? 😢

Danke schon einmal für die Antworten!

rob-master ·

Oh mensch, wenn ich folgende Anweisung:

page.10.marks.CONTENT.30.20.value < temp.newscat.value

auf

page.10.marks.CONTENT.30.20.value < temp.newscat

Dann erhalte ich im Frontend nur "RECORDS". Warum wird mir denn nicht der Wert aus der DB ausgegeben, den ich zuvor in newscat auslese ?! #paralyzed#

fiedomedia ·
rob-master schrieb

Was ich allerdings für meinen Titel...

page.10.marks.CONTENT.30.20.value

...im FE dann sehe, ist dann aber überraschend, nämlich "NIX". Kann mir da jemand einmal helfen? 😢

Hallo,

dass dir nix angezeigt wird, liegt einfach da dran, dass du nirgends für "temp.newscat.value" einen Value hinterlegt hast, den du nun abfragen kannst...
Als Denkanstoss: Du müsstest wohl eher das Ergebnis aus der Abfrage in ein cObject speichern und dann dieses mit temp.newscat.cObject... abfragen.

Grüße Patrick

rob-master ·
king.darki schrieb

dass dir nix angezeigt wird, liegt einfach da dran, dass du nirgends für "temp.newscat.value" einen Value hinterlegt hast, den du nun abfragen kannst...
Als Denkanstoss: Du müsstest wohl eher das Ergebnis aus der Abfrage in ein cObject speichern und dann dieses mit temp.newscat.cObject... abfragen.

Danke für Deine Antwort, king.darki. Weise ich aber anstatt dem RECORD Objekt das cObject zu, dann ist das Ergebnis ähnlich. Die Wertübergabe habe ich einmal so versucht:

page.10.marks.CONTENT.30.20.value < temp.newscat.cObject.conf.tt_news_cat

Es sieht ja so aus, als wenn in dem temp.newscat keine Inhalte vorhanden sind?!

Hast du noch eine andere Idee, woran das liegen könnte?
Danke schon mal!

fiedomedia ·
rob-master schrieb

Danke für Deine Antwort, king.darki. Weise ich aber anstatt dem RECORD Objekt das cObject zu, dann ist das Ergebnis ähnlich. Die Wertübergabe habe ich einmal so versucht:

Hi,

ich hätte gemeint, dass du das cObject als Unterelement von RECORDS benutzt, aber laut TSRef ist conf bereits das cObject.

Ich hätte da mal eine Alternative für dich mit einem CONTENT-Objekt. Schau mal auf meine Website, da hab ich mal ein Typoscript-Snippet veröffentlicht, mit dem man ein CATMENU aus tt_news darstellen kann. Das hilft dir bestimmt weiter!

Grüße Patrick

rob-master ·
king.darki schrieb

Ich hätte da mal eine Alternative für dich mit einem CONTENT-Objekt. Schau mal auf meine Website, da hab ich mal ein Typoscript-Snippet veröffentlicht, mit dem man ein CATMENU aus tt_news darstellen kann. Das hilft dir bestimmt weiter!

Hmmm, ich habe nun mal dein Snippet bzw. die DB-Abfrage bei mir eingebaut:

temp.newscat = COA
temp.newscat.10 = CONTENT
temp.newscat.10 {
  table = tt_news_cat
  select {
    pidInList = 9
    orderBy = title
    parent_category=0 AND deleted=0 AND hidden=0
  }
}

und später dann:

page.10.marks.CONTENT.30.20.value < temp.newscat.10

Im FE sehe ich dann den Namen des Objekttyps nämlich "CONTENT". Das ist eigentlich auch meine ursprüngliches Ergebnis schon gewesen und weiter gekommen bin ich damit also nicht #paralyzed#
Trotzdem danke für Deine Idee. Wie kann ich denn bloß auf das Ergebnis der Abfrage zugreifen bzw. die Ergebnismenge einmal einsehen?!

fiedomedia ·
rob-master schrieb

Hmmm, ich habe nun mal dein Snippet bzw. die DB-Abfrage bei mir eingebaut:

Hi,

den wichtigsten Teil aus meinem Snippet hast du allerdings vergessen 😉 Nämlich das renderObj, denn hier sagst du, was du mit den Sachen aus CONTENT überhaupt machen willst.
Z. B probier mal folgendes:

temp.newscat = COA
temp.newscat.10 = CONTENT
temp.newscat.10 {
  table = tt_news_cat
  select {
    pidInList = 9
    orderBy = title
    parent_category=0 AND deleted=0 AND hidden=0
  }
  renderObj = TEXT
  renderObj {
    field = title
  }
}

und dann:

page.10.marks.CONTENT.30.20.value < temp.newscat.10.renderObj

Grüße Patrick

rob-master ·

Hey Patrick,

danke für Deine Denkanstöße, nur leider sehe ich auch mit diesem Snippet im FE nur den Namen des Objekttyps "TEXT" :o

fiedomedia ·
rob-master schrieb

danke für Deine Denkanstöße, nur leider sehe ich auch mit diesem Snippet im FE nur den Namen des Objekttyps "TEXT" :o

Okay, dann würd ich sagen try and error:

page.10.marks.CONTENT.30.20 < temp.newscat.10
# oder
page.10.marks.CONTENT.30.20 < temp.newscat.10.renderObj
# oder
page.10.marks.CONTENT.30.20 < temp.newscat.10.renderObj.field

Grüße Patrick

rob-master ·

grmpf

Die Varianten hatte ich auch schon getestet :-( Das Ergebnis: Je nachdem welche Objektstufe ich anspreche, wird der Name angezeigt. Bei dieser Anweisung:

page.10.marks.CONTENT.30.20 < temp.newscat.10.renderObj

wird TEXT angzeigt und bei

page.10.marks.CONTENT.30.20 < temp.newscat.10.renderObj.field

wird im Frontend nichts angezeigt ...
Die Select Abfrage könnte nun noch falsch sein, also habe ich einmal die Where Parameter auskommentiert:

  select {
    pidInList = 29
    orderBy = title
#    parent_category=0 AND deleted=0 AND hidden=0
  }

Auch da ist das Ergebnis unverändert.... #paralyzed#