HowTo: Ändern eines Gästebuches

Schierigkeitsstufe: einfach

In diesem HowTo soll das Gästebuch der Implementierungsvorlage verändert werden. Wir haben uns deshalb für die Implementierungsvorlage entschieden, da diese keinerlei optische Aufbesserung enthält und sich rein auf die Funktionalität konzentriert

  • Zusätzliche Anzeige von Benutzer ID bzw. IP bei jedem Gästebucheintrag
  • Anzeige des Namens in rot, falls der Eintrag vom Benutzer "admin" stammt
  • Anzeige des Namens in grün, falls der Eintrag von einem Gast stammt
  • Anzeige des Namens in blau, falls der Eintrag von einem angemeldeten Benutzer stammt
  • Ausgabe eines Hinweistextes, wenn der Eintrag vom Benutzer admin stammt
  • Sortierung der Beiträge nach Datum

Zum besseren Verständnis empfehlen wir vor Bearbeitung der Use Cases die Implementierungsgrundlagen Dokumentation zu lesen. Verwendete Dateien "\xsl\implementation\GuestbookgetEntry.xsl".

Einführung – Wo findet die Änderung statt?

Nachdem an der Funktionalität des Gästebuchs nichts geändert werden soll, sondern nur dessen Darstellung, muss an der JSP-Datei nichts verändert werden. Die Änderungen beschränken sich daher rein auf die XSL-Datei. Diese befindet sich unter "C:\Programme\Corinis CCM Demo\xsl\implementation\GuestbookgetEntry?.xsl". Öffnen Sie die Datei bitte in einem Editor Ihrer Wahl:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:template match="/">
    <table>
      <tr>
        <td>
          <b>Benutzer</b>
        </td>
        <td>
          <b>Erstellungsdatum</b>
        </td>
        <td>
          <b>Eintrag</b>
        </td>
      </tr>
      <xsl:for-each select="GUESTBOOK/ENTRY">
        <tr>
          <td>
            <strong>
              <xsl:value-of select="CREATE/USER/NAME"/>
            </strong>
          </td>
          <td>
            <xsl:value-of select="CREATE/DATE"/>
          </td>
          <td>
            <xsl:value-of select="MESSAGE"/>
          </td>
        </tr>
      </xsl:for-each>
    </table>
  </xsl:template>
</xsl:stylesheet>

Momentan wird also Name, Datum und Eintrag angezeigt:

Benutzer

Erstellungsdatum

Eintrag

Der Gast

16.06.2005 12:07

Eine neue Nachricht von einem Gast

hansi

16.06.2005 12:06

Ich hinterlasse einen Eintrag

admin

16.06.2005 12:05

Eine neuere Nachricht

admin

16.06.2005 12:04

Eine neue Nachricht !!!

XML des Gästebuchs

Das XML des Gästebuchs sieht folgendermaßen aus:

<GUESTBOOK>
  <MODULENAME>global</MODULENAME>
  <ENTRYID>-1</ENTRYID>
  <PERSONAL>false</PERSONAL>
  <ENTRY>
      <CREATE>
       <DATE>31.10.2002 02:54</DATE>
       <LDATE>123311020020254</LDATE>
       <USER>
         <NAME>deruser</NAME>
         <ID>15648432465</ID>
         <IP>127.0.0.1</IP>
        </USER>
      </CREATE>
      <MESSAGE>Eine Message</MESSAGE>
    </ENTRY>
  <ENTRY>
      <CREATE>
       <DATE>31.09.2002 02:54</DATE>
       <LDATE>123311020020254</LDATE>
       <USER>
         <NAME>guest</NAME>
         <ID>2</ID>
         <IP>127.0.0.1</IP>
        </USER>
      </CREATE>
      <MESSAGE>Message from guest - > hey its my NAME</MESSAGE>
    </ENTRY>
  <ENTRY>
      <CREATE>
       <DATE>1.03.2002 02:54</DATE>
       <LDATE>123311020020254</LDATE>
       <USER>
         <NAME>admin</NAME>
         <ID>1</ID>
         <IP>127.0.0.1</IP>
        </USER>
      </CREATE>
      <MESSAGE>Nachricht des Admins...irgendwas</MESSAGE>
    </ENTRY>
</GUESTBOOK>

Änderungen

UserID / User IP anzeigen

Ein Blick auf den XML-Baum verrät, dass die ID des Benutzers unter GUESTBOOK/ENTRY/CREATE/USER/ID mitgeliefert wird. Folgende Zeile fügen wir also hinzu:

