Suche hook für updates von einem oder vielen nodes eines Content Typen
Eingetragen von maen (547)
am 04.10.2013 - 18:42 Uhr in
am 04.10.2013 - 18:42 Uhr in
Schönen Abend Euch allen!
Ich komm nicht auf den Trichter, vielleicht hat ja einer eine Idee:
Ich importiere via webservices nodes vom Typ A. Jetzt möchte ich ein Modul bauen, das folgendes besagt:
Wenn ein oder mehrere nodes verändert werden, dann führe folgendes aus....
node_load und node_update fallen daher ja aus, weil ich nich einen bestimmten node möchte sondern weil ich alle nodes beobachten möchte. Das bedeutet, wenn ein oder mehrere nodes neu angelegt werden, wenn ein oder mehrere nodes geupdatet werden, dann mache folgendes ...
Weiß da jemand Rat?
Vielen Dank vorab,
maen
- Anmelden oder Registrieren um Kommentare zu schreiben
Dann nimm hook_node_presave.
am 04.10.2013 - 18:48 Uhr
Dann nimm hook_node_presave. Dann kommen alle Nodes in Deinem Modul vorbei, die gespeichert werden sollen und zwar direkt vor dem Speichern. Dann kannst Du mit dem Node anstellen, was Du willst oder andere Aktionen ausführen. Erst anschließend wird er gespeichert.
Beste Grüße
Werner
Hallo maen,Hier siehst du
am 08.10.2013 - 12:00 Uhr
Hallo maen,
Hier siehst du eine Liste der node_hooks https://api.drupal.org/api/drupal/modules!node!node.api.php/group/node_api_hooks/7
Suche dir den passenden aus, beachte dass bei neuen Nodes innerhalb des Hooks hook_node_presave
<?php
$node->nid
?>
Wenn du also auch neue Nodes überwachen möchtest und auch auf die nid des gerade erstellten Inhaltes zugreifen musst dann musst du die beiden Hooks:
hook_node_insert
hook_node_update
verwenden.
Danke schön!
am 11.10.2013 - 18:56 Uhr
Ich dachte ich bekomme eine email wenn jemand das Thema beantwortet. Dem war nicht so. Deshalb hiermit Danke!
Denkfehler bei node_save oder _presave???
am 13.10.2013 - 09:25 Uhr
So, ich habe jetzt meine erste fette Funktion in drupal geschrieben.
Sie besteht aus 4 Aufrufen von Content Typen per EntityFieldQuery, ner Masse an Schleifen zur Bearbeitung von den arrays, die dadurch reinkommen, und entweder dem Erstellen von neuen nodes verschiedener Contenttypen mittels $node = new stdClass() oder dem update per node_load.
Läuft fehlerfrei mit 20 Versuchsläufen und mehr!
Aufgerufen wird sie wenn ich den Pfad per Browser besuche.
Jetzt will ich diese Funktion automatisch laufen lassen, also habe ich die Funktion von kk_tabelle_kk_match umbenannt in kk_tabelle_node_save und den Wert des page_callbacks angepasst.
Aber läuft nicht.
Frage:
Weiss da einer mehr?
Du musst den Cache von Drupal
am 13.10.2013 - 11:05 Uhr
Du musst den Cache von Drupal leeren.
Oder aber dein Modul deaktivieren und anschließend wieder aktivieren
Mache ich mit drush. War auch
am 13.10.2013 - 12:14 Uhr
Mache ich mit drush. War auch mein Gedanke. Frage: Muss ich evtl den page callback aus dem menu hook rausschmeissen damit der läuft?
Also ich verstehe auch gerade
am 13.10.2013 - 12:32 Uhr
Also ich verstehe auch gerade nicht, wann die Funktion aufgerufen werden soll.
Also beim Aufruf einer Seite, beim speichern von bestimmtem Inhalt oder wann du die Funktion gerne ausführen willst.
Für die Funktion gibt es 3
am 13.10.2013 - 14:27 Uhr
Für die Funktion gibt es 3 Anwendungsfälle:
- nodes werden importiert
- nodes werden bearbeitet
- nodes werden angelegt
Eine grundsätzliche frage von mir ist auch:
Wenn ich hook_node (update, save, presave) anwende, kann ich egal welchen Code ausführen lassen, bspw. node wurde angelegt -> anderer node wird angelegt oder node wurde importiert-> set message hallo, etc.
Oder muss sich die Funktion ausschliesslich auf die zu behandelnde node beziehen?
Oder soll ich rules verwenden?
Du stellst damit sicher, daß
am 13.10.2013 - 14:54 Uhr
Du stellst damit sicher, daß Deine Funktion zu einem bestimmten Zeitpunkt in der Behandlung des Nodes aufgerufen wird. Was Du dann mit den Daten des Nodes machst (oder auch nicht), ist völlig Deine Sache, ebenso, was Du in dieser Funktion alles ausführst.
Beste Grüße
Werner
OK, dann werde ich morgen mal
am 13.10.2013 - 16:44 Uhr
OK, dann werde ich morgen mal machen. Danke!
Hallo ich nochmal ;) Also
am 13.10.2013 - 17:35 Uhr
Hallo ich nochmal ;)
Also wenn du schon dein eigenes Modul programmiert hast kannst du Rules weglassen, du musst nur deine Hooks richtig benennen.
Schaue dir nochmal meinen ersten Post hier im Thread an:
Hallo maen,
Hier siehst du eine Liste der node_hooks https://api.drupal.org/api/drupal/modules!node!node.api.php/group/node_api_hooks/7
Suche dir den passenden aus, beachte dass bei neuen Nodes innerhalb des Hooks hook_node_presave
<?php
$node->nid
?>
noch nicht gesetzt ist.
Wenn du also auch neue Nodes überwachen möchtest und auch auf die nid des gerade erstellten Inhaltes zugreifen musst dann musst du die beiden Hooks:
hook_node_insert
hook_node_update
verwenden.
Also nochmal:
Brauchst du die nid in deiner Funktion?
Nein -> verwende hook_node_presave
Ja -> verwende hook_node_insert und hook_node_update
Denke hierbei daran, dass diese Hooks für alle content-types aufgerufen werden, also auch für diejenigen die in der Schleife erzeugt/geändert werden.
Also bietet sich folgende Struktur an:
<?php
function hook_node_presave($node) {
switch ($node->type) {
case "kk_tabelle": // oder wie auch immer der zu überwachende Inhaltstyp lautet
deineEigenePHPFunktion($node);
break;
}
}
?>
Ein wichtiger Hinweis noch zum Schluss:
hook wird ersetzt durch den Namen deines Moduls, nicht durch irgendwelche Inhaltstypen.
OK, denke ich werde das dann
am 14.10.2013 - 06:31 Uhr
OK, denke ich werde das dann mit insert/update lösen. Eine letzte Verstândnisfrage noch yu dem Thema:
Wie wird die aktuelle nid von dem node, der gerade bearbeitet, importiert oder angelegt wird, in die Funktion übertragen?
Ich meine $node-> nid ist klar, aber wie filtere ich die so, dass die gerade benutzte oder neu angelegte nid bei rauskommt?