Umbraco CMS:如何打击计数器

时间:2011-07-08 16:45:28

标签: c# umbraco

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

3 个答案:

答案 0 :(得分:4)

你必须自己实现这个,这不是开箱即用的。以下是您可以采取的措施:

首先,您需要知道您想要计算的内容:请求网址的次数?或者他查看节点的次数(同一节点可能在几个URL下可用)?点击或访问,如果用户重新加载页面,计数器会上升吗?

对于实际实施,您需要三个部分:


1。客户请求

每当查看应该跟踪的页面时,您需要向服务器触发一个请求,该请求允许您为该页面增加计数器。

有几种方法可以实现这一点,我建议通过添加图片请求(1px透明gif)来实现这一目标。

例如:

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

4882 是文章页面的节点ID,在每篇文章页面上都不同。

您可能应该在母版页(模板)中包含生成网址的代码。


2。服务器端处理程序

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

处理程序必须执行以下操作:

  • 确定图片请求来自哪个网址/节点 - 使用请求的HTTP_REFERRER标头,或使用网址中的信息(如节点ID)在图像的网址中,如上例所示。)
  • 为该页面增加计数器 - 您需要向数据库添加一个表,一个简单的用于url或node id的列和一个包含请求数量的列应该做
  • 发回图片并确保客户端不对其进行缓存(设置过期标题等)。

3。显示最受欢迎的链接

为了在页面上显示热门文章,您需要一个Umbraco user control来查询数据库中的表格并显示最受欢迎的链接。

答案 1 :(得分:1)

Blimey,它是90年代初期的吗?那么Google analytics呢?

答案 2 :(得分:1)

&lt;%@ Control Language =“C#”AutoEventWireup =“true”CodeFile =“counter.ascx.cs”Inherits =“counter”%&gt;

背后代码的代码:

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.NET

    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>