GuestbookgetEntry.xsl Zeile 21:

         <td>
            <strong>
              <xsl:value-of select="CREATE/USER/NAME"/>
            </strong><br/>
            ID: <xsl:value-of select="CREATE/USER/ID"/><br/>
          </td>

Benutzer

Erstellungsdatum

Eintrag

Der Gast
ID: 1

16.06.2005 12:07

Eine neue Nachricht von einem Gast

hansi
ID: 1115638983565

16.06.2005 12:06

Ich hinterlasse einen Eintrag

admin
ID: 2

16.06.2005 12:05

Eine neuere Nachricht

admin
ID: 2

16.06.2005 12:04

Eine neue Nachricht !!!

Zusätzlich solldie IP angezeigt werden, jedoch nur die ersten 3 Ziffern um die Privatsphäre des Benutzers zu schützen:

GuestbookgetEntry.xsl Zeile 22:

         <td>
            <strong>
              <xsl:value-of select="CREATE/USER/NAME"/>
            </strong><br/>
            ID: <xsl:value-of select="CREATE/USER/ID"/><br/>
            IP: <xsl:value-of select="substring-before(CREATE/USER/IP, '.')"/>
            <xsl:text>.xxx.xxx.xxx</xsl:text>
          </td>

Benutzer

Erstellungsdatum

Eintrag

Der Gast
ID: 1
IP: 127.xxx.xxx.xxx

16.06.2005 12:07

Eine neue Nachricht von einem Gast

hansi
ID: 1115638983565
IP: 127.xxx.xxx.xxx

16.06.2005 12:06

Ich hinterlasse einen Eintrag

admin
ID: 2
IP: 127.xxx.xxx.xxx

16.06.2005 12:05

Eine neuere Nachricht

admin
ID: 2
IP: 127.xxx.xxx.xxx

16.06.2005 12:04

Eine neue Nachricht !!!

Beitrag von admin in rot, von guest in grün und von anderen Benutzern in blau anzeigen

Die Abfrage von welchen Benutzer ein Beitrag stammt kann über dessen Namen bzw. ID erfolgen. Wir prüfen über die ID. Der Benutzer admin hat im Corinis System die ID 2, der Benutzer guest die ID 1. Um die jeweilige Spalte in der betreffenden Farbe darzustellen fügen wir dem umschließenden <td> einfach ein Style-Attribut mit der gewünschten Farbe hinzu:

GuestbookgetEntry.xsl Zeile 18:

         <td>
            <xsl:choose>
              <xsl:when test="CREATE/USER/ID=2">
                <xsl:attribute name="style">
                  <xsl:text>color:red</xsl:text>
                </xsl:attribute>
              </xsl:when>
              <xsl:when test="CREATE/USER/ID=1">
                <xsl:attribute name="style">
                  <xsl:text>color:green</xsl:text>
                </xsl:attribute>
              </xsl:when>
              <xsl:otherwise>
                <xsl:attribute name="style">
                  <xsl:text>color:blue</xsl:text>
                </xsl:attribute>
              </xsl:otherwise>
            </xsl:choose>
            <strong>
              <xsl:value-of select="CREATE/USER/NAME"/>
            </strong><br/>
            ID: <xsl:value-of select="CREATE/USER/ID"/><br/>
            IP: <xsl:value-of select="substring-before(CREATE/USER/IP, '.')"/>
            <xsl:text>.xxx.xxx.xxx</xsl:text>
          </td>

Benutzer

Erstellungsdatum

Eintrag

Der Gast
ID: 1
IP: 127.xxx.xxx.xxx

16.06.2005 12:07

Eine neue Nachricht von einem Gast

hansi
ID: 1115638983565
IP: 127.xxx.xxx.xxx

16.06.2005 12:06

Ich hinterlasse einen Eintrag

admin
ID:
2 IP: 127.xxx.xxx.xxx

16.06.2005 12:05

Eine neuere Nachricht

admin
ID: 2
IP: 127.xxx.xxx.xxx

16.06.2005 12:04

Eine neue Nachricht !!!

Ausgabe eines Hinweistextes, wenn der Beitrag vom Benutzer admin stammt

Auch hier überprüfen wir erneut die ID des Benutzers und geben im Falle dass diese 2 ist (=Benutzer admin) einen Hinweistext aus:

GuestbookgetEntry.xsl Zeile 36:

           </xsl:choose>
            <strong>
              <xsl:if test="CREATE/USER/ID='2'">
                Der Schef
              </xsl:if>
              <xsl:value-of select="CREATE/USER/NAME"/>
            </strong><br/>

