Löschen von Nodes verhindern bei Bedingung
am 30.06.2009 - 14:03 Uhr in
Hallo zusammen,
ich suche eine Lösung, um das Löschen einer Node unter bestimmten Bedingungen zu verhindern. Konkret habe ich mehrere eigene Node Typen, die auf andere Nodes per nid verweisen können. Wenn jetzt ein User versucht, eine Node, auf die verwiesen wird, zu löschen, soll dies eben nicht möglich sein und eine entsprechende Meldung ausgegeben werden. Die entsprechende Abfrage und das Ausgeben der Fehlermeldung funktioniert sowohl in hook_delete() als auch in hook_nodeapi(), nur lässt sich dabei die Löschung an sich nicht unterbinden.
Wenn ich über hook_access() gehe, kann ich dann die Fehlermeldung beeinflussen?
Vielen Dank im Voraus für Eure Hilfe.
Grüße,
Björn
- Anmelden oder Registrieren um Kommentare zu schreiben

cancel delete
am 30.06.2009 - 14:22 Uhr
Moin.
Das ist leider momentan noch nicht möglich. Für D7 ist eine "Delete API" angedacht (inl. "undo"), jedoch auch noch nicht wirklich einsatzfähig.
Möglicherweise könntest Du die Schaltfläche zum Löschen ganz einfach über
hook_form_alterausblenden.?hth,
Stefan
--
sei nett zu Deinem Themer
Hallo, danke für Deine
am 30.06.2009 - 14:30 Uhr
Hallo,
danke für Deine Antwort. Daran habe ich auch schon gedacht, aber leider greift diese Lösung nur für das Edit Formular. Mal sehen, ob das eine Alternative sein könnte.
Grüße,
Björn
löschen verhindern
am 30.06.2009 - 14:46 Uhr
Habs gerade nochmal im IRC gegenecheckt: funktioniert nicht.
Du könntest höchstens versuchen, sämtliche Formulare, die das Löschen ermöglichen, zu verändern. So, dass die entsprechenden Nodes da nicht mehr auftauchen. Das ist aber ziemlich hacky.
Stefan
--
sei nett zu Deinem Themer
Schade
am 01.07.2009 - 10:36 Uhr
Danke nochmals. Ich werde es wohl so machen, wie Du es vorgeschlagen hast, d. h. den Löschen Button zumindest deaktivieren und den Zugriff auf admin/content/node blockieren. So werden die User auf mögliche Inkonsistenzen auch im Vorfeld hingewiesen ohne den Button geklickt zu haben. Sooo hacky finde ich das eigentlich garnicht.
Grüße,
Björn
Edit: Ich habe es jetzt einmal mit
hook_access()versucht. Dabei wird meine Fehlermeldung beireturn FALSEallerdings schon angezeigt, wenn man den/die(?) Node editiert und der Löschen Button wird auch schon ausgeblendet, was eigentlich auch logisch ist. Damit kann ich aber gut leben.Das geht mit dem Hook_nodeapi ..
am 03.07.2009 - 09:51 Uhr
.. indem du die $op == "delete" abfragst und im einfachsten Fall einfach mit einer drupal_goto() wieder auf die Seite zurückgehst. Nett ist dann zumindest eine Meldung einzublenden.
Gruß
UwBach
nodeapi
am 03.07.2009 - 09:58 Uhr
Blöd nur, dass zu diesem Zeitpunkt bereits
DELETE FROM {node} WHERE nid = %dundDELETE FROM {node_revisions} WHERE nid = %dausgeführt wurden (siehe node_delete()), die eigentlichen Daten der Node und alle Revisionen also schon gelöscht sind.Da bringt dann auch ein
drupal_gotonicht mehr viel.Stefan
--
sei nett zu Deinem Themer
Danke für den Hinweis
am 03.07.2009 - 10:13 Uhr
Danke für den Hinweis. Werde ich sofort ausprobieren. Diese Variante hatte ich bisher außen vorgelassen, weil die Doku sagt:
If you are writing a node module, do not use this hook to perform actions on your type of node alone. Instead, use the hooks set aside for node modules, such as hook_insert() and hook_form().
Aber das habe ich wohl fehlinterpretiert.
Edit: Geht nicht. Die Löschung wird dadurch nicht unterbunden (stBorchert war schneller).