我相信大家都会想知道有那些人看过了自己的“杰作”,CCS中原来记录了PV(PageView)的来源,通过修改我们可以实现访问者跟踪功能。
一、修改CCS源码
1)打开\src\Components\Components\Referral.cs(访问记录实体类),添加代码
private string _visitor;
///
/// getter and setter for Visitor name
///
public string Visitor
{
get
{
return this._visitor;
}
set
{
this._visitor = value;
}
}
2)打开\src\blogs\controls\entryviewcontainer.cs,修改void BindData(),goto line75把
Referral r = new Referral();
r.SettingsID = CSContext.Current.SiteSettings.SettingsID;
r.SectionID = we.SectionID;
r.PostID = we.PostID;
Referrals.AddToQueue(Context,CurrentWeblog.ReferralFilter,r);
改为
Referral r = new Referral();
r.SettingsID = CSContext.Current.SiteSettings.SettingsID;
r.SectionID = we.SectionID;
r.PostID = we.PostID;
r.Vistor = CSContext.Current.UserName; // record current visitor name
Referrals.AddToQueue(Context,CurrentWeblog.ReferralFilter,r);
3)打开src\data providers\sqldataprovider\sqlcommondataprovider.cs,修改public override void SaveReferralList(ArrayList referrals)为
public override void SaveReferralList(ArrayList referrals)
{
using( SqlConnection connection = GetSqlConnection() )
{
SqlCommand command = new SqlCommand( this.databaseOwner + ".cs_referrals_Add", connection);
// Mark as stored procedure
command.CommandType = CommandType.StoredProcedure;
// Add parameters
command.Parameters.Add("@SettingsID", SqlDbType.Int, 4);
command.Parameters.Add("@SectionID", SqlDbType.Int, 4);
command.Parameters.Add("@PostID", SqlDbType.Int, 4);
command.Parameters.Add("@UrlID", SqlDbType.Int, 4);
command.Parameters.Add("@Url", SqlDbType.NVarChar, 512);
command.Parameters.Add("@Visitor", SqlDbType.NVarChar, 64); // visitor name parameter
connection.Open();
foreach(Referral referral in referrals)
{
command.Parameters["@SettingsID"].Value = referral.SettingsID;
command.Parameters["@SectionID"].Value = referral.SectionID;
command.Parameters["@PostID"].Value = referral.PostID;
command.Parameters["@UrlID"].Value = referral.UrlID;
command.Parameters["@Url"].Value = referral.Url;
command.Parameters["@Visitor"].Value = referral.Vistor;
command.ExecuteNonQuery();
}
connection.Close();
command.Dispose();
connection.Dispose();
}
}
修改public override ReferralSet GetReferrals(Referral r, int pageSize, int pageIndex),把while(reader.read())代码段改为
while(reader.Read())
{
referral = new Referral();
referral.PostID = (int)reader["PostID"];
referral.SectionID = (int)reader["SectionID"];
referral.LastDate = (DateTime)reader["LastDate"];
referral.Hits = (int)reader["Hits"];
referral.Url = reader["Url"] as string;
referral.Title = reader["Subject"] as string;
referral.Vistor = reader["Visitor"] as string;
rs.Referrals.Add(referral);
}
4)打开\src\themes\default\skins\blog\Skin-WebReferralList.ascx,在html代码
<th class="column" width="*"><CS:ResourceControl runat="server" ResourceName="Referrals_Url" ID="Resourcecontrol1"/>th>
下面插入
<th class="column" width="150px"><CS:ResourceControl runat="server" ResourceName="Referrals_Visitor" ID="Resourcecontrol5"/>th>
然后修改为
<ItemTemplate>
<tr>
<td><asp:HyperLink ID = "ReferralLink" Runat = "Server" />td>
<td align="center"><asp:Literal ID = "Visitor" Runat = "Server" />td>
<td><asp:HyperLink ID = "PostLink" Runat = "Server" />
<td align="center"><asp:Literal ID = "ReferralHits" Runat = "server" />td>
<td align="center"><asp:Literal ID = "ReferralDate" Runat = "server" />td>
tr>
ItemTemplate>
5)打开\src\blogs\controls\admin\webblogreferrallist.ascx,修改private void referralRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)为
private void referralRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Referral r = e.Item.DataItem as Referral;
if(r != null)
{
HyperLink link = e.Item.FindControl("ReferralLink") as HyperLink;
Literal hits = e.Item.FindControl("ReferralHits") as Literal;
Literal last = e.Item.FindControl("ReferralDate") as Literal;
Literal visitor = e.Item.FindControl("Visitor") as Literal; // add the visitor column
HyperLink sl = e.Item.FindControl("PostLink") as HyperLink;
if(r.Title.Length <= 100)
sl.Text = r.Title;
else
sl.Text = r.Title.Substring(0,100);
sl.NavigateUrl = BlogUrls.Instance().ShortLink(r.PostID);
if(r.Url.Length <= 100)
link.Text = Context.Server.HtmlEncode(r.Url);
else
link.Text = Context.Server.HtmlEncode(r.Url.Substring(0,100));
link.NavigateUrl = r.Url;
visitor.Text = r.Vistor; // bind the visitor column
hits.Text = r.Hits.ToString();
last.Text = r.LastDate.ToString(DateFormat);
}
}
}
6)修改相应Language的Resource.xml文件,添加Referrals_Visitor字符串
二、修改数据库
1)修改cs_referrals数据表,添加Visitor列,属性为nvarchar(64), allow null,或直接执行
ALTER TABLE cs_Referrals ADD Visitor nvarchar(64) NULL
2)修改存储过程cs_referrals_Add,可直接执行如下sql语句
ALTER Proc dbo.cs_referrals_Add
(
@UrlID int,
@Url nvarchar(512),
@SettingsID int,
@SectionID int,
@PostID int,
@Visitor nvarchar(64)
)
as
SET Transaction Isolation Level Read UNCOMMITTED
exec cs_Urls_Add @UrlID, @Url
Declare @ReferralID int
Select @ReferralID = ReferralID FROM cs_Referrals where SettingsID = @SettingsID and SectionID = @SectionID and UrlID = @UrlID
if(@ReferralID is null)
Begin
Insert cs_Referrals (SettingsID, SectionID, PostID, UrlID, Hits, LastDate, Visitor)
Values (@SettingsID, @SectionID, @PostID, @UrlID, 1, getdate(), @Visitor)
End
Else
Begin
Update cs_Referrals
Set
Hits = Hits + 1,
LastDate = getdate()
Where ReferralID = @ReferralID
End
3)修改cs_referrals_Get,直接执行下面的sql语句
ALTER Proc dbo.cs_referrals_Get
(
@SettingsID int,
@SectionID int,
@PostID int,
@PageSize int,
@PageIndex int,
@TotalRecords int output
)
as
SET Transaction Isolation Level Read UNCOMMITTED
DECLARE @RowsToReturn int
DECLARE @PageLowerBound int
DECLARE @PageUpperBound int
SET @RowsToReturn = @PageSize * (@PageIndex + 1)
SET ROWCOUNT @RowsToReturn
SET @PageLowerBound = @PageSize * @PageIndex
SET @PageUpperBound = @PageLowerBound + @PageSize + 1
CREATE TABLE #PageIndex
(
IndexID int IDENTITY (1, 1) NOT NULL,
ReferralID int
)
if @PostID <> -1
Begin
Insert #PageIndex (ReferralID)
Select ReferralID FROM cs_Referrals where SettingsID = @SettingsID and SectionID = @SectionID and PostID = @PostID order by LastDate desc
-- Reset rowcount and get count of total records
SET ROWCOUNT 0
Select @TotalRecords = count(*) From cs_Referrals Where SettingsID = @SettingsID and SectionID = @SectionID and PostID = @PostID
End
Else
Begin
Insert #PageIndex (ReferralID)
Select ReferralID FROM cs_Referrals where SettingsID = @SettingsID and SectionID = @SectionID order by ReferralID
-- Reset rowcount and get count of total records
SET ROWCOUNT 0
Select @TotalRecords = count(*) From cs_Referrals Where SettingsID = @SettingsID and SectionID = @SectionID
End
Select cs_Posts.Subject, cs_Referrals.ReferralID, cs_Referrals.SettingsID, cs_Referrals.SectionID, cs_Posts.PostID, Url, Hits, LastDate, cs_Referrals.Visitor
FROM cs_Referrals, cs_Urls, #PageIndex, cs_Posts
Where
cs_Referrals.ReferralID = #PageIndex.ReferralID and
cs_Urls.UrlID = cs_Referrals.UrlID and
#PageIndex.IndexID > @PageLowerBound AND
#PageIndex.IndexID < @PageUpperBound AND
cs_Posts.PostID = cs_Referrals.PostID
Order by IndexID
--Select @TotalRecords = Count(*) FROM #PageIndex
DROP Table #PageIndex
适用于CCS1.1,学习CCS中,感谢宝玉~~