Contextualen Filter an Rules Componente übergeben
Eingetragen von torfnase (1525)
am 17.03.2016 - 03:08 Uhr in
am 17.03.2016 - 03:08 Uhr in
Hallo zusammen,
ich habe folgendes Problem:
Eine View zeigt Benutzer an.
Mit VBO und Rules würde ich den Benutzern gerne eine E-Mail schicken. Das ist natürlich gar kein Problem, in VBO tauchen die Rules Componenten ja auf.
Nun muß ich an diese Rules Componente aber auch noch eine Node-ID übergeben, damit ich daraus URLs usw. machen kann.
Jetzt frage ich mich, wie bekomme ich die Node-ID (steht als arg(1) in der URL) oder auch in der View als contextual Filter an die Rules Componente übergaben ?
Das muß doch eigentlich ganz einfach sein, ich denke mal, ich sehe gerade mal den Wald vor lauter Bäumen nicht.
Gruß
Berthold
- Anmelden oder Registrieren um Kommentare zu schreiben
Wo ist das Problem?
am 17.03.2016 - 22:37 Uhr
Wenn du eine rules component vom typ 'action' als vbo-stapelbearbeitungsoperation in die view einhängst, brauchst du doch keine argumente oder token übergeben. in der component selbst ist die action mit dem token [user:mail] definiert und dann sendet die view auf alle ausgewählten datensätze an die mailadresse der aufgerufenen user.
meine sieht so aus:
{ "rules_mail_to_user_mail" : {
"LABEL" : "mail_to_user-mail",
"PLUGIN" : "action set",
"OWNER" : "rules",
"TAGS" : [ "test" ],
"REQUIRES" : [ "rules" ],
"USES VARIABLES" : { "user" : { "label" : "Benutzer", "type" : "user" } },
"ACTION SET" : [
{ "mail" : {
"to" : [ "user:mail" ],
"subject" : "Testmail aus component",
"message" : ";-) Testmessage bodytext blah …",
"language" : [ "user:language" ]
}
}
]
}
}
Argumente übergeben müsstest du nur, wenn du es umgekehrt machen, also in rules mit einer vbo-view entities aufrufen würdest.
– 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
nun ja, wie ich schon
am 17.03.2016 - 23:46 Uhr
nun ja, wie ich schon geschrieben haben:
In der Mail werden Links steht, die etwas mit diese ID zu tun haben, d.h. es ist unabdingbar, dort auch die ID aus der URL weiterzuverarbeiten.
Drupal Video-Tutorials
Es scheint für dieses Problem
am 19.03.2016 - 14:18 Uhr
Es scheint für dieses Problem wohl keine Lösung zu geben.
Auch ein längeres Gespräch mit Werrner (wla) hat nicht zu einer Lösung geführt.
Ich beschreibe die Problematik noch mal kurz:
Es gibt eine View, die Benutzer zeigt.
Den Benutzern soll per VBO und einer Rules Componente eine Mail geschickt werden.
(soweit ist das ganz einfach)
Nun kommt das Problem: Wenn ich die View aufrufe, dann hat die in der URL einen Parameter drin (von mir reingeschrieben).
Dieser Parameter muß in der Componente "verarbeitet" werden, daraus kann man z.B. einen Link auf eine Node machen, oder so etwas.
Diesen Parameter kann man offenbar nicht an die Rules Componente übergeben.
Sollte einer doch noch eine Lösung oder einen Lösungsansatz parat haben, würde ich mich freuen, das mal zu diskutieren.
Meine Lösung zu Zeit: Ich übertrage diese Parameter in der Session.
Gruß
Berthold
Drupal Video-Tutorials
Mit anderem Ansatz würde das evtl. gehen
am 20.03.2016 - 12:51 Uhr
Nicht wissend, ob das für deine Zwecke taugt:
Wenn du es umgekehrt machen könntest, also entities über eine vbo-view in rules aufrufst, kannst du argumente (nid o.ä.) übergeben.
Als Beispiel:
Action: node wurde geflaggt
Event: view übergibt die nid und ruft alle ref. nodes/user/whatever auf, loopt durch die liste und und tut irgendwas mit denen.
Wenn du den Anwendungsfall an sich mitteilst (noch ohne festzulegen, wie das umgesetzt wird), überlege ich gerne mit, wie man das machen könnte.
– 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
Hallo Marco, vielen Dank
am 20.03.2016 - 14:00 Uhr
Hallo Marco,
vielen Dank schon mal, dass du dich mit dem Thema beschäftigt hast.
Es gibt zunächst einmal keine Verbindung zwischen dem Parameter, den ich in der URL übergeben möchte und dem User, der benachrichtigt wird.
Es ist wie oben schon beschrieben ganz einfach ein Parameter, der übergeben wird.
Du kannst dir das so vorstellen (Anwendungsfall):
Es gibt User, die sich für bestimmte Nodes interessieren könnten (festgestellt aufgrund von Taxonomieübereinstimmungen).
Diese User möchte ich über diese Node "benachrichtigen" und möchte natürlich auch ganz konkret einen Link auf die entsprechende Node mit versenden.
Außerdem möchte ich auch noch bei der Node vermerken, welche User ich wann benachrichtigt habe und noch viele mehr.
Aber das ist ja kein Problem mehr, wenn ich die Node-ID habe.
Das ist auch schon alles.
Gruß Berthold
Drupal Video-Tutorials
damit ich es besser verstehe …
am 20.03.2016 - 17:18 Uhr
vielen Dank schon mal, dass du dich mit dem Thema beschäftigt hast.
gerne, wenn mir ein Thema Spaß macht.
Dieses benachrichtigen per e-mail soll wohl manuell durch dich (Redakteur o.ä.) erfolgen?
Wenn ja, könntest du doch gleich die vbo-action 'E-Mail senden' anstatt einer rules component nutzen und deine individuellen Links etc. per Hand reinschreiben, oder nicht?
Wenn es dagegen automatisiert passieren soll, wäre eine Umsatzung wie in meinem letzten Kommentar naheliegend.
Oder habe ich irgend was wesentliches noch nicht verstanden?
Beste Grüße
Marco
– 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
@E-Mail mit vbo
am 20.03.2016 - 23:55 Uhr
@E-Mail mit vbo verschicken
Das ist nicht gewünscht. Auf keinen Fall geht jemand her und verschickt E-Mails mit derr Hand. Das muss schon automatisch gehen.
@Wenn es dagegen automatisiert passieren soll, wäre eine Umsatzung wie in meinem letzten Kommentar naheliegend.
es gibt weder eine Node, die einen Flag hat, noch gibt es einen referenzierten User.
Ich schreibe dir mal ein Beispiel auf:
Es gibt eine Node, die hat einen Tag: Fußball.
Es gibt User, die haben auch einen Tag: Fußball.
Also nehme ich eine View und suche alle User, die den Tag Fußball haben. Diese sollen dann über die Node benachrichtigt werden, z.B. mit einem Link direkt auf die Node.
Ferner soll auch bei der Node eingetragen werden, welche User über diese Node wann benachrichtigt wurden.
Das ist auch schon alles. Der Aufruf der View enthält dann z.B. die Node-ID als Parameter, z.B. so " /node/passende-user/1448"
(Das ist nur ein sehr einfaches Beispiel, in Wirklichkeit ist der "Matching-Prozess" wesentlich komplexer, aber das tut ja hier nichts zur Sache.)
Es gibt keine Referenz zu einem User. Der Sachverhalt ist auch überhaupt nicht kompliziert, sondern eher trivial.
Das Problem läßt sich darauf reduzieren, dass man einen Parameter aus der URL (hier: die Node-ID: 1448), an die Rule Componente übergeben muss.
Dort kann man dann mit diesem Parameter sowohl einen Link zur Node zusammenbasteln, als auch in der Node vermerken, wer wann informiert worden ist.
Der User mit allen Daten steht in der Rules Componente zur Verfügung
Ich hätte auch gedacht, dass es eine Standardprozedur gibt, mit der man an eine Rule bzw. Rule Componente einen Parameter übergibt, aber die gibt es in der Tat nicht.
arg(0) enthält in der Regel das Wort "batch".
Gruß
Berthold
Drupal Video-Tutorials
Das mit dem flag war ja nur ein Beispiel
am 22.03.2016 - 14:01 Uhr
Letztendlich brauchst du zum Anstoßen der Rule ein Event.
Das kann ja auch ein cronjob sein und wäre wahrscheinlich das richtige für deinen Anwendungsfall.
Diese Rule aufzusetzen ist schon etwas kniffelig, aber grundsätzlich geht das.
Ein paar Tipps dazu:
1. Bei einer Cron Rule macht es keinen Sinn, conditions zu setzen, weil der cron keinen Inhalt / Benutzer als Event-kontext für die condition kennt. Wenn du also conditions setzen willst, dann am besten unter actions mit rules_conditional (Modul)
2. für deine Zwecke müsstest du am besten eine vbo-view bauen, die dann die anzumailenden user und die zu sendenden link parameter (nid's) kennt (oder, wenn das nicht geht eben mit 2 views). Dann die liste der benötigten entites über den view in der rule aufrufen. Für Views in einer cron-rule grundsätzlich beachten: in den Datenbankabfrageeinstellungen SQL-rewriting deaktivieren, weil ein cronjob als gast laufen kann und ihm vielleicht die benutzerrechte zum Datenaufruf fehlen, Deshalb aus Sicherheitsgründen keine views page mit aufrufbarem link verwenden, sondern die 'master' view oder einen block.
Beste Grüße
Marco
– 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
Hallo Marco, @cron Rule das
am 22.03.2016 - 15:17 Uhr
Hallo Marco,
@cron Rule
das ist überhaupt nicht notwendig.
Ich habe eine View und die hat einen VBO - Eintrag (Stapelverarbeitung). Dort kann ich User ankreuzen, die benachrichtigt werden.
VBO löst dann eine Rules Componente aus, die die Mails verschickt.
Das ist wirklich alles gar kein Problem.
Das Problem ist, dass man aus meiner Sicht keinen Paramter aus der URL an die Rules Componente übergeben kann.
Es geht ausschließlich darum, einen Parameter aus der URL an die Rules Componente zu übergeben.
Drupal Video-Tutorials
Hast du dieses Modul schon
am 25.03.2016 - 13:59 Uhr
Hast du dieses Modul schon getestet?: https://www.drupal.org/project/api_tokens
Vielleicht kommst du damit an die Parameter aus den Views ran?
Grüße Jenna