Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module › Modulsuche ›

Konkurrierende Kommentare

Eingetragen von tower (9)
am 09.08.2010 - 12:00 Uhr in
  • Modulsuche

Hallo,

ich habe ja schon viele meiner Fragen im Web und auch hier durch Suchen beantworten können, aber jetzt habe ich keine Idee mehr und brauche Eure versammeltes Fachwissen;)

Folgendes Szenario

- 12:00:00 Mitglied A schreibt Kommentar an Node 1234, hat aber noch nicht auf Speichern geklickt;
- 12:00:01 Mitglied B schreibt Kommentar an Node 1234 und klickt auf Speichern;
- 12:01:00 Jetzt ist Mitglied A auch mit schreiben fertig und klickt auch auf speichern.

Mitglied A hat jetzt ein Problem, da er den Kommentar von Mitglied B noch nicht gesehen hat und inhaltlich völlig falsch liegen könnte.

Ich hätte gerne eine Warnfunktion, das während des Schreibens meines Kommentars ein anderer Kommentar gespeichert wurde. Wenn also Mitglied A endlich auf speichern klickt, sollte diese Warnung erscheinen, noch besser Warnung und die zwischenzeitlich erfassten Kommentare dargestellt werden.

Ist Euch eventuell. bereits ein fertiges Modul bekannt oder habt Ihr eine Idee für einen Lösungsansatz? Ich kennen eine solche Funktion z.Bsp. aus phpBB3 aber in Drupal ist mir solches noch nicht untergekommen.

Hintergrund: Ich betreibe ein Forum (www.sgaf.de) in dem die Antworten teilweise sehr schnell geschrieben werden :)

‹ Lesezeichen-Modul Anonymous User soll Nodes in Merkzettel abspeichern können ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Hooks

Eingetragen von stBorchert (6003)
am 09.08.2010 - 12:48 Uhr

Hallo.
Ein fertiges Modul für diesen Anwendungsfall ist mir nicht bekannt (das heisst jedoch nicht, dass es kein solches Modul gibt :) ).
Allerdings könnte man sich mit einem eigenen Modul und einem modifizierten submit-Handler für das [api:comment_form] behelfen.

Man müsste also den Standard-Submithandler durch einen Eigenen ersetzen und in diesem dann schauen, ob es schon neue Kommentare gibt.
Wenn ja, muss der Speichervorgang abgebrochen und eine entsprechende Meldung angezeigt werden.
Wenn nein, wird einfach der übliche Submithandler aufgerufen.

So könnte das funktionieren.

hth,

 Stefan

  • Anmelden oder Registrieren um Kommentare zu schreiben

Die Lösung

Eingetragen von tower (9)
am 17.08.2010 - 09:51 Uhr

Auch dieses Problem habe ich gelöst bekommen und will Euch die Lösung nicht vorenthalten:

<?php

/**
* Implementation of hook_help
*/
function comment_warn_help($path, $arg) {
  switch (
$path) {
    case
'admin/help#sgafNotify':
     
$output = '<p>'. t('Comment_warn warnt vor konkurrierenden Kommentaren') .'</p>';
     
$output .= '<p>'. t('...') .'</p>';
      return
$output;
  }
}



function
comment_warn_form_alter(&$form, $form_state) {
  global
$user;
 
// Gilt nur für angemeldete
 
if ($user->uid) {
    if (
$form['#id'] == 'comment-form') {
     
// Ansonsten wird die Variable auch beim Senden geschrieben
     
if (!$form_state['post']['form_build_id']) {
       
$nid = $form['nid']['#value'] ? $form['nid']['#value'] : $form['nid']['#default_value'];
       
// variablennamen zusammenstellen
        // Jetzt den Zeitpunkt der Formerstellung in Variable speichern 
       
$variable = 'comment_warn_time_'.$nid;
       
$_SESSION[$variable] = time();
      }
    }   
  }
  return
$form;
}  


