Neue Inhalte einer Web Site für den Benutzer hervorheben
Geschrieben von: Frederic Ganner Es gibt bestimmte Web Sites, auf die wir regelmäßig zugreifen. Gerade hier ist es von Vorteil auf den ersten Blick zu sehen, welche Beiträge neu und welche schon bekannt sind. Am einfachsten ist das mit Hilfe hervorhebender Grafiken zu erreichen - vor allem farbliche Unterschiede erhöhen die Aufnahmegeschwindigkeit dieser relevanten Informationen um ein Vielfaches. Wie auf dem obigen Bild zu erkennen ist, werden jedem Beitrag eine der zwei charakteristischen Grafiken zugewiesen. Um zu entscheiden, ob der Benutzer den jeweiligen Datensatz schon kennt, müssen wir den Zeitpunkt, an dem der Beitrag erstellt wurde mit dem Zeitpunkt an dem der User die Seite zuletzt besucht hat vergleichen. Hierfür speichern wir jedes Mal, wenn der User auf die Seite zugreift, die aktuelle Zeit in einen Cookie. Beim Durchlaufen der Datensätze findet schließlich der Abgleich der zwei Zeitpunkte statt, und es wird entschieden, welches Bild angezeigt wird. Unser Vorgehen für den Code sieht demnach wie folgt aus:
Auslesen des Cookies<% @LANGUAGE = "VBSCRIPT" %> <% Option Explicit %> <% Const cstrCookieName = "visit" Dim objCookieValue, dtLastVisit, bFirstVisit, strConnStr, Inhalte objCookieValue = Request.Cookies(cstrCookieName) If IsDate(objCookieValue) Then dtLastVisit = CDate(objCookieValue) bFirstVisit = False Else ' dieser Fall tritt auch ein, wenn User Cookies nicht erlaubt dtLastVisit = CDate("1/1/1990") bFirstVisit = True End If Response.Cookies(cstrCookieName).Expires = DateAdd("d",365,Date()) Response.Cookies(cstrCookieName) = Now() Zuerst lesen wir den Cookie aus. Wenn der User schon einen Cookie besitzt, speichern wir den in ein Datum umgewandelten Wert in der Variable dtLastVisit. Ist der Besucher dagegen zum ersten Mal auf der Seite, wird die Variable dtLastVisit mit einem Datum, das weit in der Vergangenheit liegt, belegt. Somit erscheinen für Erstbesucher bei allen Beiträgen die "neu"-Grafiken. Da wir nun den benötigten Zeitpunkt in einer Variable gespeichert haben, überschreiben wir den Cookie auf dem Client-Rechner mit der aktuellen Zeit, die wir dann beim nächsten Besuch verwenden können. Das größte Problem bei diesem Feature sind die Datentypen der Datumsfelder. Bei der Verwendung von VBScript ist es möglich den String aus dem Cookie in ein Datum-Objekt zu konvertieren. Bei JScript muß man im schlimmsten Fall die Strings aufparsen und nacheinander von der Sekunde bis zum Jahr einzeln auswerten. Erstellen des Recordset-ObjektsDem heutigen Artikel liegt eine Beispieldatenbank bei, die fiktive Artikel speichert - und wir bauen für diese Artikel eine Seite ähnlich zu bekannten Newssites auf, wo nur die Titel und das Erstellungsdatum angezeigt werden (das Beispiel kann leicht um Zusammenfassungen, Links usw. erweitert werden). Der folgende Code zeigt das Auslesen der Artikeltabelle: strConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\yourpath\neueinhalte.mdb" Set Inhalte = Server.CreateObject("ADODB.Recordset") Inhalte.ActiveConnection = strConnStr Inhalte.Source = "SELECT Titel, Zeit FROM Artikel ORDER BY ID DESC" Inhalte.CursorType = 0 Inhalte.CursorLocation = 2 Inhalte.LockType = 3 Inhalte.Open %> In diesem Abschnitt wird ein Recordset-Objekt (Inhalte) erstellt, das die einzelnen Beiträge und die Zeitpunkte der Erstellung enthält. Die Datenbank enthält neben den Spalten Inhalt und Zeit noch eine ID-Spalte, nach deren Werten die Datensätze absteigend (DESC) geordnet werden. Anzeigen der korrekten GrafikenLetzlich fehlt noch die Auswertung welchen Content der Web Seite der User noch nicht gesehen hat und welchen schon. Dies habe ich unter Zuhilfenahme von zwei selbst geschriebenen VBScript Funktionen (ShowNewsImage und MyDateFormat) gelöst: <HTML> <BODY bgcolor="#999999"> <p> <% If Not bFirstVisit Then Response.Write "Letzter Besuch am: " & MyDateFormat(dtLastVisit) Else Response.Write "Ihr erster Besuch auf der Seite!" End If %> </p> <table cellspacing="2"> <% While Not Inhalte.EOF %> <tr> <td> <img src="<%=ShowNewsImage(Inhalte.Fields("Zeit"), dtLastVisit)%>.gif" border="0"> </td> <td> <%= Inhalte.Fields("Titel") %><br> </td> <td> Eintrag erstellt: <%=MyDateFormat(Inhalte.Fields("Zeit")) %> </td> </tr> <% Inhalte.MoveNext Wend Inhalte.Close Set Inhalte = Nothing %> </table> </BODY> </HTML> In diesem Teil der Seite geben wir alle Datensätze des Recordsets in einer Tabelle aus. Weiters werden der Zeitpunkt aus dem Cookie (dtLastVisit) und der Zeitpunkt der Erstellung des Beitrags verglichen (Inhalte.Fields("Zeit")). Das geschieht durch die Funktion ShowNewsImage, welche in einem separaten VBScript Block zu finden ist: <script language="vbscript" runat="server"> Function ShowNewsImage(ByVal timeOfEntry, ByVal timeOfLastVisit) If timeOfEntry > timeOfLastVisit Then ShowNewsImage = "neu" Else ShowNewsImage = "alt" End If End Function Function MyDateFormat(dtDate) If Not IsDate(dtDate) Then MyDateFormat = "" Else MyDateFormat = Day(dtDate) & "." & Month(dtDate) & "." & Year(dtDate) End If End Function </script> Die ShowNewsImage Funktion erwartet zwei Zeitpunkte als Parameter. Für alle Beiträge deren Erstellungsdatum (timeOfEntry) größer als das letzte Besuchsdatum (timeOfLastVisit) ist, wird der String "neu" in die Seite geschrieben, und umgekehrt. Die Icons, die wir für die Kennzeichnung verwenden, müssen deshalb in diesem Fall "neu.gif" bzw. "alt.gif" genannt werden, da der Dateiname für die jeweilige Grafik im ersten Teil des Sourcecodes so ermittelt wird (siehe IMG-Tag). Mit Hilfe der Funktion MyDateFormat wird zu guter Letzt noch das Datum an dem der Beitrag erstellt wurde einfach lesbar formatiert (=immer Deutsch, egal welcher Webserver) in die Seite geschrieben. Mit dem eigentlichen Feature hat dies aber nichts zu tun. Es dient in diesem Fall nur dazu, alte und neue Beiträge voneinander zu unterscheiden. SchlußbemerkungWenn dieses Feature in ein Forum oder eine Newsseite eingebaut wird, hat diese sicherlich eine bessere Usability für Besucher, die die Site häufig besuchen. Blicken wir über den Einsatz eines GIF-Bildes hinaus, ergeben sich viele weitere Möglichkeiten dieses Feature einzusetzen: von der Veränderung der Stylesheets für die Überschriften der neuen Artikel , bis hin zur kompletten Trennung des Layouts in "alte" und "neue" Beiträge. Download des CodesKlicken Sie hier, um den Download zu starten. Verwandte Artikel
Dynamische Stylesheets Wenn Sie jetzt Fragen haben...Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten. Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.
Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.
©2000-2006 AspHeute.com |