<< Halloween-Update: Formmail >> Halloween-Update: Fehlerprüfung

eforia web manager Blog

Halloween-Update Kommentare


Die Kommentarfunktion wurde leicht überarbeitet. Im Grunde gibt es ein Feld in der Datenbank, das den Nutzer speichert, falls einer angemeldet ist. Bei der Ausgabe kann man mit {User} abfragen. Beispielsweise kann mit einem Konstrukt wie {if="{User}=0"}background-color: #eeeeee;{end} die Hintergrundfarbe von Kommentaren bei angemeldeten Benutzern farbig hinterlegt werden.

Um bei der Eingabe diesen das Captcha zu sparen, kann das Formular comment/form mit Javascript arbeiten. Es gibt unter programm ein kleines Hilfstool, was Userinformationen der aktuellen Session zurückliefert. Das kann per httpxmlrequest angesprichen werden. Klingt kompliziert? Hier ein Beispiel:
<a name="comform"></a><span class="headline">Neuen Kommentar verfassen:</span>
<form action="{action}&#message" method="POST">
<table callpadding="0" cellspacing="0" border="0">
<tr><td>Name:</td><td><input type="text" id="fieldName" name="Name" value="{Name}" size="50"></td></tr>
<tr><td>Email:</td><td><input type="text" id="fieldMail" name="Mail" value="{Mail}" size="50"> <span class="small">(wird nicht veröffentlicht)</span></td></tr>
<tr><td valign="top">Website:</td><td><input type="text" id="fieldWebsite" name="Website" value="{Website}" size="50"> <span class="small">(optional)<br />
Achtung Möchtegern-SEOs: Kommerzielle Websites, die in keinem Bezug zum Thema des Beitrags stehen, werden gelöscht. Deeplinks sind mir immer suspekt.</span></td></tr>
<tr><td valign="top">Text:</td><td><textarea name="text:Text" rows="10" cols="60">{Text}</textarea></td></tr>
<tr><td>&nbsp;</td><td><input type="checkbox" name="InformAboutNewComments" {InformAboutNewComments}> Bei neuen Kommentaren per Email benachrichtigen</td></tr>
<tr><td>&nbsp;</td><td><input type="checkbox" name="store" {store}> Angaben (Name, Email, Website) speichern</td></tr>
<tr id="captcha"><td valign="top"><br>Code:</td><td>{captchaimage}<br /><input type="text" name="captcha"> (Bitte Code von oben eingeben)</td></tr>
<tr><td>&nbsp;</td><td><span class="small">Hinweis: Mit dem Absenden Ihres Kommentars willigen Sie ein, dass der angegebene Name, Ihre E-Mail-Adresse und die
IP-Adresse, die Ihrem Internetanschluss aktuell zugewiesen ist, im Zusammenhang mit Ihrem Kommentar
gespeichert werden. Die E-Mail-Adresse und die IP-Adresse werden natürlich nicht veröffentlicht oder
sonst weitergegeben.<br /></span>
<input type="submit" name="send" value="Absenden"></td></tr>
</table>
</form>
<script>
// XML-Transfer
function XMLInitCommentForm() {
// cFunction: load / save
  var http_request = false;
  var URL = "/programm/getuser.prg?"+Math.ceil(Math.random()*1000);
  if (window.XMLHttpRequest) { //Mozilla
    http_request = new XMLHttpRequest();
  } else {
    if (window.ActiveXObject) { // IE
      try {
        http_request = new ActiveXObject("Msxml2.XMLHTTP")
      } catch(e) {
        try {
          http_request = new ActiveXObject("Microsoft.XMLHTTP")
        } catch(e) {}
      }
    }
  }
  if (!http_request) {alert('Ihr Browser unterstützt diese Funktion (XMLHttpRequest) leider nicht! '); return false;}

  http_request.onreadystatechange = function() {XMLProcessCommentForm(http_request)}

  http_request.open('GET',URL,true);
  http_request.setRequestHeader('content-type', 'text/plain');
  http_request.setRequestHeader('charset', 'iso-8859-1');
  http_request.send();
}

