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