我相信大家都會(huì)想知道有那些人看過了自己的“杰作”,CCS中原來記錄了PV(PageView)的來源,通過修改我們可以實(shí)現(xiàn)訪問者跟蹤功能。
一、修改CCS源碼
1)打開\src\Components\Components\Referral.cs(訪問記錄實(shí)體類),添加代碼
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 nameReferrals.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 parameterconnection.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 columnHyperLink 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)修改相應(yīng)Language的Resource.xml文件,添加Referrals_Visitor字符串
二、修改數(shù)據(jù)庫
1)修改cs_referrals數(shù)據(jù)表,添加Visitor列,屬性為nvarchar(64), allow null,或直接執(zhí)行
ALTER TABLE cs_Referrals ADD Visitor nvarchar(64) NULL
2)修改存儲(chǔ)過程cs_referrals_Add,可直接執(zhí)行如下sql語句
ALTER Proc dbo.cs_referrals_Add(@UrlID int,@Url nvarchar(512),@SettingsID int,@SectionID int,@PostID int,@Visitor nvarchar(64))asSET Transaction Isolation Level Read UNCOMMITTEDexec cs_Urls_Add @UrlID, @UrlDeclare @ReferralID intSelect @ReferralID = ReferralID FROM cs_Referrals where SettingsID = @SettingsID and SectionID = @SectionID and UrlID = @UrlIDif(@ReferralID is null)BeginInsert cs_Referrals (SettingsID, SectionID, PostID, UrlID, Hits, LastDate, Visitor)Values (@SettingsID, @SectionID, @PostID, @UrlID, 1, getdate(), @Visitor)EndElseBeginUpdate cs_ReferralsSetHits = Hits + 1,LastDate = getdate()Where ReferralID = @ReferralIDEnd
3)修改cs_referrals_Get,直接執(zhí)行下面的sql語句
適用于CCS1.1,學(xué)習(xí)CCS中,感謝寶玉~~ALTER Proc dbo.cs_referrals_Get(@SettingsID int,@SectionID int,@PostID int,@PageSize int,@PageIndex int,@TotalRecords int output)asSET Transaction Isolation Level Read UNCOMMITTEDDECLARE @RowsToReturn intDECLARE @PageLowerBound intDECLARE @PageUpperBound intSET @RowsToReturn = @PageSize * (@PageIndex + 1)SET ROWCOUNT @RowsToReturnSET @PageLowerBound = @PageSize * @PageIndexSET @PageUpperBound = @PageLowerBound + @PageSize + 1CREATE TABLE #PageIndex(IndexID int IDENTITY (1, 1) NOT NULL,ReferralID int)if @PostID <> -1BeginInsert #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 recordsSET ROWCOUNT 0Select @TotalRecords = count(*) From cs_Referrals Where SettingsID = @SettingsID and SectionID = @SectionID and PostID = @PostIDEndElseBeginInsert #PageIndex (ReferralID)Select ReferralID FROM cs_Referrals where SettingsID = @SettingsID and SectionID = @SectionID order by ReferralID-- Reset rowcount and get count of total recordsSET ROWCOUNT 0Select @TotalRecords = count(*) From cs_Referrals Where SettingsID = @SettingsID and SectionID = @SectionIDEndSelect cs_Posts.Subject, cs_Referrals.ReferralID, cs_Referrals.SettingsID, cs_Referrals.SectionID, cs_Posts.PostID, Url, Hits, LastDate, cs_Referrals.VisitorFROM cs_Referrals, cs_Urls, #PageIndex, cs_PostsWherecs_Referrals.ReferralID = #PageIndex.ReferralID andcs_Urls.UrlID = cs_Referrals.UrlID and#PageIndex.IndexID > @PageLowerBound AND#PageIndex.IndexID < @PageUpperBound ANDcs_Posts.PostID = cs_Referrals.PostIDOrder by IndexID--Select @TotalRecords = Count(*) FROM #PageIndexDROP Table #PageIndex
聯(lián)系客服