Umbraco CMS:如何制作命中计数器

本文关键字:计数器 何制作 CMS Umbraco | 更新日期: 2023-09-27 18:01:30

我需要为Umbraco CMS制作一个命中计数器。有办法吗?我想跟踪热门文章并在主页上显示它们

Umbraco CMS:如何制作命中计数器

您必须自己实现,这不是现成的。你可以这样做:

首先你需要知道你想要计算什么:一个url被请求的次数?或者查看节点的次数(同一节点可能在多个url下可用)?点击或访问,如果用户重新加载页面,计数器是否应该上升?

对于实际的实现,您将需要三个部分:


1。客户端请求

当一个页面被查看时,它应该被跟踪,你需要触发一个请求到服务器,允许你为那个页面增加计数器。

有几种方法可以实现这一点,我建议通过包含图片请求 (1px transparent gif)来实现。 例如:

<img src="/hits/4882/counter.gif" />

4882是文章页面的节点id,每个文章页面的节点id不同。

你应该在母版页(模板)中包含生成url的代码。


2。服务器端处理程序

在服务器端,您需要一个处理程序来响应图片请求。HttpHandler非常适合这项工作。你可以在一个单独的项目中创建它,将dll放到bin文件夹中,然后添加必要的web。配置设置。

处理程序必须完成以下操作:

  • 确定图片请求来自哪个url/节点 -通过使用请求的HTTP_REFERRER头,或通过使用url中的信息(如我上面的例子中图像url中的节点id)。
  • 增加该页面的计数器 -您需要向数据库添加一个表,简单地用一列表示url或节点id,一列表示应该执行的请求数。
  • 发送回一个图像并确保客户端没有缓存它(设置过期头等)

3。显示最受欢迎的链接

为了在一个页面上显示最热门的文章,你需要一个Umbraco用户控件来查询数据库中的表并显示最受欢迎的链接。

天哪,又是90年代初吗?谷歌分析呢?

<%@ Control Language=" c# " AutoEventWireup="true" CodeFile="counter. asx .cs" Inherits="counter" %>

后面代码的代码:

c#

    protected void Page_Load(object sender, EventArgs e)
    {
        this.countMe();
        DataSet tmpDs = new DataSet();
        tmpDs.ReadXml(Server.MapPath("~/counter.xml"));
        lblCounter.Text = tmpDs.Tables[0].Rows[0]["hits"].ToString();
    }
    private void countMe()
    {
        DataSet tmpDs = new DataSet();
        tmpDs.ReadXml(Server.MapPath("~/counter.xml"));
        int hits = Int32.Parse(tmpDs.Tables[0].Rows[0]["hits"].ToString());
        hits += 1;
        tmpDs.Tables[0].Rows[0]["hits"] = hits.ToString();
        tmpDs.WriteXml(Server.MapPath("~/counter.xml"));
    }

VB。净

    Protected Sub Page_Load(sender As Object, e As EventArgs)
        Me.countMe()
        Dim tmpDs As New DataSet()
        tmpDs.ReadXml(Server.MapPath("~/counter.xml"))
        lblCounter.Text = tmpDs.Tables(0).Rows(0)("hits").ToString()
    End Sub
    Private Sub countMe()
        Dim tmpDs As New DataSet()
        tmpDs.ReadXml(Server.MapPath("~/counter.xml"))
        Dim hits As Integer = Int32.Parse(tmpDs.Tables(0).Rows(0)("hits").ToString())
        hits += 1
        tmpDs.Tables(0).Rows(0)("hits") = hits.ToString()
        tmpDs.WriteXml(Server.MapPath("~/counter.xml"))
    End Sub

然后,您需要在根目录中有一个xml文件,以使代码也能工作。XML文件看起来像这样:

<?xml version="1.0" encoding="utf-8" ?>
<counter>
  <count>
     <hits>0</hits>
  </count>