Zum Inhalt springen

Beliebige Variablen in TypoScript where-Klausel

Erstellt am 2. Dezember 2010 · 3 Antworten · letzte Antwort am 4. Januar 2011

Tags: Datenbank, Frage

n0v1ce ·

Hallo TYPO3-Gemeinde,

ich stehe gerade vor dem Problem eine Verfügbarkeitsanzeige in eine TYPO3-Seite zu integrieren. Anhand der Artikelnummer soll eine Datenbankabfrage durchgeführt und die Rückgabe (die Anzahl der lagernden Artikel) in ein Feld geschrieben werden.

Zur Eingabe der Artikelnummer habe ich ein TemplaVoila FCE angelegt. Im FCE ist ein Feld namens "field_partno_value" enthalten, in das die Redakteure die Artikelnummer eintragen. Abhängig vom eingetragenen Wert soll eine Datenbankabfrage durchgeführt werden deren Ergebnis in das Feld "field_partno_availability" eingetragen bzw. dem TS-Object "lib.partno_availability" übergeben werden soll.

Die benötigte Tabelle "user_matverf" wurde mit der Extension kb_kickstarter angelegt und durch ein externes Script gefüllt. Der direkte Zugriff aus TS heraus ist damit möglich. Die Tabelle enthält u.a. die Spalten "uid", "pid", "partno", "availability".

Die Frage ist nun, wie es möglich ist die Artikelnummer in der Where-Klausel der Select-Anweisung zu berücksichtigen 😉

Bisher schaut der Code folgendermaßen aus:

tmpqry = CONTENT
tmpqry {
  table = user_matverf
  select {
    pidInList = 137
    selectFields = uid, pid, partno, availability
    #Hier soll der Wert aus "field_partno_value" berücksichtigt werden
    where = partno = 1233321
  }
  renderObj = COA
  renderObj.10 = TEXT
  renderObj.10 {
    field = availability
  }
}

lib.partno_availability < tmpqry

Mit einer fest vergebenen Artikelnummer (1233321) funktioniert das ganze. Auch die Verwendung einer vorher definierten Konstanten funktioniert (where = partno = {$artno}). Mit

select.andWhere.dataWrap = partno={GPvar:meineArtNr}

lassen sich die Get-Parameter verwenden. Gibt es ein ähnliches Konstrukt für beliebige Variablen/Felder?

Leider sind bisher alle meine Versuche gescheitert in der Where-Klausel den variablen Wert des Feldes "field_partno_value" zu berücksichtigen. Ich bin über jedem Tipp dankbar.

Gruß,
Christopher

n0v1ce ·

Hallo zusammen,

da sich immer noch keine Lösung für das Problem gefunden hat, möchte ich jetzt eine Extension dafür schreiben
Nun besteht das Problem darin, aus der Extension heraus auf die Artikelnummer aus dem FCE-Feld zuzugreifen. Wie kann im Extension-Code ein Feld eines Flexiblen Content-Elements angesprochen werden bzw. dessen Wert ausgelesen werden?

Über Anregungen würde ich mich freuen.

Gruß,
Christopher

Unbekannter Benutzer ·

Wenn du schon eine Extension schreibst, dann würde ich die FCE-Felder umbauen in Flexform-Felder deines Plugins.

Generell dürfte es aber auch ohne Extension gehen, nur wichtig wäre zu wissen, wie dein Scope ist, d.h. wo du dieses Typoscript einsetzen willst. Wenn das innerhalb des FCE benutzt wird (egal für welches Feld), dann dürfte

andWhere.dataWrap = partno={field:field_partno_value}

funktionieren. Ich vermute sogar, dass es funktioniert, wenn du einen TS Object Path gemappt hast und innerhalb dieses Objects so versuchst darauf zuzugreifen, dafür aber keine Garantie...

Grüße
Christian

n0v1ce ·

Hallo Kitsunet,

vielen Dank für den Hinweis. Auf die Idee den Code direkt im FCE zu hinterlegen bin ich noch gar nicht gekommen. Prinzipiell ist es egal an welcher Stelle die Datenbankabfrage durchgeführt wird. Als "Input" dafür wird lediglich die Artikelnummer aus dem FCE-Feld benötigt.

Meine bisherigen Versuche mit einem gemappten TS Object Path waren nicht erfolgreich.

Werde nun probieren das TypoScript im FCE zu hinterlegen.

Gruß,
Christopher

Update: Der Code funktioniert nun sowohl direkt im FCE als auch im Template der Seite. Das Präfix "field:" war für mich neu. Danke Kitsunet!

Das Skript schaut nun folgendermaßen aus:

tmpqry = CONTENT
tmpqry {
  table = user_matverf
  select {
    pidInList = 137
    selectFields = uid, pid, partno, availability
    where = (hidden = 0)
    where = (deleted = 0)
    andWhere.dataWrap = (partno LIKE '{field:field_partno_value}')
    max = 1
  }
  renderObj = COA
  renderObj.10 = TEXT
  renderObj.10 {
    field = availability
  }
}

lib.partno_dbquery < tmpqry

lib.partno_dbquery ist dabei der TS Object Path eines per TemplaVoila gemappten Platzhalters.