Zum Inhalt springen

EXT 'DB Integration" - fe_users.id automatisch ermitteln

Erstellt am 13. August 2009 · 12 Antworten · letzte Antwort am 18. September 2009

Tags: Frontend-Benutzer, Datenbank, Frage

saltletts ·

Hallo,

Ich will mir "behelfsmäßig" selbst eine Art Adressbuch für FE User basteln, weil ich in der Upload-Area absolut nichts finde, kaum zu glauben. Ich will lediglich einen Namen und eine Telefonnummer pro Datensatz speichern.

Zum Speichern hab ich tt_address angelegt, auch wenn ich nicht alle Standard-Datenfelder brauche. Die Idee ist, alle angelegten Datensätze auf einem Haufen zu speichern, nämlich in der Tabelle tt_address, und dann über die ID der User zu filtern (beim auslesen). Also muss ich irgendwie die User-ID in tt_address kriegen. Hab mir dafür die Spalte "pid" ausgesucht. Also fe_users.uid muss an tt_address.pid übergeben werden

Zum Anlegen und Auslesen der Datensätze will ich die Extension "DB Integration" nutzen. Prinzipiell würds auch hinhauen, wenn ich mit einem angelegten Query, nicht gleich auf zwei DB-Tabellen gleichzeitig rumwurschteln müsste. Nämlich tt_adress und fe_users.

Hier: http://www.webformat.com/uploads/media/DB_Integration.pdf
in dem Abschnitt "Typoscript markers" steht (ziemlich in den Mitte des Dokuments) das notwendige TS-Script, um die ID an einen Marker zu übergeben.

Typoscript markers
In the previous paragraphs we didn't speak about Typoscript Markers in our queries. Suppose for example that you need to
retrieve all the fields of the logged-in user. You have to construct a query like this:
SELECT * FROM fe_users WHERE uid=###TS_WFQBE_FEUSER###
Then you have to provide a way to manage the TS_WFQBE_FEUSER marker to the extension. You can do this via
Typoscript, by adding the following TS code in your template:
plugin.tx_wfqbe_pi1.customQuery.10 {
TS_WFQBE_FEUSER = TEXT
TS_WFQBE_FEUSER.data = TSFE:fe_user|user|uid
TS_WFQBE_FEUSER.overrideAlways = 1
}
where 10 is the uid of our query record. In this example we want to prevent the site users to hack our query (by providing a
different FEUSER parameter than the logged in user) so we set the overrideAlways option to 1. This means that the
substitution of the TS_WFQBE_FEUSER marker has to be substituted in any case. The other possibility is the
overrideIfEmpty option that can be used to set a default value in case of empty parameters.

Hier ein Screenshot von meinem Query:
http://www.bilder-hochladen.net/files/9evk-7-jpg.html
(in dem Screenshot ist unter "Field - View:" = "title" angegeben, dass hab ich korrigiert auf "uid", das stimmt aktuell).

Da hab ich den Marker drin, oder verstehe ich da was falsch? Oder wie müsste ich es anders machen, denn es funktioniert leider nicht.

Es werden Name und Telefon in die DB geschrieben, aber nicht die Spalte pid mit der User-ID gefüllt.

saltletts ·

Also unter Umständen muss ich für die Übergabe von fe_users.uid an tt_address.pid das letzte Datenfeld ändern, nämlich zu einem Hidden-Feld.

Wenn ich unter "value:" einen Wert eingebe, dann wird das an gewünschter Stelle eingefügt. Allerdings ist das ein statischer Wert, der dann immer dort enthalten wäre, bei jedem Eintrag. Also völlig Quark.

Aber was ist ganz unte mit dem Feld: "Get value from parameter:"

Siehe Screenshot: http://www.bilder-hochladen.net/files/9evk-8-jpg.html

Leider gibt es in der Beschreibung der Extension keinerlei Erklärungen zum Hidden-Feld. Hab es spasshalber mal mit: TSFE:fe_user|user|uid probiert, weil der Teil den man zur Extension ins Template einbinden soll:

plugin.tx_wfqbe_pi1.customQuery.10 {
  TS_WFQBE_FEUSER = TEXT
  TS_WFQBE_FEUSER.data = TSFE:fe_user|user|uid
  TS_WFQBE_FEUSER.overrideAlways = 1
}

den Paramter verwendet. Aber das erbringt auch keinen Inhalt. Ich bin jetzt leider nicht ganz so bewandt, was kämen denn da noch für Parameter in Frage, die die User-ID übergeben würden?

