我需要为Umbraco CMS制作一个点击计数器。有办法吗?我想跟踪热门文章并在主页上显示。
答案 0 :(得分:4)
你必须自己实现这个,这不是开箱即用的。以下是您可以采取的措施:
首先,您需要知道您想要计算的内容:请求网址的次数?或者他查看节点的次数(同一节点可能在几个URL下可用)?点击或访问,如果用户重新加载页面,计数器会上升吗?
对于实际实施,您需要三个部分:
每当查看应该跟踪的页面时,您需要向服务器触发一个请求,该请求允许您为该页面增加计数器。
有几种方法可以实现这一点,我建议通过添加图片请求(1px透明gif)来实现这一目标。
例如:
<img src="/hits/4882/counter.gif" />
4882 是文章页面的节点ID,在每篇文章页面上都不同。
您可能应该在母版页(模板)中包含生成网址的代码。
在服务器端,您需要一个响应图片请求的处理程序。 HttpHandler非常适合这项工作。您可以在单独的项目中创建它,将dll放在bin文件夹中并添加必要的web.config设置。
处理程序必须执行以下操作:
HTTP_REFERRER
标头,或使用网址中的信息(如节点ID)在图像的网址中,如上例所示。)为了在页面上显示热门文章,您需要一个Umbraco user control来查询数据库中的表格并显示最受欢迎的链接。
答案 1 :(得分:1)
答案 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>