[gelöst]Node update simulieren
Eingetragen von dennis605 (138)
am 07.12.2010 - 04:18 Uhr in
am 07.12.2010 - 04:18 Uhr in
Hallo liebe Drupla,
mal folgende Frage:
Ich habe 2 Inhaltstypen:
1. Artikel
2. Bewertung
Jetzt möchte ich, wenn eine Bewertung abgeben wurde, ein Node update bei Artikel gemacht wird, damit Benutzer über Watcher informiert werden.
Ich möchte aber, daß Artikel von Bewertung beeinflusst wird. Den "field_link" kenn ich, aber wie kann ich quasi ein Node update bei Artikel simulieren?
Vielen Dank
Dennis605
- Anmelden oder Registrieren um Kommentare zu schreiben
Fragen
am 07.12.2010 - 09:13 Uhr
Hallo.
Magst Du die Frage nochmal neu und verständlich formulieren?
Danke,
Stefan
PS: evtl. [do:rules Rules]
Gerne, sorry wenn es
am 07.12.2010 - 13:09 Uhr
Gerne, sorry wenn es unverständlich war.
Ich habe 2 Inhaltstypen : Bewertungen und Artikel.
Jetzt sollen Besucher Bewertungen für Artikel abgeben können.
Mittels "Watcher" lasse ich dann die Abonenten über dieses neue Ereignis informieren.
Mein Wunsch ist es, daß wenn eine neue Bewertung abgeben wurde, eine Veränderung im bewerteten Artikel statt findet, damit Watcher diese Veränderung (update) registiert, und eine Benachrichtigung abschickt.
Ich schreib es mal als Pseudo-Code:
function helper_module_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) {
$temp = $node;
$temp_ref = node_load($node->reviewed_nid);
$time = time();
switch ($op) {
case 'update':
if($node->type == 'review') {
//dpm($node);
$node = node_load($temp_ref->nid);
//
$node->changed = time(); ------------------------- Ich möchte ich in dem bewerteten Artikel eine Veränderung durchführen, damit Watcher diese registriert
node_save($node);
break;
}
Hoffe jetzt wird es klarer.
Danke für dein Feedback. Wusste nicht, daß es so unverständlich formuliert war.
dennis605
Warum verwendest du nicht
am 07.12.2010 - 13:17 Uhr
Warum verwendest du nicht Fivestars?
Rules
am 07.12.2010 - 13:19 Uhr
Wie ich bereits vermutet habe, lässt sich hier etwas mit [do:rules Rules] machen.
Beim Update einer Node lässt Du über Rules ("execute custom PHP code")
_watcher_email_notify_node_update($node)
ausführen, wodurch die Benachrichtigung versendet werden sollte.hth,
Stefan
Ich würde das PS. von Stefan
am 07.12.2010 - 13:22 Uhr
Ich würde das PS. von Stefan beachten. Könnte ein Fall für Rules sein.
@Tobias Bähr: Das verwende
am 07.12.2010 - 13:55 Uhr
@Tobias Bähr: Das verwende ich doch. Ich möchte wie oben erwähnt nicht eine Benachrichtigung auf die Bewertung, sondern auf den Artikel. dewegen muss ich es an meine Wünsche ein wenig anpassen. Das macht aber Fivestars von Natur aus.
@stBorchert: Genau nach so etwas habe ich gesucht. Hoffe es funktioniert. Vielen Dank. Melde mich noch einmal wenn es geklappt hat, oder auch nicht.
vg
dennis605
funktioniert leider über
am 07.12.2010 - 20:01 Uhr
funktioniert leider über Rules nicht.
Habe es dann so versucht,über ein Modul zu realisieren:
function myhelp_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) {
switch ($op) {
case 'insert': -----------------------------------------> soll ja nach dem Erstellen ausgeführt werden.
if($node->type == 'review') {
$node_temp = node_load($node->reviewed_nid);
_watcher_email_notify_node_update(&$node_temp); ------------------------------------------------> Hier übergebe ich die Referenz
break;
}
}
}
und mit
function myhelp_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) {
switch ($op) {
case 'insert': -----------------------------------------> soll ja nach dem Erstellen ausgeführt werden.
if($node->type == 'review') {
$node_temp = node_load($node->reviewed_nid);
_watcher_email_notify_node_update($node_temp); ------------------------------------------------> Hier übergebe ich den Node
break;
}
}
}
Weis jmd. was ich hier falsch mache?
Von der Logik passt es doch, oder?
Vielen Dank schon mal für eure Bemühungen.
dennis605
Rules
am 08.12.2010 - 08:58 Uhr
funktioniert leider über Rules nicht.
Wie genau äußert sich das?
Welche Einstellungen hast Du verwendet?
Stefan
Hallo Stefan, das äußert
am 08.12.2010 - 12:07 Uhr
Hallo Stefan,
das äußert sich, indem gar nicht passiert.
Ich habe es zwar dann wieder verworfen, aber meine Einstellungen waren:
ON event Nach dem Speichern von neuem Inhalt
IF
conditionInhalt erstellt hat den Typ Artikel
DO
PHP-Code ausführen:
$node = node_load($node->reviewed_nid);
_watcher_email_notify_node_update($node);
Das war mein letzter Versuch, habe es aber auch auf zig andere Varianten probiert.
So hat es aber dann funktioniert:
function my_helper_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) {
switch ($op) {
case 'insert':
if($node->type == artikel') {
$node_temp = $node;
$node = node_load($node->reviewed_nid);
$op = 'update';
_watcher_email_notify_node_update($node);
$node = $node_temp;
break;
}
}
}
danke und vlg
dennis605
Argumente
am 08.12.2010 - 13:02 Uhr
<?php
$node = node_load($node->reviewed_nid);
_watcher_email_notify_node_update($node);
?>
Das ist ganz gefährlich, da
$node
ein Parameter ist, bei dem Veränderungen automatisch gespeichert werden.Wenn Du jetzt also den Inhalt des Arguments (in diesem Falle der neu erstellte Beitrag) mit einem anderen Beitrag überschreibst, kannst Du damit richtig tolle Effekte erzielen.
Wenn, dann lieber über die Aktion "load a node" (oder so ähnlich) den anderen Beitrag laden, als Argument zur Verfügung stellen und in der PHP-Aktion verwenden. Dann sieht man auch, ob das Laden überhaupt funktioniert.
Zum Testen solltest Du dann natürlich noch "Debug rules evaluation" in den Einstellungen von Rules aktivieren.
hth,
Stefan
Und wie findest du diese
am 08.12.2010 - 13:27 Uhr
Und wie findest du diese Lösung, die jetzt funktioniert hat:
Ich speicher ja in $node_temp den "Ursprungsnode" und gebe ihn nach "_watcher_email_notify_node_update($node);" wieder als $node zurück.
So wie es aussieht bist du aber sehr auf die Lösung mit "Rules" fixiert; Hat aber bei mir kein Ereignis ausgelöst.
Kannst du mir sagen warum?
function my_helper_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) {
switch ($op) {
case 'insert':
if($node->type == artikel') {
$node_temp = $node;
$node = node_load($node->reviewed_nid);
$op = 'update';
_watcher_email_notify_node_update($node);
$node = $node_temp;
break;
}
}
}
Danke
dennis605
Wenn ich den Code sehen
am 08.12.2010 - 13:54 Uhr
Wenn ich den Code sehen würde, wäre das ein Grund für eine Fristlose Kündigung :D. Es wird doch sicherlich eine Rule geben, die getriggert wird, wenn ein Benutzer die Node bewertet über Fivestars.
Fivestar stellt leider kein
am 08.12.2010 - 15:25 Uhr
Fivestar stellt leider kein Event für Rules zur Verfügung.
Dies hier wäre eine Möglichkeit: http://drupal.org/project/voting_rules