Rules und Loops
am 27.07.2015 - 08:17 Uhr in
Hallo zusammen,
kennt sich jemand ein bisschen mit den Loops des Rules Moduls aus? Ich wollte eine scheinbar recht einfache Sache damit machen, bin mir aber nicht sicher ob es geht.
Event: "Nach dem Speichern von neuem Inhalt of Typ..."
Aktion: "Send mail to all users of a role"
Innerhalb der Aktion soll aber geprüft werden welcher Taxonomie-Term dem Node gegeben wurde und dann erst die Rolle bestimmt an die die E-Mail geht, also ein Loop:
Event (wie gehabt): "Nach dem Speichern von neuem Inhalt of Typ..."
Aktion: Check welchen Term der Node hat und sende dann an eine bestimmte Rolle (Beispiel: Node hat Term "X" -> sende Mails an Rolle "X", Node hat Term "Y" -> sende Mails an Rolle "Y").
Zur Zeit mache ich es mit einer "Data comparison" als Condition:
Condition: Taxonomie-Term ist "X"
Aktion: Sende Mail an die Rolle "X"
Sehr einfach und funktioniert auch, allerdings benötige ich dann lauter einzelne Rules, für jeden Term eine. Das wollte ich vermeiden und EINE schlaue Rule bauen. Ich habe gelesen, dass man innerhalb eines Loops eine "List" abklappern kann auf deren Ergebnisse dann eine Aktion gesetzt wird. Diese "List" soll das Vokabular sein. Das Vokabular soll durchgecheckt werden bis der Term gefunden ist den der Node hat. Dann soll die Mail an die Rolle gehen die genauso heisst wie der Term ("X", "Y").
Nach meinen bisherigen Versuchen befürchte ich, dass man keine "List" aus den Terms eines Vokabulars bilden kann, dann wäre ich auf dem Holzweg. Kann das jemand bestätigen oder einen anderen Tip geben? Wenn nicht: ist es eigentlich ein Problem bei jedem Speichern eines Nodes 40 Rules untereinander abzuklappern oder ist das klar zu viel
Ich bin dankbar für jegliche Anregungen zu dieser Geschichte.
- Anmelden oder Registrieren um Kommentare zu schreiben
Du erstellst dir eine Views
am 27.07.2015 - 10:56 Uhr
Du erstellst dir eine Views Bulk Operations View. Das ist eine View mit dem Steuerelementfeld von VBO drin. Diese kannst du dann in deiner Rule laden und darauf die Loop laufen lassen.
Die View selbst zieht einfach die Benutzer, die mit dem entsprechenden Term belegt sind. Argumente können dabei als Tokens übergeben werden.
Viele Grüße
Roger
Drupalentwickler München
CMS Frameworker Drupal @ Reinblau
OK, das ist ein neuer Ansatz,
am 27.07.2015 - 11:12 Uhr
OK, das ist ein neuer Ansatz, danke schön. Das auszuprobieren wird eine Weile dauern, habe noch nichts gemacht mit den Views Bulk Operations.
Danke und schönen Gruß von mir
Belmondo
am 28.07.2015 - 08:50 Uhr
...allerdings benötige ich dann lauter einzelne Rules, für jeden Term eine. Das wollte ich vermeiden und EINE schlaue Rule bauen. ..
Ganz nett ist auch https://www.drupal.org/project/rules_conditional, um das in 1 Rule zu kriegen, allerdings musst du hier schon die Actions der einzelnen Bedingungen einzeln in die Rule schreiben.
Am elegantesten ist das von rogerpaff beschriebene Vorgehen mit einer vbo Rule, die dann eine Liste von user entities in Rules aufruft, um an deren Mailadressen zu senden (nicht an users einer Rolle). Das ist dann zu empfehlen, wenn du viele verschiedene terms hast, die dann nicht nur die nodes, sondern auch die user referenzieren, so dass die Rule die User Liste erzeugt, indem terms als kontextfilter dem view übergeben werden und der die entspr. Liste zurückgibt.
EDIT: Ich schrieb mail statt Rule.
– Grüße aus Franken –
"Eine Entscheidung ist dann eine gute Entscheidung, wenn Sie zu mehr Möglichkeiten führt.”
Heinz von Foerster (Kybernetiker)
www.bienlein-kommunikation.de
marco.b schrieb wenn du viele
am 27.07.2015 - 23:26 Uhr
wenn du viele verschiedene terms hast, die dann nicht nur die nodes, sondern auch die user referenzieren
und
Die View selbst zieht einfach die Benutzer, die mit dem entsprechenden Term belegt sind.
Leider ist es in dem Konzept nicht so, dass die Terms auch den Benutzern zugeordnet sind. Die Terms sind nur den Nodes zugeordnet und je nach Term muss ich (oder die Rule) sagen "jetzt sende Mail an alle Benutzer einer bestimmten Rolle" (die Rolle hat zwar den gleichen Namen aber das ist lediglich manuell so vergeben).
Auf eine Term-Reference in den Benutzerprofilen habe ich verzichtet. Ich hoffe die VBO-Idee scheidet damit nicht direkt aus?
Jetzt habe ich einiges auszutesten, danke euch
Es macht es nicht einfacher.
am 28.07.2015 - 08:35 Uhr
Es macht es nicht einfacher. Eventuell kannst du aber eine View bauen, die auf den Rollennamen filtert und wärst dann wieder im Rennen. ;)
Viele Grüße
Roger
Drupalentwickler München
CMS Frameworker Drupal @ Reinblau
Belmondo schrieb Leider ist
am 28.07.2015 - 09:01 Uhr
Leider ist es in dem Konzept nicht so, dass die Terms auch den Benutzern zugeordnet sind. ...
Das dachte ich mir, deshalb mein Hinweis.
Also musst du mit deiner Modellierung für jeden term eine Rolle anlegen. Deshalb die Einladung zum überdenken, gerade wenn du viele Terms hast: Ist dein Ansatz wirklich sinnvoll und gut? Werden hier Rollen vielleicht nur für eine Art Kategorisierung genommen, wo eine term Ref. o.ä. für die User besser wäre? Rollen lege ich in der Regel nur an, wenn ich sie für permissions brauche.
– Grüße aus Franken –
"Eine Entscheidung ist dann eine gute Entscheidung, wenn Sie zu mehr Möglichkeiten führt.”
Heinz von Foerster (Kybernetiker)
www.bienlein-kommunikation.de
rogerpfaff schrieb Es macht
am 28.07.2015 - 19:27 Uhr
Es macht es nicht einfacher. Eventuell kannst du aber eine View bauen, die auf den Rollennamen filtert und wärst dann wieder im Rennen. ;)
Du meinst eine View die mit einem contextual filter auf den Rollennamen filtert und das Ergebnis in Rules als Liste für den Loop verfügbar macht?
marco.b schrieb Also musst du
am 28.07.2015 - 19:32 Uhr
Also musst du mit deiner Modellierung für jeden term eine Rolle anlegen. Deshalb die Einladung zum überdenken, gerade wenn du viele Terms hast: Ist dein Ansatz wirklich sinnvoll und gut? Werden hier Rollen vielleicht nur für eine Art Kategorisierung genommen, wo eine term Ref. o.ä. für die User besser wäre? Rollen lege ich in der Regel nur an, wenn ich sie für permissions brauche.
Ich verteile mit dem Modul "tac_lite" Zugriffsrechte auf Nodes anhand der Terms. So lassen sich recht einfach für verschiedene Rollen Nodes unzugänglich machen und vor allem für bestimmte Rollen einfach ausblenden, z.B. aus Views-Blocks. Ich hatte dadurch den Vorteil mit wenigen Inhaltstypen auszukommen und mich nicht in Views mit komplizierten Contextual Filters zu verwurschteln. Bisher ist tatsächlich der einzige Nachteil der, dass ich jetzt vielleicht eine lange Liste von Rules habe die bei jedem Speichern eines Nodes dieses Inhaltstyps durchgeklappert wird. Die Liste der Terms im betreffenden Vokabular wird bei ca. 30 enden. Das geht schon alles noch, es ist mir eher eine Frage der Eleganz. Ausserdem muss bei der jetzigen Lösung immer mal wieder eine Rule hinzugefügt oder geändert werden und das würde ich gerne vermeiden.
Vielleicht hätte ich anstelle der Rollen auch mit der Term-Reference in den Benutzerprofilen zurechtkommen können, das muss ich dringend überprüfen.
Nochmals schönen Dank