function
comment_warn_comment(&$a1, $op) {
  global
$user;
  switch (
$op) {
       case
'validate':
         
// Gilt nur für angemeldete
         
if ($user->uid) {
        
// variablennamen zusammenstellen, wir brauch diesen mehrfach
          
$variable = 'comment_warn_time_'.$a1['nid'];
        
// Der Zeitpunkt, an dem User die Form aufgemacht hat
          
$last_comment = $_SESSION[$variable];
          
        
$nid = $a1['nid'];
        
$count = 0;
        
$message = '';
           if (
$last_comment) {
            
// Ermittel der in der Zwischenzeit geschrieben Nachrichten und Zusammenbauen der Nachricht
          
$result = db_query('select * from comments where status = 0 and nid = %d and uid <> %d and timestamp > %d order by timestamp asc', $nid, $user->uid, $last_comment);
           while (
$row = db_fetch_object($result)) {
                 
$count = $count + 1;
                 
$message .= '<hr /><b>'.format_date($row->timestamp).' - '.theme('username', $row).'&nbsp;';
              
$message .= $row->subject.'</b><br />';
              
$message .= check_markup($row->comment, $row->format, TRUE).'<br />';                               
           }
         }
        
         if (
$count) {
           
// Wenn es in der Zwischnezeit geschrieben Kommentare gibt
           
if ($count == 1) {
             
$message = t('<b>Hinweis:</b> Du hast den folgenden Kommentar zum Beitrag noch nicht gesehen, da er in den letzten Sekunden erstellt wurde: ').$message;
            } else {
             
$message = t('<b>Hinweis:</b> Du hast die folgenden '.$count.' Kommentare zum Beitrag noch nicht gesehen, da diese in den letzten Sekunden erstellt wurden: ').$message;
            }
           
// Die Zeit neu setzen, ansonsten kann der Kommentar nicht gespeichert werden
           
$_SESSION[$variable] = time();
           
// Als Fehler ausgeben, nicht schoen, aber ich kann leider hier nix anders an $form zurueck geben
           
form_set_error('','<div class="messages warning">'.$message."</div>");
         }
       }
       break;
  } 
}

?>

Das war eine schnelle Lösung und wird mit Erfolg genutzt.

Wenn hier einer Lust hat, ein ordentliches Modul daraus zu bauen (meine Englisch ist nicht so gut, deshalb mache ich das lieber nicht selber) stehe ich dem sehr aufgeschlossen gegenüber ;)

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Canvas Palette: Eine fertige Komponentenbibliothek für Drupal Canvas
  • Hilfe zu Updates oder Composer
  • Vergleich Drupal und Contao
  • [geloest] Blocks in Bootstrap nebeneinander darstellen und nicht untereinander
  • DrupalCamp Frankfurt 27-28 November 2026
  • Bitte mein Bentzerkonto löschen
  • Beim Aufruf einiger Inhalte erhalte ich folgende Fehlermeldung
  • Neuinstallation: vermutlich ein rewrite-Problem
  • Drupal CMS installieren
  • [erledigt]MP3 in Drupal 10 einbinden
  • (gelöst)Drupal 11 installieren
  • Titel ausblenden
Weiter

Neue Kommentare

  • Danke ich werde mir die
    vor 7 Stunden 14 Minuten
  • anyone has a working Betaflight mirror right now?
    vor 2 Tagen 20 Stunden
  • Vielen Dank für Ihren
    vor 3 Tagen 1 Stunde
  • Composer ist sehr ratsam
    vor 5 Tagen 17 Minuten
  • Vielen Dank für den
    vor 1 Woche 10 Stunden
  • Die alten CMS Vergleiche von contentmanager.de
    vor 1 Woche 22 Stunden
  • Gut gemacht
    vor 1 Woche 22 Stunden
  • Layout Builder etc. z.B. für Landing Pages
    vor 1 Woche 23 Stunden
  • Links
    vor 1 Woche 3 Tagen
  • Moin,wow, sehr gutes
    vor 1 Woche 4 Tagen

Statistik

Beiträge im Forum: 250315
Registrierte User: 20561

Neue User:

  • rofilm
  • Cruzorerm
  • Plandkeews

» Alle User anzeigen

User nach Punkten sortiert:
wla9466
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 8 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association