Ich komm einfach nicht weiter, obwohl ich die "Folgeschritte" mit Sicherheit hinbekomme. Aber solange das hier nicht klappt, brauch ich das Adressbuch nicht weiterentwickeln.... :-(

u040923 ·

Hallo saltletts,

ich bin seit Tagen am verzweifeln mit dem gleichen Problem.
Hast du schon eine Lösung gefunden?
Ich versuche eine Kundendatenbank zu erstellen und in meiner Abfrage sollen nur
Einträge des jeweils angemeldeten Benutzer angezeigt werden.
Doch irgendwie bekommt mein Marker keinen Wert.
Ich lese den Benutzernamen aus über TSFE:fe_user|user|username und bin der Anleitung gefolgt, habe die Werte für den Query geändert und den entsprechenden Marker in der Select-Anweisung gesetzt.

Ich frage mich, was mach ich da falsch?
Wenn ich den Marker entferne und den Benutzernamen per Hand reinschreibe klappt alles wunderbar, doch das ist nicht wirklich flexibel.

Bist du schon weiter mit deinem Problem?

Wäre sehr über etwas Hilfe erfreut.

saltletts ·

Beim SELECT isses eigentlich schon richtig, was da in der Anleitung steht. Damit hatte ich jetzt auch weniger Probleme. Ergebnis soll letztendlich so aussehen (nur ein Beispiel für den endgültig erzeugten Query):

SELECT tt_address.name AS Name, tt_address.country AS Land, tt_address.phone AS Netzvorwahl, tt_address.mobile AS Handynummer FROM tt_address WHERE tt_address.pid = ###TS_WFQBE_FEUSER###

Der Marker ###TS_WFQBE_FEUSER### ist schon richtig.

Das Problem besteht eher beim INSERT (mittels DB Integration). Da kam ich nicht weiter. Irgendwo in den weitverzweigten Ästen von Google, hab ich dann das hier gefunden:

return "'".$GLOBALS['TSFE']->fe_user->user['uid']."'";

Wenn man eine Query Table erzeugt, dann muss das in das Feld "PHP Code", wenn man den Input Type "PHP function" gewählt hat.

Und diesen Inhalt schreibt es dann in die Tabelle/Spalte, die man für diesen INSERT ausgewählt hat, also in meinem fall dann tt_address.pid

Das funktioniert. Da steht dann wirklich die User-ID von dem drin, der den Eintrag erzeugt.

Warum SOWAS nicht in der Extension-Anleitung steht, ist mir allerdings schleierhaft. Man kanns einem auch kompliziert gestalten...

u040923 ·

Danke für die schnelle Antwort,

aber das ist genau das Problem, bei meinem SELECT über den Wizard scheint gar kein Wert anzukommen.
Hier vielleicht nochmal zum besseren Verständnis meine SELECT Anweisung.

Select akz From kunden Where kname = ###TS_WFQBE_FEUSER###

Hier sollen eben nur die akz's von dem angemeldetem User ausgegeben werden.

Wenn ich jetzt anstelle des Markers einen festen Wert(Name des Kunden) eintrage funktioniert die Anweisung.
Kann ich einen Fehler gemacht haben beim übergeben des Wertes.
Ich habe eine ext. Template auf der dieser Seite erstellt und folgendes uner Konfiguration eingetragen.

plugin.tx_wfqbe_pi1.customQuery.16 {
TS_WFQBE_FEUSER = TEXT
TS_WFQBE_FEUSER.data = TSFE:fe_user|user|username
TS_WFQBE_FEUSER.overrideAlways = 1
}

Ich bin eigentlich der Meinung ich hätte alles beachtet.

saltletts ·

Dein Script da ist prinzipiell auch richtig. Du musst nur schauen, dass die ID (laut deinem TS ist es die 16) mit der angelegten Query Table übereinstimmt.

Achja, und was ergibt kname für einen Wert? Das ist doch ein Name ja?

###TS_WFQBE_FEUSER### ist ein Integer-Wert (eine Zahl/ID) nämlich die ID des aktuellen Fe Users, als musst du diesen Wert wiederrum mit einer Zahl abgleichen, nicht mit einem Namen. Du musst das in der DB-Tabelle mit der Spalte abgleichen, die die User-ID enthält.

Die Frage ist nur, ob du diese User ID dort überhaupt anlegst....

u040923 ·

Die ID ist die des angelegten Querys.
Wenn ich doch aber im TS den Wert des Usernamen in den Marker ###TS_WFQBE_FEUSER### übergebe, dann sollte das doch ein varchar Wert sein,
oder irre ich da?

Ich hab doch mit TS_WFQBE_FEUSER.data = TSFE:fe_user|user|username nicht die ID übergeben.

Der Marker hält doch Platz für etwas beliebiges,oder ?

saltletts ·
u040923 schrieb

Die ID ist die des angelegten Querys.
Wenn ich doch aber im TS den Wert des Usernamen in den Marker ###TS_WFQBE_FEUSER### übergebe, dann sollte das doch ein varchar Wert sein,
oder irre ich da?

Ich hab doch mit TS_WFQBE_FEUSER.data = TSFE:fe_user|user|username nicht die ID übergeben.

Der Marker hält doch Platz für etwas beliebiges,oder ?

Sorry, das war MEIN Fehler. Da ich anfangs des Threads immer von der User-ID ausgegangen bin, hab ich es übersehen, dass du den Usernamen abgreifst.

Hmm..... also da gehen mir jetzt dann doch leider die Ideen aus. Weil so im ersten Moment scheinst du soweit alles richtig zu machen... :-/

saltletts ·

Bist du sicher, dass dein:

plugin.tx_wfqbe_pi1.customQuery.16 {
....

auch wirklich angesprochen wird, dort wo es benötigt wird??

Ich leg solche Sachen immer in einem extra Template in einem Systemordner an, und includiere es dort, wo ich es brauche.

Falls du es auch so machst, wird es evtl. gar nicht verwendet?

Sorry, ansonsten kann ich dir leider auch nicht weiterhelfen.... #paralyzed#

u040923 ·

Ich bin mir sicher, dass die query-id richtig ist.
Hier nochmal alles was ich gemacht habe, vielleicht hab ich was an die falsche stelle gesetzt.

TS eingebaut auf der Seite wo ich es brauche in einem ext. Template unter Konfiguration.

plugin.tx_wfqbe_pi1.customQuery.16 {
TS_WFQBE_FEUSER = TEXT
TS_WFQBE_FEUSER.data = TSFE:fe_user|user|username
TS_WFQBE_FEUSER.overrideAlways = 1
}

Der query, mit der ID 16, liegt auf der gleichen Seite wo das ext. Template angelegt wurde.
In diesem query wird der Marker ###TS_WFQBE_FEUSER### benutzt.
Die Ausgabe des query findet auch auf dieser Seite statt.

Hab ich vielleicht was falsch gesetzt.
Kannst du mir beschreiben wie du das gemacht hast.
Das wäre sehr nett wenn du dir die Zeit nehmen würdest.

Danke schon mal.

saltletts ·
u040923 schrieb

Hab ich vielleicht was falsch gesetzt.
Kannst du mir beschreiben wie du das gemacht hast.
Das wäre sehr nett wenn du dir die Zeit nehmen würdest.

Ich kann dir nicht mehr beschreiben, als ich es schon gemacht habe.

Ist die "16" vielleicht fälschlicherweise die "Seiten-ID", anstatt der ID für den Query?

u040923 ·

Hi,

bin gerade aus dem Urlaub zurück. 8-)
Ne es ist wirklich die ID des Querys.
Nochmal für mich zum Verständnis:
Der Code im TS wird ausgeführt wenn die Seite aufgerufen wird.
Die Select-Anweisung wird doch durchgeführt sobald das Formular
angezeigt wird, sonst würde man ja kein Ergebnis sehen.
Geschied das auch in dieser Reihenfolge?

Also ist mein Problem ja nur, dass der Marker leer ist.
Aber WARUM????
Kann es an der Typo oder PHP Version liegen?

Gruß #angry#

saltletts ·
u040923 schrieb

Hab ich vielleicht was falsch gesetzt.
Kannst du mir beschreiben wie du das gemacht hast.
Das wäre sehr nett wenn du dir die Zeit nehmen würdest.

Ich kann dir nicht weiterhelfen. Es sieht im Moment so aus, als machst du alles richtig.

Im DB Integration Plugin, muss der Query halt im Feld "Query record" ausgewählt sein, dann sollte es völlig wurscht sein, wo er angelegt ist.

Persönlich halt ich viel von Ordnung, ich hab oberhalb der eigentlichen Seitenstruktur meine ganzen Systemordner, in denen alles gesammelt rein kommt, dann muss man in der Seitenstruktur die ganzen Sachen nicht suchen, wenn man dran bastelt.

Also wenn du im Root-Template unter "Include static (from extensions):" das DB Integration Plugin (wfqbe) eingebunden hast, keine Ahnung, woran es dann noch liegt, sorry.... #paralyzed#