Rules: Feld in Abhängigkeit eines anderen füllen
am 04.06.2011 - 14:18 Uhr in
Hallo Drupalfans,
Beispiel aus der Praxis: In meiner Drupalseite gibt es einen Inhaltstyp, mit dem die User Fotos hochladen können. Dazu gibt es ein Lizenzfeld, in dem die User per Drop-Down-Menü eine Lizenz für ihr Foto aussuchen können. Soweit so gut. Da es aber für die meisten Benutzer (z. B. bei Listenansichten) zunächst uninteressant ist, unter welcher Lizenz genau das Foto veröffentlich ist, sondern erst mal interessant ist, was sie mit dem Bild machen dürfen, gibt es ein weiteres Feld (Taxonomie), das die Berechtigungen für das Foto speichert. Diese Berechtigungen sind z. B. "Kommerzielle Nutzung" und "Bearbeitung erlaubt". Dieses zweite Feld (Name: quick-permissions) will ich nun abhängig vom ersten automatisch füllen lassen.
Ich habe dazu mit dem Rules-Modul eine Rule erstellt. Diese wird bereits korrekt bei der Bearbeitung und Erstellung dieses Foto-Nodetyps aufgerufen (Events und Conditions sind also bereits ok). Probleme habe ich allerdings bei der "Action" der Rule. Ich benutze die Aktion "Set a data value". Hier tritt bereits das Problem auf, dass ich nicht weiß, welche Daten ich manupulieren soll. Ich habe node:field-quick-permissions:0 ausgewählt, es existieren aber noch dieselben Felder mit der Endung 1,2,3 - den Unterschied habe ich noch nicht durchschaut (das Feld hat jedenfalls als Limit unbegrenzt). Wenn ich das auswähle, kann ich sogar die richtigen Taxonomie-Terme zum beschreiben des Feldes auswählen, es sieht also zunächst gut aus. Es passieren dann aber folgende (ungewollte) Dinge:
1. Der Wert wird nur dann gespeichert, wenn beim Editieren/Erstellen des Foto-Nodes das Quick-Permission-Feld nicht ausgefüllt wird. Ich will aber, dass eventuelle Usereingaben überschrieben werden. Die Aktion wird übrigens trotzdem ausgeführt, das habe ich verifiziert, indem ich einfach als zusätzliche Aktion jedes Mal eine Textmeldung ausgeben lasse.
[[2. Wenn ich mehrere solcher Set-Data-Value-Aktionen durchführe, enthält das Feld nur Werte der letzten Aktion. Set-Data-Value arbeitet also überschreibend, was für mich ok wäre, wenn ich mehrere Terme in einer einzelnen Aktion angeben könnte. Kann man aber nicht.]] Dieses Fehlverhalten konnte ich durch ein Upgrade auf die dev-Version beheben. Dort ist es möglich, mehrere Werte auszuwählen.
3. Die Speicherung der Werte ist nicht ganz korrekt. Die Werte werden zwar im Node korrekt angezeigt, sind also dort gespeichtert; beim erneuten Editieren des Nodes wird das Feld aber als nicht gesetzt angezeigt, enthält also keine Werte.
Ich benutze Drupal 7.2 und Rules 7.x-2.0-beta1. Über eine Hilfestellung würde ich mir sehr freuen!
- Anmelden oder Registrieren um Kommentare zu schreiben
Wenn du noch ein wenig Zeit
am 05.06.2011 - 12:00 Uhr
Wenn du noch ein wenig Zeit hättest, ist auf Dauer vermutlich http://drupal.org/project/conditional_fields genau das Modul, das für solche Anforderungen am geeigneten ist. Im Moment leider noch in Dev (wie so vieles) für Drupal 7.
Drupal maßgeschneidert.