增加CCS1.1的Blog日志访问者记录功能

我相信大家都会想知道有那些人看过了自己的“杰作”,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中,感谢宝玉~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值