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

Konkurrierende Kommentare

Eingetragen von tower (9)
am 09.08.2010 - 11: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 - 11: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 - 08: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

  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 1 Woche 4 Tagen
  • Hey danke
    vor 1 Woche 5 Tagen
  • Update: jetzt gibt's ein
    vor 1 Woche 5 Tagen
  • Hallo, im Prinzip habe ich
    vor 2 Wochen 3 Tagen
  • Da scheint die Terminologie
    vor 2 Wochen 3 Tagen
  • Kannst doch auch alles direkt
    vor 3 Wochen 16 Stunden
  • In der entsprechenden View
    vor 3 Wochen 16 Stunden
  • Dazu müsstest Du vermutlich
    vor 3 Wochen 16 Stunden
  • gelöst
    vor 5 Wochen 4 Tagen
  • Ja natürlich. Dass ist etwas,
    vor 5 Wochen 5 Tagen

Statistik

Beiträge im Forum: 250233
Registrierte User: 20450

Neue User:

  • Mroppoofpaync
  • 4aficiona2
  • AppBuilder

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 13 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