[gelöst] Tabellenaufbau in der Datenbank
am 26.02.2013 - 11:20 Uhr in
Hallo,
ich habe Daten per Feed Import in Datenbank importiert. Mit Node Limit und entsprechenden Benutzerrechten sorge ich eig. dafür, dass jeder User nur seine eigenen Einträge sehen kann. Beim Admin alles chick. Bei den anderen Usern werden die Daten zwar importiert, tauchen danach aber nicht mehr auf. (Es geht um Kundedaten, jeder soll nur seine eigenen Kundendaten importieren und ansehen, änder, etc. können).
Also blickte ich in die Datenbank, die ich bis dato Drupal überlassen habe und kam gar nicht klar. Erwartet hätte ich eine Tabelle "Kunden" mit den entsprechenden Daten drin. Ich hätte nun geguckt bei welchem User die importierten Daten denn nun gelandet sind. Was ich fand war eine Sammlung einzelner Felder, einmal als field_revision_field_kunden_nachname und einmal als field_data_field_kunden_nachname . Für jede "Spalte" der Tabelle "Kunden" also eine eigene Tabelle. Habe ich beim Anlegen schon etwas falsch gemacht oder ist das so beabsichtigt?
Des Weiteren habe ich meine in diesen Tabellen nur die Daten gefunden die nicht im View Kunden angezeigt werden. Die Daten die ich manuell angelegt habe oder beim Admin importiert habe konnte ich nicht entdecken.
Kann mir jemand auf die Sprünge helfen, wie ich die Logik der DB entschlüsseln kann?
Vielen Dank, Sandra
- Anmelden oder Registrieren um Kommentare zu schreiben
Das hat schon seine
am 26.02.2013 - 12:47 Uhr
Das hat schon seine Richtigkeit mit diesen Zusatztabellen.
Entscheidend ist allerdings die Tabelle Node.
Ich gehe mal davon aus, daß beim Feed-Import neue Nodes erzeugt werden?
Dann sollte in der Datenbank bei jedem Node auch die ID des entsprechenden User für den die Daten importiert wurden, stehen.
Und hier steht auch der Typ. D.h. wenn Dein Inhaltstyp z.B. 'Kunden' heißt, dann stünde in der Daba Tabelle Node Spalte type 'kunden'
Die Tabellen field_revision_field_kunden_nachname und field_data_field_kunden_nachname sind dann jeweils über die Spalte entity_id mit der nid (ID des Nodes) verknüpft.
Diese Tabellen werden automatisch erstellt, wenn Du ein neues Feld beim Inhaltstyp hinzufügst.
LG Regina Oswald
-------------------------
Montviso - Internetdienstleistungen
http://www.montviso.de
UserID ist 0
am 26.02.2013 - 13:51 Uhr
Danke, jetzt blicke ich schon eher durch. Wie ich aber feststellen kann ist bei vielen Nodes die UserID 0.
Beim Import scheint also nicht die korrekte UserId zugeordnet zu werden. Ist das ein Einstellungsfehler?
Sollte ich per Tamper die UserId automatisch mitgeben?
UserID ist 0
am 26.02.2013 - 13:51 Uhr
Danke, jetzt blicke ich schon eher durch. Wie ich aber feststellen kann ist bei vielen Nodes die UserID 0.
Beim Import scheint also nicht die korrekte UserId zugeordnet zu werden. Ist das ein Einstellungsfehler?
Sollte ich per Tamper die UserId automatisch mitgeben?
Ja, ich habe vorhin bei mir
am 26.02.2013 - 14:21 Uhr
Ja, ich habe vorhin bei mir in der Datenbank nachgeschaut, weil ich auch Feeds importiere.
Das mache ich als Admin und es steht dann als User-ID 0 drinnen.
Das passiert offensichtlich beim Feeds-Import, wenn man nicht ausdrücklich eine User-ID angibt.
Allerdings werden die Nodes bei mir dennoch angezeigt, egal, ob ich als Admin, angemeldeter User oder Gast drauf gucke, weil ich keine Einschränkungen in den Rechten vorgenommen habe.
Du müßtest also im Feed noch irgendwie dafür sorgen, daß die UID von dem User, der die Feeds importiert (oder für den die Feeds importiert werden???) mit importiert wird.
WEnn Du ein Mapping für den Import erstellst, hast Du ja die Möglichkeit einen Wert aus Deinen Daten für das Feld Benutzer-ID zu liefern.
Wie das dann am Besten funktioniert (z.B. Tabelle in der CSV anlegen mit der User-ID) hängt natürlich davon ab, was Du genau machst.
Ach lese gerade, daß Du mit Tamper arbeitest.
Ja, das klingt gut.
Ich bin gar nicht informiert, ob Tamper ein Plugin für diese Aufgabe mitliefert.
Ich habe mir aus dem Netz ein Plugin besorgt, daß erlaubt mittels PHP einen Wert zu ermitteln, entweder aus der Datenbank oder eben die aktuelle User-ID des angemeldeten Users.
Ich denke, ich werde noch ein Tamperfeld einfügen, das mir überall den Default-Wert 1 für Admin einfügt als User-ID.
Jetzt habe ich auch noch was gelernt bei dem Thread ;-)
LG Regina Oswald
-------------------------
Montviso - Internetdienstleistungen
http://www.montviso.de
Keine Möglichkeit zusätzliches Feld einzufügen
am 27.02.2013 - 10:44 Uhr
Hast du das mit dem zusätzlichen Tamperfeld ausprobiert?
Ich finde bei Tamper keine Möglichkeit ein zusätzliches Feld zu definieren.
Das Feld muß im Mapping schon
am 27.02.2013 - 11:03 Uhr
Das Feld muß im Mapping schon bereit gestellt werden, damit Du es im Tamper bearbeiten kannst.
Ich habe für ähnliche Zwecke keine andere Lösung gefunden, als irgendeine Spalte zu verwenden, die anderweitig noch nicht im Einsatz ist.
Da kann dann drinnen stehen, was will, das wird mit der User-Id dann überschrieben.
Ich importiere Produktdaten von Affiliate-Partnern.
Da hats immer ein paar Felder, die anderweitig nicht gebraucht werden.
Z.B. steht die Lieferfrist drinnen, die mich nicht interssiert.
Das überschreibt ich dann mit einer intern vergebenen Händler-ID.
Keine Ahnung, ob Du Deine Import-Dateien vorher manipulieren kannst, damit es so ein zusätzliches Feld gibt?
LG Regina Oswald
-------------------------
Montviso - Internetdienstleistungen
http://www.montviso.de
So komme ich nicht weiter...
am 27.02.2013 - 12:16 Uhr
Ein zusätzliches Feld muss automatisch angelegt werden. Das heißt es muss auch importiert werden, wenn der User es nicht in seiner Tabelle angelegt hat.
Der User ist ein absoluter DAU und es war schon schwierig genug ihm zu erklären was eine CSV-Datei ist. Das scheint Tamper nicht zu können.
Das Modul Tamper_PHP hat mein komplettes System lahmgelegt und ich musste es per Hand in der DB wieder loswerden (wieder was gelernt - juhu!).
Momentan kommt mir langsam der Gedanke, dass ich etwas am Modul selbst ändern muss. Da ich immer wenn ich Daten importiere die UID brauche,
könnte ich das Modul doch so abwandeln, dass es immer die UID mitschickt ('uid' => $drupal_user_id). Allerdings habe ich noch nie ein Modul verändert und
Feeds ist dann gleich noch so umfangreich...
Ja, bei dem Tamper-PHP hatte
am 27.02.2013 - 12:37 Uhr
Ja, bei dem Tamper-PHP hatte ich auch erst ein Plugin, das nicht funktioniert hat.
Jetzt habe ich noch mal den Link rausgesucht, wo ich meines her habe:
http://drupal.org/node/1297968
Ich würde nicht das Feeds-Modul anfassen.
Da gibt es bessere Methoden.
Für Deinen Zweck mit Manipulation der Daten beim Import könnte Feeds Rules funktionieren.
Ich mache noch andere Manipulationen.
Da werden Produktdaten von einem bestimmten Händler alle deaktiviert, wenn sie nicht im aktuellen Importfile enthalten sind.
D.h. ich muß Nodes manipulieren, die n i c h t im eigentlichen Import-Vorgang manipuliert werden.
Dafür konnte ich die Rules nicht brauchen, sondern ich habe ein Minimodul mit Cron-Hook, wo nach dem Ereignis "Feed ist erfolgreich importiert" noch was passiert.
Für Deinen Zweck könnte es mit Rules klappen.
Ohhhjaaa...das ist sehr gewagt, User etwas importieren zu lassen, das mache ich n o c h nicht ;-)
LG Regina Oswald
-------------------------
Montviso - Internetdienstleistungen
http://www.montviso.de
Feeds Rules
am 27.02.2013 - 12:43 Uhr
Feeds Rules habe ich auch gerade gefunden...ich teste...ich berichte ;-)
Keine Dokumentation
am 28.02.2013 - 12:52 Uhr
Leider finde ich zu Feeds Rules keine geeignete Dokumentation :-(
Ja, das ging mir auch
am 01.03.2013 - 07:32 Uhr
Ja, das ging mir auch so.
Hast Du denn mit dem Rules Modul generell schon mal gearbeitet?
Das Prinzip ist ja immer ähnlich.
LG Regina Oswald
-------------------------
Montviso - Internetdienstleistungen
http://www.montviso.de
Keine Erfahrungen mit Rules
am 01.03.2013 - 09:38 Uhr
Nein, ich habe mit Rules noch gar nicht gearbeitet und auch die erklären sich nicht auf den ersten Blick.
Aber wenn das Prinzip ähnlich ist, dann halte ich Ausschau nach einer Doku für Rules.
Das Problem ist ja immer
am 01.03.2013 - 10:27 Uhr
Das Problem ist ja immer dieses:
1. Es gibt ein Ereignis
2. Dieses Ereignis hat eine Aktion zur Folge
3. Diese Aktion kann durch bestimmte Bedinungen eingeschränkt durchgeführt werden.
Das Besondere an Feeds Rules ist also nur, daß es bestimmte Ereingnisse hinzufügt, die für Feeds typisch sind.
(Ich hoffe, das stimmt so ;-))
Die tutorials für Drupal 6
http://drupal.org/node/1541578
dürften im Großen und Ganzen noch gelten.
U.a. damit habe ich mich reingearbeitet.
LG Regina Oswald
-------------------------
Montviso - Internetdienstleistungen
http://www.montviso.de
Auch Feeds Rules bietet keine Lösung
am 08.03.2013 - 15:49 Uhr
Hallo noch einmal,
Rules habe ich jetzt verstanden, allerdings finde ich dennoch keinen Zugang zu Feeds Rules.
Da es auch keine Dokumentation gibt, habe ich das wieder verworfen und nun mit dem Tamper PHP
angefangen. Was funktioniert hat, ist ich habe UID mit Benutzer-ID gemappt und dann per Tamper
als Default-Value eine BenutzerID angegeben - Klappt. Aber da mein Benutzer seine ID ja nicht kennt
wollte ich nun mit Tamper PHP die ID in das Feld schreiben: $field = $drupal_user_id;
Ich gehe davon aus, dass das einfach zu kurz gedacht ist als Feldmanipulation. Jedenfalls funktioniert
es nicht.
Es muss doch eine Lösung für diese Art Problem geben, immerhin ist es nichts ungewöhnliches, dass
man versucht Benutzerbezogene Daten zu importieren.
Ergänzung
am 08.03.2013 - 16:24 Uhr
Die Fehlermeldung ist: User is not authorized to create content type kunden (wenn ich als Default Value $drupal_user_id angebe)
und seltsamerweise importiert er die Datei beim zweiten mal dann, aber ohne eine UID zu setzen.
Hi, woher kommt denn die
am 08.03.2013 - 16:40 Uhr
Hi,
woher kommt denn die Variable $drupal_user_id?
Ich schätze, die mußt Du erst bekannt machen.
Und dann die User-ID mit print ins Feld schreiben.
Die Variable $field habe ich in dem Zusammenhang mit Tamper noch nicht verwendet.
Probier mal so:
<?php
global $user;
$drupal_user_id = $user->uid;
print $drupal_user_id;
?>
LG Regina Oswald
-------------------------
Montviso - Internetdienstleistungen
http://www.montviso.de
Bin davon ausgegangen...
am 08.03.2013 - 17:20 Uhr
...das $user immer global ist. Die Lösung ist:
global $user;
return $field = $user->uid;
Also Feeds Import --> Tamper --> Execute PHP Code und dann den Quellcode eintragen!
Vielen lieben Dank für die gemeinschaftliche Problemlösung! Ich habe sehr viel anderes nebenher dazugelernt.
Liebe Grüße Sandra
Ja super, ich auch
am 08.03.2013 - 17:29 Uhr
Ja super, ich auch ;-)
Welches Execute PHP hast Du denn inzwischen in Verwendung?
Klappt das jetzt Fehlerfrei?
LG Regina Oswald
-------------------------
Montviso - Internetdienstleistungen
http://www.montviso.de
Das Modul ist...
am 08.03.2013 - 17:35 Uhr
http://drupalmodules.com/module/feeds-tamper-php und kann dann beim Feeds Import Modul --> Tamper ausgewählt werden.
Oh danke. Das
am 08.03.2013 - 17:41 Uhr
Oh danke.
Das feeds-tamper-php-Modul gab's evt. noch nicht, als ich mich vor ein paar Monaten danach umgeschaut hatte.
Oder ich habe es übersehen.
Bei der Suche habe ich immer nur die Plugins gesehen.
LG Regina Oswald
-------------------------
Montviso - Internetdienstleistungen
http://www.montviso.de