// ********************************************************
// 網頁計數器控件
// Designed by Faib Studio.
// Copyright 2007
// Email [email protected] or QQ 55570729
// ********************************************************
using System;
using System.ComponentModel;
using System.Web.UI;
using System.Web.UI.Design;
using System.Web.UI.WebControls;
using System.Drawing.Design;
using System.IO;
using System.Text;
namespace FaibClass.WebControls
{
[ToolboxData("<{0}:Counter runat=server></{0}:Counter>")]
public class Counter : Label
{
#region 私有變量
private string m_FileName = "";
private string m_ImageUrl = "";
private int m_Length = 5;
private int m_TotalCount, m_TodayCount;
private bool m_OnlyIcon = false;
#endregion
public Counter()
{
}
#region 屬性
[Browsable(false)]
public override string Text
{
get { return base.Text; }
set { base.Text = value; }
}
[Category("Appearance"),
Description("保存計數的文本文件路徑。"),
Editor(typeof(UrlEditor), typeof(UITypeEditor))]
public string FileName
{
get { return m_FileName; }
set { m_FileName = value; }
}
[Category("Appearance"),
Description("使用圖象來顯示計數,數字使用通配符?代替。"),
Editor(typeof(ImageUrlEditor), typeof(UITypeEditor))]
public string ImageUrl
{
get { return m_ImageUrl; }
set { m_ImageUrl = value; }
}
[Category("Appearance"),
Description("顯示計數的默認長度。"),
DefaultValue(5)]
public int Length
{
get { return m_Length; }
set { m_Length = value; }
}
[Category("Appearance"),
Description("是否只在界面上顯示一個圖標。"),
DefaultValue(false)]
public bool OnlyIcon
{
get { return m_OnlyIcon; }
set { m_OnlyIcon = value; }
}
//總訪問量
[Browsable(false)]
public int TotalCount
{
get { return m_TotalCount; }
set { m_TotalCount = value; }
}
//今日訪問量
[Browsable(false)]
public int TodayCount
{
get { return m_TodayCount; }
set { m_TodayCount = value; }
}
#endregion
#region 公共方法
protected override void OnLoad(EventArgs e)
{
int counter = 0, todaycounter = 0;
DateTime today = DateTime.MinValue;
StringBuilder builder = new StringBuilder();
if (Util.IsDesignMode(Page))//是否設計模式
{
Random rad = new Random();
if (m_ImageUrl.Length == 0)
{
if (m_OnlyIcon)
{
builder.Append("<img src=/"" + m_ImageUrl + "/" align=absmiddle>");
}
else
{
for (int i = 0; i < m_Length; i++)
{
builder.Append(rad.Next(9).ToString());
}
}
}
else
{
if (m_OnlyIcon)
{
builder.Append("<img src=/"" + m_ImageUrl + "/" align=absmiddle>");
}
else
{
for (int i = 0; i < m_Length; i++)
{
builder.Append("<img src=/"" + m_ImageUrl.Replace("?", rad.Next(9).ToString()) + "/" align=absmiddle>");
}
}
}
}
else
{
bool blnExists = File.Exists(Page.Server.MapPath(m_FileName));
if (blnExists)//讀出訪問量
{
StreamReader str = File.OpenText(Page.Server.MapPath(m_FileName));
try
{
counter = int.Parse(str.ReadLine());
todaycounter = int.Parse(str.ReadLine());
today = DateTime.Parse(str.ReadLine());
}
catch
{
throw new Exception("文件內容爲空,請將文件刪除");
}
finally
{
str.Close();
}
}
if (Page.Session["__Counter"] == null)
{
counter++;
todaycounter++;
if (today != DateTime.Today)
{
today = DateTime.Today;
}
}
string s = counter.ToString();
Attributes.Add("title", "總計: " + s + ", 今日: " + todaycounter.ToString());
if (m_OnlyIcon)
{
builder.Append("<img src=/"" + m_ImageUrl + "/" align=absmiddle>");
}
else
{
if (s.Length < m_Length)
{
if (m_ImageUrl.Length == 0)
{
for (int i = 0; i < m_Length - s.Length; i++)
{
builder.Append("0");
}
}
else
{
for (int i = 0; i < m_Length - s.Length; i++)
{
builder.Append("<img src=/"" + m_ImageUrl.Replace("?", "0") + "/" align=absmiddle>");
}
}
}
if (m_ImageUrl.Length == 0)
{
builder.Append(s);
}
else
{
for (int i = 0; i < s.Length; i++)
{
builder.Append("<img src=/"" + m_ImageUrl.Replace("?", s.Substring(i, 1)) + "/" align=absmiddle>");
}
}
}
//將新的訪問量寫入文件
if (Page.Session["__Counter"] == null)
{
StreamWriter stw = new StreamWriter(Page.Server.MapPath(m_FileName));
stw.WriteLine(counter.ToString());//寫入總計
stw.WriteLine(todaycounter.ToString());//寫入日期
stw.WriteLine(today.ToShortDateString());//寫入今日訪問量
stw.Close();
Page.Session["__Counter"] = 1;//標識
}
}
Text = builder.ToString();
m_TotalCount = counter;
m_TodayCount = todaycounter;
base.OnLoad(e);
}
#endregion
}
}
一個簡單的網頁計數器
今天寫了一個最簡單的計數器,實現的功能很簡單,可以記錄總訪問數及今日訪問數。代碼如下:
複製 保存
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.