function getCookie(name){
  // Cookie-Wert auslesen
  var i=0
  var suche = name+"="
  while (i<document.cookie.length){
    if (document.cookie.substring(i, i+suche.length)==suche){
      var ende = document.cookie.indexOf(";", i+suche.length)
      ende = (ende>-1) ? ende : document.cookie.length
      var cook = document.cookie.substring(i+suche.length, ende)
      return unescape(cook)
    }
    i++
  }
  return ''
};

function ReadLn(cText){
  var nEnd=0;
  var c='';
  nEnd=cText.indexOf('\n',0);
  if(nEnd!=-1){
    c=cText.slice(0,nEnd);
  }else{
    c=cText;
  }
  if(c.indexOf('\r')>=0){c=c.slice(0,c.indexOf('\r'))}; // Windows-Kombatibilität mit CR+LF statt nur LF
  return c
}

function DelLn(cText){
  var nEnd=0;
  var c='';
  nEnd=cText.indexOf('\n',0);
  if(nEnd!=-1){
    c=cText.slice(nEnd+1);
  }else{
    c='';
  }
  return c
}

function XMLProcessCommentForm(http_request) {
  var cResponse='';
  try {
    if (http_request.readyState == 4) { //abgeschlossene übertragung
      if (http_request.status == 200 || http_request.status == 0) { // Code OKAY
        cResponse=http_request.responseText;
        var cUser='';
        var cUsername='';
        var cMail='';
        cUser=ReadLn(cResponse);
        cResponse=DelLn(cResponse);
        cUsername=ReadLn(cResponse);
        cResponse=DelLn(cResponse);
        cMail=ReadLn(cResponse);
        // Wenn User, dann Captcha ausblenden
        if(cUser!='0'){document.getElementById('captcha').style.display='none';}
       // Wenn Felder leer, dann mit Cookie besetzen
       if (document.getElementById('fieldName').value+document.getElementById('fieldMail').value+document.getElementById('fieldWebsite').value==''){
         document.getElementById('fieldName').value=getCookie('cName');
         document.getElementById('fieldMail').value=getCookie('cMail');
         document.getElementById('fieldWebsite').value=getCookie('cWebsite');
       }
       // Wenn immer noch leer, mit Userinfo aus Session besetzen
       if (document.getElementById('fieldName').value==''){
         document.getElementById('fieldName').value=cUsername;
       }
       if (document.getElementById('fieldMail').value==''){
         document.getElementById('fieldMail').value=cMail;
       }

      } else {
        alert("Übertragungsfehler Status "+http_request.status)
      }
    }
  } catch(E) {
    //alert("Fehler: "+E.message)
  }
}
XMLInitCommentForm();
</script>

In diesem Beispiel wird geprüft ob ein Nutzer angemeldet ist. Falls ja, wird sein Nutzername und Mail in die Felder eingetragen und das Captcha ausgeblendet. Falls der Nutzer in die Felder andere Werte eingibt, können diese immer noch per Cookie gespeichert werden und werden dann in Zukunft benutzt.

Eine andere Lösung kann man z.B. hier [Link entfernt, weil Linkziel leider nicht mehr verfügbar] sehen. Da ist nur noch angemeldeten Nutzern das Kommentieren erlaubt. Der Name wird fest vorgegeben, eine extra Website kann nicht übergeben werden. Dafür werden dann die Kommentatornamen mit dem Nutzerprofil (was es auf der Seite eben gibt) verlinkt.



Dieser Artikel wurde veröffentlicht am 28.10.2009 um 10:15 Uhr. Tags: ewm5  update  halloween  comment   | Permalink | Trackback URI
Ähnliche Beiträge:

Noch kein Kommentar. Sei der Erste:
Der Beitrag ist älter als 30 Tage. Keine Kommentare mehr möglich.


Hier bloggt Horst Klier mit und über eforia web manager und was dazugehört (HTML, Javascript, Internet, Webdesign, Such- maschinenoptimierung, usw.).

>> Zur Blog Startseite

RSS-Feed
abonnieren


Übersicht über alle Beiträge



eforia® ist ein eingetragenes Markenzeichen der tdb Software Service GmbH.
Alle anderen Marken und Markenzeichen gehören Ihren jeweiligen Besitzern.
Letzte Aktualisierung dieser Seite: 16.04.2024 / 00:00:07
Suche  
Impressum