Benutzer

Erstellungsdatum

Eintrag

Der Gast
ID: 1
IP: 127.xxx.xxx.xxx

16.06.2005 12:07

Eine neue Nachricht von einem Gast

hansi
ID: 1115638983565
IP: 127.xxx.xxx.xxx

16.06.2005 12:06

Ich hinterlasse einen Eintrag

Der Schef admin
ID: 2
IP: 127.xxx.xxx.xxx

16.06.2005 12:05

Eine neuere Nachricht

Der Schef admin
ID: 2
IP: 127.xxx.xxx.xxx

16.06.2005 12:04

Eine neue Nachricht !!!

Sortierung der Beiträge aufsteigend nach Datum

Momentan wird der neueste Beitrag ganz oben zuerst angezeigt. Der Beitrag von 12:07 ist also der erste, der Beitrag von 12:04 der letzte. Wir wollen diese Sortierreihenfolge nun umkehren, so dass der älteste Beitrag als erstes und der neueste Beitrag als letztes angezeigt wird. Im XML Baum, findet sich das Datum unter GUESTBOOK/ENTRY/CREATE/DATE. Dies ist jedoch die lesbare Form des Datums, nachder nur sehr kompliziert sortiert werden kann. Corinis stellt im XML-Baum zu jedem Datum jedoch noch zusätzlich ein Feld mit dem Namen LDATE zur Verfügung. Dieses beinhaltet eine zahlenmäßige Repräsentation des Datums. Dies bedeutet, dass die Zahl umso höher ist je später der Eintrag verfasst wurde. Wir verwenden zum Sortieren also GUESTBOOK/ENTRY/CREATE/LDATE:

GuestbookgetEntry.xsl Zeile 16:

      </tr>
      <xsl:for-each select="GUESTBOOK/ENTRY">
        <xsl:sort select="CREATE/LDATE" order="ascending"/>
        <tr>
          <td>
            <xsl:choose>

Benutzer

Erstellungsdatum

Eintrag

Der Schef admin
ID: 2
IP: 127.xxx.xxx.xxx

16.06.2005 12:04

Eine neue Nachricht !!!

Der Schef admin
ID: 2
IP: 127.xxx.xxx.xxx

16.06.2005 12:05

Eine neuere Nachricht

hansi
ID: 1115638983565
IP: 127.xxx.xxx.xxx

16.06.2005 12:06

Ich hinterlasse einen Eintrag

Der Gast
ID: 1
IP: 127.xxx.xxx.xxx

16.06.2005 12:07

Eine neue Nachricht von einem Gast

Die Sortierung wurde entsprechend geändert.

Das endgültige XSL

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
   <xsl:template match="/">
    <table border="3">
      <tr>
        <td>
          <b>Benutzer</b>
        </td>
        <td>
          <b>Erstellungsdatum</b>
        </td>
        <td>
          <b>Eintrag</b>
        </td>
      </tr>
      <xsl:for-each select="GUESTBOOK/ENTRY">
        <xsl:sort select="CREATE/LDATE" order="ascending"/>
        <tr>
          <td>
            <xsl:choose>
              <xsl:when test="CREATE/USER/ID=2">
                <xsl:attribute name="style">
                  <xsl:text>color:red</xsl:text>
                </xsl:attribute>
              </xsl:when>
              <xsl:when test="CREATE/USER/ID=1">
                <xsl:attribute name="style">
                  <xsl:text>color:green</xsl:text>
                </xsl:attribute>
              </xsl:when>
              <xsl:otherwise>
                <xsl:attribute name="style">
                  <xsl:text>color:blue</xsl:text>
                </xsl:attribute>
              </xsl:otherwise>
            </xsl:choose>
            <strong>
              <xsl:if test="CREATE/USER/ID='2'">
                Der Schef
              </xsl:if>
              <xsl:value-of select="CREATE/USER/NAME"/>
            </strong><br/>
            ID: <xsl:value-of select="CREATE/USER/ID"/><br/>
            IP: <xsl:value-of select="substring-before(CREATE/USER/IP, '.')"/>
            <xsl:text>.xxx.xxx.xxx</xsl:text>
          </td>
          <td>
            <i>
              <xsl:value-of select="CREATE/DATE"/>
            </i>
          </td>
          <td>
            <xsl:value-of select="MESSAGE"/>
          </td>
        </tr>
      </xsl:for-each>
    </table>
  </xsl:template>
</xsl:stylesheet>