Hit Counter-UserControl mit Speicherung im Content

Für Umbraco Webseiten kann man mit der Umbraco-API ganz einfach einen Hit Counter erstellen, welcher die Werte im Content speichert.

Ziel ist es, für eine einzelne Seite unserer Homepage einen einfachen Hit Counter zu erstellen, welcher lediglich die Anzahl der Seitenaufrufe zählt und den Wert in dem entsprechenden Content-Knoten unserer Webseite in einer Dokumenteneigenschaft speichert.

Zunächst muss dem entsprechenden Dokumententyp eine entsprechende Eigenschaft zugewiesen werden.

screen_HitCounter1

Dies hat später folgende Vorteile:

1. Der Wert der Seitenaufrufe kann jederzeit im Content manuell geändert werden.
2. Der Wert kann wie jede andere Dokumenteneigenschaft in Templates, Razor- oder XSLT-Dateien verwendet werden und im Frontend angezeigt werden.

Im nächsten Schritt wird in Visual Studio eine neues C#-UserControl erstellt. Empfehlenswert ist hier die Vorlage Umbraco 4.7.1.1 UserControl Template. Sollte diese Vorlage noch nicht vorhanden sein, kann man natürlich unter dem Tab Online Templates danach suchen und es kostenlos installieren.

screen_HitCounter2

 

Wir nennen unser UserControl z.B. HitCounter und bearbeiten die Datei HitCounter.ascx.cs wie folgt:
(Annahme: unser Content-Knoten hat die ID 1174)

using umbraco.cms.businesslogic.web;
using umbraco.BusinessLogic;
using umbraco.presentation.nodeFactory;


namespace HitCounter
{
    public partial class HitCounter : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {

                int hits = 0;
                Document doc = new Document(1174);

                if (doc.getProperty("hits").Value != "")
                {
                    hits = (int)doc.getProperty("hits").Value;
                }
                else
                {
                    hits = 0;
                }

                doc.getProperty("hits").Value = hits + 1;
            }
        }

    }
}

In dem Page_Load-Event unseres UserControls initialisieren wir zunächst das Objekt doc mit dem gewünschten Content-Knoten(1174). Im nächsten Schritt wird mit

doc.getProperty("hits").Value

direkt auf die Eigenschaft hits unseres Content-Knotens zugegriffen und geprüft ob diese Eigenschaft bereits über einen Wert verfügt. Wenn ein Wert bereits vorhanden ist, wird dieser Wert der Variablen hits zugewiesen, ansonsten wird die Variable hits mit dem Wert 0 initialisiert.

Im letzten Schritt unseres Page_Load-Events wird mit

doc.getProperty("hits").Value = hits + 1;

der Wert in unserer Eigenschaft hits im Content-Knoten mit der ID 1174 um eins erhöht und dort auch direkt gespeichert.

Das soeben erstelle UserControl muss nun noch gespeichert und kompiliert werden. Im Anschluss muss die HitCounter.dll in das bin-Verzeichnis und die HitCounter.ascx in das userControl-Verzeichnis der Umbraco-Instanz kopiert werden.

Abschließend muss natürlich noch ein neues Macro im Developer-Bereich des Umbraco-Backends erstellt und das userControl zugewiesen werden.

screen_HitCounter3

Wenn nun das Macro in das Template für unsere spezifische Seite eingebunden wird, wird der Wert im entsprechenden Content-Knoten bei jedem Seitenaufruf um eins erhöht.

<umbraco:Macro Alias="HitCounter" runat="server" />

Geschrieben von Sören Deger um 11:24 Uhr

1 Kommentare :

Thomas H&#246;hler schrieb...
Hallo Sören, schönes Beispiel für die vielen Möglichkeiten, die man mit Umbraco hat. Aber unabhängig davon dass ich sowas nicht per Generic Property und einem UserControl machen würde sondern per statischer Klasse auf eine eigene Tabelle, würde ich nie eine hart-codierte ID verwenden. Hier würde ich auf die NodeFactory zugreifen: umbraco.NodeFactory.Node.GetCurrent().Id Erinnere Dich an das Likes-Beispiel aus der Level 2 Schulung. Es zeigt wie ihr das ganze mit Umbraco-Base mit einer einzigen statischen Klasse hinbekommen könnt. PS: Das Speichern und Publizieren solltet Du noch im Code darstellen bevor hier Unklarheiten aufkommen ;-) Danke für die Blogs, Thomas
Juli 25, 2012 12:07

Kommentar