content_lock Notification?
am 03.08.2017 - 11:45 Uhr in
Hallo,
ich habe das content_lock-Modul im Einsatz, das blockiert den edit-Modus von Inhalten, wenn ein anderer User den Inhalt grade zum Bearbeiten auf hat, mit der Mitteilung:
"This document is locked for editing by [USER] since ..."
Der bearbeitende User hat im Backend diese Mitteilung:
"This document is now locked against simultaneous editing.
Your lock will be considered stale and up for grabs in 30 Minuten."
Meine Frage:
Ich würde gerne alle angemeldeten User z.B. mit einem Popup darüber informieren, wer grade was barbeitet bzw. wieder zugemacht hat (ohne seine aktuelle Seite neu laden zu müssen).
Ich habe in der "content_lock.api.php" die HOOK-Funktionen HOOK_content_lock_locked($nid, $uid) und HOOK_content_lock_release($nid, $uid = NULL) gefunden, die auf die entsprechenden Events reagieren - das funktioniert auch (kann ich mir per dpm() ausgeben lassen),
aber: was fange ich damit an?
Wie kann ich diese Mitteilungen an eine JavaScript-Funktion der Site übergeben, die das dann irgendwohin schreibt?
Hat jemand eine Idee, wie man sowas macht?
Vielen Dank, Michael
- Anmelden oder Registrieren um Kommentare zu schreiben
Mal unabhängig davon, ob das
am 03.08.2017 - 13:11 Uhr
Mal unabhängig davon, ob das sinnvoll ist, oder nicht, ist das nicht so einfach. PHP, also der Hook, läuft auf dem Server, JavaScript läuft im Browser des jeweiligen Users. Wenn zwei Benutzer gleichzeitig auf der Seite sind, wissen deren Browser nichts voneinander. Es kann also nur so funktionieren, daß beim Aufruf jeder Seite eine Javascript-Funktion ausgelöst wird, die mittels Ajax beim Server nachfragt, wer gerade was editiert. Dazu muß auf dem Server eine Funktion erstellt werden, die diese Anfrage entsprechend beantwortet und die must Du selbst schreiben. Ebenso, den lokalen Aufruf in JavaScript. Das kann aber immer nur beim Aufruf einer neuen Seite ausgelöst werden oder über einen Timer in JavaScript. Der Server pusht nämlich nichts ungefragt zum Browser.
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
das hatte ich schon befürchtet,
am 03.08.2017 - 13:42 Uhr
den AJAX-Aufruf beim Laden einer Seite hatte ich schon eingebaut und mit db_select('content_lock', ... ) die aktuell geblockten Inhale in einem eigenen message-Feld ausgegeben.
Sinnvoll ist das darum, weil es auf einer Übersichtsseite eines bestimmten ContTypes einen Button "UPDATE ALL" gibt, mit dem über eine AJAX-Schleife alle Inhalte dieses Typs mit field_attach_update() aktualisiert werden
- und ich weiß nicht, was passiert, wenn dabei einer der Inhalte grade woanders bearbeitet wird.
Ich werde also einen JavaScript-Timer einbauen müssen ...
vielen Dank trotzdem, Michael