[gelöst]Rules: User-Reference-Feld füllen?

am 29.08.2010 - 14:44 Uhr in
Hallo,
ich binde auf den User-Profilen über Views das Add-Form des Inhaltstypen "Gästebuch" ein damit Besucher Einträge hinterlassen können.
Das Add-Form besteht aus dem Titel, dem Text und einem (nicht sichtbarem) User-Reference-Field (Auto-Complete).
Wenn ein Besucher nun einen Gästebucheintrag vornimmt, soll, beim speichern, das User-Reference-Field gefüllt werden und zwar mit dem Namen des User-Profiles-Autors/Inhabers.
Ich habe versucht das Problem mit Rules zu lösen allerdings schaffe ich das nicht.
Als Auslöser verwende ich "Inhalt soll gespeichert werden"
Bedingung: Inhalt hat den Typ "Gästebuch"
Aktion: Ein CCK Feld füllen"
Dort gebe ich als PHP-Code ein
return array(
0 => array('uid' => $user->uid),
);
Ich bekomme so allerdings keine Ausgabe (da fehlt mir wieder das PHP-Wissen) - außerdem denke ich, ist das sowieso der falsche Weg denn man müsste Rules ja vorher beibringen, dass Profile zu laden und nachzuschauen wer der Inhaber/Autor ist und dann dieses Namen einzusetzen.
Ich weiß allerdings nicht wie ich Rules dazu bewegen kann - das müsste man doch sicherlich auch über PHP-Code machen oder?
Könnte mir da vielleicht jemand von Euch auf die Sprünge helfen - ich stochere hier leider wieder nur im Nebel herum.
Danke und schöne Grüße
Matthias
- Anmelden oder Registrieren um Kommentare zu schreiben
Hallo, ich konnte das Problem
am 30.08.2010 - 13:07 Uhr
Hallo,
ich konnte das Problem leider immer noch nicht lösen.
Mit dem Code
<?php
global $user;
profile_load_profile($account);
print $account->name;
?>
kann man ja den Author des Profiles laden(wenn ich mich nicht irre). Ich dachte nun, dass ich diesen Code in Rules verwenden kann um das User-Reference-Feld zu füllen.
Ereignis: Inhalt soll gespeichert werden / Nach dem Speichern von neuem Inhalt
Bedingung: Inhalt hat den Typ "Gästebuch"
Aktion: Benutzerkonto laden (dort gebe ich unter Benutzer-ID:
<?php global $user; profile_load_profile($account); echo $account->name; ?>
ein)Aktion: Ein CCK-Feld füllen
return array( 0 => array('uid' => $user_loaded->uid),);
Wenn ich nun einen Gästebucheintrag vornehme, bekomm eich leider nur eine Fehlermeldung.
user warning: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 query: SELECT * FROM users u WHERE in
Ich habe dann versucht - anstatt "Benutzerkonto laden" die Aktion "Benutzerdefinierten PHP-Code ausführen" mit
global $user;
profile_load_profile($account);
print $account->name;
zu verwenden und anschließend wieder "Ein CCK-Feld füllen" aber das gibt zwar keine Fehlermeldung aber leider auch überhaupt keine Ausgabe.
Ich bin mit meinem Latein leider am Ende und bräuchte mal Hilfe. Kann von Euch zufällig jemand erkennen wo der Fehler liegt?
Ich bedanke mich schonmal im Vorraus.
Schöne Grüße Matthias
Drupal rockt!!!
Ziel?
am 30.08.2010 - 13:40 Uhr
Ich verstehe noch nicht so ganz, was das Ziel ist, dass mit der Rule erreicht werden soll. Meine Glaskugel sagt mir, dass du ein Gästebuchformular hast, dass auf der Profilseite eines Benutzers angezeigt werden soll. Du willst das Gästebuch dann dem Benutzer zuordnen.
Wenn z.B. der Benutzer mit der ID 100 auf das Profil des Benutzers mit der ID 200 schaut, dann soll im Gästebuch eingetragen werden, dass der Eintrag zu Benutzer 200 gehört und von Benutzer 100 erstellt wurde, ja? Da die Benutzer-ID des Profils ja Bestandteil der URL könnte dir http://drupal.org/project/prepopulate weiterhelfen. Oder du nimmst als Vorgabewert ein Argument aus der URL.Das kannst mit dem Befehl arg() machen. Wenn das Profil also wirklich das Benutzerprofil auf user/200 ist, dann wäre die 200 arg(1). Der PHP Code im Standardwert des PHP Feldes müsste so aussehen (ungetestet):
<?php
return array(
0 => array('uid' => arg(1)),
);
?>
Hallo McGo, ja - richtig -
am 30.08.2010 - 14:16 Uhr
Hallo McGo,
ja - richtig - über den Namen des User-Reference-Feldes soll die Zuordnung der Gästebucheinträge zu den Profilen erfolgen. Ich nutze kein fertiges Gästebuch-Modul sondern verwende einen eigenen Inhaltstypen - ohne "Profil/Namenszuordnung" kann ich die Nodes ja nicht per View "filtern" und dem jeweiligen profil zuordnen.
Ich habe nun
return array(
0 => array('uid' => arg(1)),
);
unter "Ein CCK-Feld füllen" eingetragen und es funktioniert auf Anhieb. Dass das nur an arg(1) liegt, war mir nicht bewußt - ich hatte alles mögliche ausprobiert - von "Content Profile laden" über "Benutzer laden" und eigenen PHP-Code ausführen gepaart mit stundenlangem Suchen und Lesen auf drupal.org ...
Ich bin echt frustriert dass ich hier soviel Zeit verbrate und dann liegt das "nur" an arg(1).
Ich dachte den Usernamen gibt man mit $account->name aus - warum verwendet man hier arg(1)? Ich dachte dahinter verbirgt sich die ID als eine Zahl/Nummer - warum gibt der Aufruf von arg(1) den Namen aus?
Warum wird manchmal
<?php
global $user;
profile_load_profile($account);
print $account->name;
?>
verwenden und hier
'uid' => arg(1)
?Wärst Du so nett und könntest dazu noch was sagen? Seit gestern arbeite ich php-einfach.de durch und baue langsam ein Grundverständnis bzgl. PHP auf aber warum bei Drupal so viel verschiedenen Variablen (bzgl. des Usernamens) verwendet werden, ist mir echt zu hoch und vollkommen unverständlich.
Ich danke Dir vielmals für die Hilfe - das hätte ich alleine nie hinbekommen.
Schöne Grüße Matthias
Drupal rockt!!!
arg = url
am 30.08.2010 - 14:31 Uhr
Die Funktion arg() liefert die die Argumente aus der URL. Dabei beginnt arg(0) bei dem ersten Eintrag. Für die URL node/1/edit wäre das also arg(0) = node, arg(1) = 1 und arg(2) = edit. Da die URL des Users in deinem Fall user/[uid] ist, also z.B. user/100 bekommst du in arg(1) die uid des Users dessen Profil du aufrufst. Im user reference Feld wird die uid erwartet. (das steht auch in der Beschreibung zum Feld).
Die Variable $account ist nicht definiert. Die einzige im globalen Kontext verfügbare Variabel ist $user und entspricht dem aktuellen Benutzer.