1
//------------------------------------------------------------------------------
2
// <copyright company="Tunynet">
3
// Copyright (c) Tunynet Network Technology Co., Ltd. All rights reserved.
4
// </copyright>
5
//------------------------------------------------------------------------------
6
7
using System;
8
using System.Collections.Generic;
9
using System.Text;
10
using System.Web.UI.WebControls;
11
using SpaceBuilder.Utils;
12
using SpaceBuilder.Blogs.Components;
13
using SpaceBuilder.Components;
14
using System.Web.UI;
15
using TunyNet.Data.Utils;
16
using TunyNet.Utils;
17
using SpaceBuilder.Controls;
18
using System.Web.UI.HtmlControls;
19
20
namespace SpaceBuilder.Blogs.Controls
21
...{
22
public class BlogThreadRepeater : Repeater
23
...{
24
SBContext wlContext = SBContext.Current;
25
int rank = 1;
26
private PagingDataSet<BlogThread> pds;
27
28
public void Bind()
29
...{
30
this.ItemDataBound += new RepeaterItemEventHandler(BlogThreadsRepeater_ItemDataBound);
31
32
BlogThreadQuery query = new BlogThreadQuery();
33
//if (wlContext.User.IsBlogAdministrator || wlContext.User.UserName == wlContext.UserDomainName)
34
//{
35
// query.IsPublicFilter = false;
36
//}
37
//else
38
//{
39
// query.IsPublicFilter = true;
40
//}
41
query.IsPublicFilter = true;
42
query.IncludeTags = false;
43
44
if (this.UserID > 0)
45
query.UserID = this.UserID;
46
47
if (!ValueHelper.IsNullOrEmpty(this.TagName))
48
query.TagName = this.TagName;
49
50
query.PageSize = this.DisplayItemCount;
51
query.IgnorePaging = true;
52
query.SortBy = this.SortBy;
53
query.SortOrder = this.SortOrder;
54
55
pds = BlogPosts.GetBlogThreads(query);
56
57
if (pds.Records.Count > 0)
58
...{
59
this.DataSource = this.pds.Records;
60
this.DataBind();
61
}
62
else
63
...{
64
this.DataSource = null;
65
this.DataBind();
66
}
67
}
68
69
protected override void Render(HtmlTextWriter writer)
70
...{
71
this.Bind();
72
if (this.pds.Records.Count > 0)
73
base.Render(writer);
74
}
75
76
事件#region 事件
77
78
protected void BlogThreadsRepeater_ItemDataBound(object Sender, RepeaterItemEventArgs e)
79
...{
80
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
81
...{
82
BlogThread post = (BlogThread)e.Item.DataItem;
83
if (post != null)
84
...{
85
HyperLink subject = e.Item.FindControl("Subject") as HyperLink;
86
if (subject != null)
87
...{
88
subject.Text = StringUtils.Trim(post.Subject, displayLength);
89
subject.ToolTip = post.Subject;
90
subject.NavigateUrl = BlogUrls.Instance().ShowPost(post);
91
subject.Attributes["target"] = "_blank";
92
}
93
94
Literal blogPostType = e.Item.FindControl("BlogPostType") as Literal;
95
if (blogPostType != null)
96
blogPostType.Text = post.BlogPostTypeText;
97
98
Literal postDate = e.Item.FindControl("PostDate") as Literal;
99
if (postDate != null)
100
postDate.Text = Formatter.FormatDatePost(post.PostDate);
101
102
HyperLink blogName = e.Item.FindControl("BlogName") as HyperLink;
103
if (blogName != null)
104
...{
105
blogName.Text = post.Weblog.SectionName;
106
if (ValueHelper.IsNullOrEmpty(blogName.Text))
107
blogName.Text = post.User.DisplayName;
108
109
blogName.ToolTip = string.Format("查看 {0}", blogName.Text);
110
blogName.NavigateUrl = UserUrls.Instance().BlogHome(post.Weblog.ApplicationKey);
111
blogName.Attributes["target"] = "_blank";
112
}
113
HtmlGenericControl rankDiv = e.Item.FindControl("RankDiv") as HtmlGenericControl;
114
Literal postRank = e.Item.FindControl("PostRank") as Literal;
115
Literal relateInfo = e.Item.FindControl("RelateInfo") as Literal;
116
RatingButton postRating = e.Item.FindControl("PostRating") as RatingButton;
117
switch (this.SortBy)
118
...{
119
case BlogThreadSortBy.MostRecent:
120
if (rankDiv != null)
121
rankDiv.Visible = false;
122
if (relateInfo != null)
123
relateInfo.Text = post.HitTimes.ToString();
124
break;
125
case BlogThreadSortBy.TotalRatings:
126
if (relateInfo != null)
127
relateInfo.Text=post.RatingSum.ToString();
128
if (rankDiv != null && postRank != null)
129
...{
130
SetPostRankImage(rankDiv, rank);
131
postRank.Text = rank.ToString();
132
}
133
break;
134
case BlogThreadSortBy.TotalReplies:
135
if (relateInfo != null)
136
relateInfo.Text = post.ReplyCount.ToString();
137
if (rankDiv != null && postRank != null)
138
...{
139
SetPostRankImage(rankDiv, rank);
140
postRank.Text = rank.ToString();
141
}
142
break;
143
case BlogThreadSortBy.TotalViews:
144
if (relateInfo != null)
145
relateInfo.Text = post.HitTimes.ToString();
146
if (rankDiv != null && postRank != null)
147
...{
148
SetPostRankImage(rankDiv, rank);
149
postRank.Text = rank.ToString();
150
}
151
break;
152
default:
153
break;
154
}
155
rank++;
156
if (simpleTab)
157
...{
158
if (this.SortBy == BlogThreadSortBy.MostRecent)
159
...{
160
if (relateInfo != null)
161
relateInfo.Visible = false;
162
}
163
else
164
...{
165
if (blogName != null)
166
blogName.Visible = false;
167
}
168
}
169
}
170
171
}
172
else if (e.Item.ItemType == ListItemType.Footer)
173
...{
174
HyperLink more = e.Item.FindControl("More") as HyperLink;
175
if (more != null)
176
...{
177
if (pds != null && pds.TotalRecords >= this.DisplayItemCount)
178
...{
179
more.Visible = true;
180
more.Text = ResourceManager.GetString("More");
181
switch (this.ThemeMode)
182
...{
183
case ThemeMode.Site:
184
more.NavigateUrl = ChannelUrls.Instance().WeblogPostRanks((int)this.SortBy);
185
break;
186
case ThemeMode.UserDomain:
187
more.NavigateUrl = UserUrls.Instance().BlogHome(wlContext.UserDomainName);
188
break;
189
case ThemeMode.ClubDomain:
190
break;
191
case ThemeMode.Manage:
192
break;
193
default:
194
break;
195
}
196
}
197
}
198
}
199
}
200
201
private void SetPostRankImage(HtmlGenericControl rankDiv, int rank)
202
...{
203
if (rank > 3)
204
rankDiv.Attributes["class"] = "blogListPlace";
205
else
206
...{
207
switch (rank)
208
...{
209
case 1:
210
rankDiv.Attributes["class"] = "blogListPlaceFirst";
211
break;
212
case 2:
213
rankDiv.Attributes["class"] = "blogListPlaceSecond";
214
break;
215
case 3:
216
rankDiv.Attributes["class"] = "blogListPlaceThird";
217
break;
218
default:
219
break;
220
}
221
}
222
}
223
224
225
#endregion
226
227
228
属性#region 属性
229
230
/**//// <summary>
231
/// 标签名称
232
/// </summary>
233
private string _tagName = string.Empty;
234
public string TagName
235
...{
236
get ...{ return _tagName; }
237
set ...{ _tagName = value; }
238
}
239
240
/**//// <summary>
241
/// blog文章作者
242
/// </summary>
243
private int _userID = -1;
244
public int UserID
245
...{
246
get ...{ return _userID; }
247
set ...{ _userID = value; }
248
}
249
250
/**//// <summary>
251
/// 文章类型
252
/// </summary>
253
private BlogPostType _blogPostType = BlogPostType.Default;
254
public BlogPostType BlogPostType
255
...{
256
get ...{ return _blogPostType; }
257
set ...{ _blogPostType = value; }
258
}
259
260
private int displayItemCount = 10;
261
/**//// <summary>
262
/// 最多显示记录数
263
/// </summary>
264
public int DisplayItemCount
265
...{
266
get
267
...{
268
if (wlContext.GetIntFromQueryString("DisplayItemCount", 0) > 0)
269
this.displayItemCount = wlContext.GetIntFromQueryString("DisplayItemCount", 0);
270
271
return this.displayItemCount;
272
}
273
set ...{ this.displayItemCount = value; }
274
}
275
276
private BlogThreadSortBy _sortBy = BlogThreadSortBy.MostRecent;
277
public BlogThreadSortBy SortBy
278
...{
279
get
280
...{
281
if (wlContext.GetIntFromQueryString("SortBy", 0) > 0)
282
this._sortBy = (BlogThreadSortBy)wlContext.GetIntFromQueryString("SortBy", 0);
283
284
return