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 |
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 !!! |
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 |
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 !!! |
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 |
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 !!! |
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 |
16.06.2005 12:07 |
Eine neue Nachricht von einem Gast |
|
hansi |
16.06.2005 12:06 |
Ich hinterlasse einen Eintrag |
|
Der Schef admin |
16.06.2005 12:05 |
Eine neuere Nachricht |
|
Der Schef admin |
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 |
16.06.2005 12:04 |
Eine neue Nachricht !!! |
|
Der Schef admin |
16.06.2005 12:05 |
Eine neuere Nachricht |
|
hansi |
16.06.2005 12:06 |
Ich hinterlasse einen Eintrag |
|
Der Gast |
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>
