Rules und Benutzerfelder
am 25.04.2015 - 11:17 Uhr in
Hallo zusammen,
folgendes habe ich vor und komme nicht ganz weiter. Ich habe einen Inhaltstyp "Aufgabe". Diese "Aufgabe" kann von angemeldeten Benutzern gelöst werden. Somit muss also eine Verbindung zwischen Node Aufgabe und User Aufgabe bestehen. Hat ein Benutzer die entsprechende Aufgabe gelöst, muss in seinem Benutzeraccount also ersichtlich sein, dass diese Aufgabe bereits gelöst ist. So nun habe ich das Problem, wenn ich eine neue Aufgabe anlege ein entsprechendes Feld im Benutzer angelegt werden muss. Ich dachte da an Rules. Ich kann als Event
"Nach dem Speichern von neuem Inhalt vom Typ Aufgabe"
auswählen was ja schonmal gut ist. nun bräuchte ich eine Aktion die bspw. heißt
"Benutzer -> neues Benutzerfeld anlegen (für alle Benutzer)"
das Feld müsste vom Typ boolean sein und am besten müsste der Wert des Feldes dann die die ID bzw. der Titel des Nodes sein. Somit würde eine Beziehung zwischen dem Benutzer und der Aufgabe sein. Erledigt der benutzer die Aufgabe kann der Wert auf "True" gesetzt werden. Ich hoffe ich habe das einigermaßen verständlich ausgedrückt. Jemand ne Idee wie ich das umsetzen kann?
Besten Dank schonmal.
- Anmelden oder Registrieren um Kommentare zu schreiben
ich bin mir nicht sicher, ob
am 25.04.2015 - 14:51 Uhr
ich bin mir nicht sicher, ob es funktioniert, denn ich habe es nicht getestet, aber es gibt ein Modul: Field-Rules.
Die zugegeben sehr kurze Beschreibung:
Provides Rules integration for creating fields, field instances, and node types.
deutet das zumindest an.
Vielleicht geht das ja.
Gruß
Berthold Lausch
Drupal Video-Tutorials
In Rules ein Entity-Feld füllen mit "Set a data value"
am 26.04.2015 - 09:04 Uhr
Ich glaube der Thread-Opener möchte nur ein Feld befüllen und keines anlegen. Das geht ohne weitere Module mit "Set a data value". Wenn das entsprechende Feld nicht direkt in der Auswahlliste erscheint (meistens bei manuell angelegten Felder der Fall), dann muss man es quasi der eigenen Rule erst "bekannt machen" mit der in diesem Zusammenhang etwas verwirrenden Bedingung/Condition "Entity has Field".
Aber falls man tatsächlich mal mit Rules, die Daten-Struktur von Entitäten ändern möchte, ist das Field-Rules ein interessanter Ansatz, den ich mal testen werde bei Gelegenheit. Aber, daß dies ein sehr selterne Fall ist sieht man allein schon an der der geringen Verbreitung von zur Zeit 344 Installationen gegenüber 274840 zur Zeit für Rules selbst gemeldeten Installationen (siehe jeweilige Modulseiten).
# DrupalCenter-Moderator # https://www.drupal.org/u/c-logemann
# CTO der Nodegard GmbH: Tech. Concepts | Security + Availability Operations / Wir unterstützen IT-Abteilungen, Agenturen, Freiberufler:innen
Hallo Carsten, es ist in der
am 26.04.2015 - 10:53 Uhr
Hallo Carsten,
es ist in der Tat so, dass ich ein neues Feld anlegen möchte. Sobald ich eben eine neue Aufgabe vom Inhaltstyp Aufgabe erstelle möchte ich ja nicht extra in die Benutzerprofile und ein neues Feld vom Typ Boolean anlegen. Das soll eben automatisch passieren. Ich werde mal Field Rules ausprobieren. Hat mich allerdings auch gewundert, dass das Modul erst 300 mal verwendet wird.
Verweis User > Inhaltstyp mit Entityreference
am 26.04.2015 - 14:08 Uhr
Das mit den einzelnen Boolean Fields für jede neue Aufgabe könnte das System schnell verkomplizieren.
Wenn einfach nur deutlich werden soll, daß ein User x eine bestimmte Aufgabe (mit Node ID y) erfüllt hat, macht vllt. ein multiples Entityreference-Feld Sinn. Darüber können User direkt mit den Aufgaben verknüpft werden, die diese gelöst haben. Das lässt sich ebenfalls mit Rules automatisieren.
# DrupalCenter-Moderator # https://www.drupal.org/u/c-logemann
# CTO der Nodegard GmbH: Tech. Concepts | Security + Availability Operations / Wir unterstützen IT-Abteilungen, Agenturen, Freiberufler:innen
Das hört sich doch ganz gut
am 26.04.2015 - 16:33 Uhr
Das hört sich doch ganz gut an! :) Ja, es soll einfach nur eine Beziehung zwischen Aufgabe und User bestehen sodass klar ist, ob Benutzer X die entsprechende Aufgabe gelöst hat. Dies müsste dann natürlich noch auswertbar sein wie z. B. User x hat Aufgabe 1, 2 und 4 gelöst usw. Entityreference kenne ich nicht.
-----------------------
Edit: Hab mir nun in der Aufgabe einen neues Feld mit dem Typ Entity Reference erstellt. Nun habe ich einer Aufgabe diesem Feld testweise 2 Benutzer hinzugefügt die diese Aufgabe also gelöst haben. Nun müsste ich allerdings eine Abfrage haben ob der angemeldete Benutzer in diesem Feld drinsteht. Wie kann ich denn per API eine Abfrage machen die heist "wenn angemeldete user ID im Feld exisitert dann gib true zurück"?
Mit "entity_metadata_wrapper('node', $node); komm ich irgendwie nicht so recht weiter.
Views und Rules
am 26.04.2015 - 22:54 Uhr
Zunächst mal kann man die Entityreferences sowohl in die eine als auch in die andere Richtung erstellen. Das hängt ganz von der jeweiligen Anforderung ab. Ich hatte das zunächst zwar so gedacht, daß beim User die Verbindung zum Node gespeichert wird, aber anders herum ist es wahrscheinlich sinnvoller.
Das Feld wir beim einem Entity-Load (damit auch user_load oder node_load) mit geladen und ist dann aus dem Objekt auslesbar, wenn man das im Code benötigt. Mit dem Devel Modul kann man sich das schön anzeigen lassen.
Wenn man z.B. in Views mehr als die Entity-ID möchte und z.B. den User-Namen von verknüpften User IDs, muss man eine Relation darauf anlegen. Views kann sogar entsprechende Rückverbindungen als Relation (im Hintergrund per Joins) auflösen kann im SInne, "zeige mir Nodes, die User mit ID x zeigen". Dies macht redundante Rückverlinkungen unnötig, wie es manche Lösungen vorsehen.
Über Views-Bulk-Operations z.B. sich die Aufgaben laden, wenn man z.B. die aktuelle User ID als Argument an Views übergibt. Aber auch Views kann man im Code verwenden oder man schreibt sich Datenbank-Abfragen, die über die Target-IDs die Quellen Entity-IDs suchen.
# DrupalCenter-Moderator # https://www.drupal.org/u/c-logemann
# CTO der Nodegard GmbH: Tech. Concepts | Security + Availability Operations / Wir unterstützen IT-Abteilungen, Agenturen, Freiberufler:innen