温馨提示:代码在线浏览功能只能做为源码浏览参考,如果想更进一步了解该代码请下载:SpaceBuilder v1.1源代码
当前文件:
SpaceBuider11/BlogControls/Channel/BlogRanks.cs,打开代码结构图
SpaceBuider11/BlogControls/Channel/BlogRanks.cs,打开代码结构图
//------------------------------------------------------------------------------
// <copyright company="Tunynet">
// Copyright (c) Tunynet Inc. All rights reserved.
// </copyright>
//------------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;
using SpaceBuilder.Controls.BaseClasses;
using SpaceBuilder.Components;
using SpaceBuilder.Blogs.Components;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using SpaceBuilder.Controls.Utils;
using SpaceBuilder.Utils;
using SpaceBuilder.Controls;
using TunyNet.Data.Utils;
using TunyNet.Utils;
namespace SpaceBuilder.Blogs.Controls
{
/// <summary>
/// 显示博客排行
/// </summary>
public class BlogRanks : TemplatedWebControl
{
SBContext wlContext;
/// <summary>
/// 控件初始化时,父类会调用这个方法
/// </summary>
/// <param name="e"></param>
protected override void OnInit(EventArgs e)
{
if (SkinName == null)
ExternalSkinFileName = "Blogs/Skin-BlogRanks.ascx";
else
ExternalSkinFileName = SkinName;
wlContext = SBContext.Current;
base.OnInit(e);
}
#region Child Controls
HtmlControl rankByPointsLi;
/// <summary>
/// 积分最高
/// </summary>
HyperLink rankByPoints;
HtmlControl rankByPostCountLi;
/// <summary>
/// 文章最多
/// </summary>
HyperLink rankByPostCount;
HtmlControl rankByCommentCountLi;
/// <summary>
/// 评论最多
/// </summary>
HyperLink rankByCommentCount;
HtmlControl rankByHitTimesLi;
/// <summary>
/// 浏览最多
/// </summary>
HyperLink rankByHitTimes;
HtmlControl rankByWeekHitTimesLi;
/// <summary>
/// 本周浏览最多
/// </summary>
HyperLink rankByWeekHitTimes;
HtmlControl rankByPostDateLi;
/// <summary>
/// 最新发布
/// </summary>
HyperLink rankByPostDate;
/// <summary>
/// 分页控件
/// </summary>
Pager pager;
Pager pager2;
Repeater blogsRepeater;
#endregion
/// <summary>
/// 加载子控件,父类加载皮肤文件时会调用这个方法
/// </summary>
protected override void AttachChildControls()
{
rankByPointsLi = FindControl("RankByPointsLi") as HtmlControl;
rankByPoints = FindControl("RankByPoints") as HyperLink;
rankByPostCountLi = FindControl("RankByPostCountLi") as HtmlControl;
rankByPostCount = FindControl("RankByPostCount") as HyperLink;
rankByCommentCountLi = FindControl("RankByCommentCountLi") as HtmlControl;
rankByCommentCount = FindControl("RankByCommentCount") as HyperLink;
rankByHitTimesLi = FindControl("RankByHitTimesLi") as HtmlControl;
rankByHitTimes = FindControl("RankByHitTimes") as HyperLink;
rankByWeekHitTimesLi = FindControl("RankByWeekHitTimesLi") as HtmlControl;
rankByWeekHitTimes = FindControl("RankByWeekHitTimes") as HyperLink;
rankByPostDateLi = FindControl("RankByPostDateLi") as HtmlControl;
rankByPostDate = FindControl("RankByPostDate") as HyperLink;
pager = FindControl("Pager") as Pager;
pager2 = FindControl("Pager2") as Pager;
blogsRepeater = FindControl("BlogsRepeater") as Repeater;
blogsRepeater.ItemDataBound += new RepeaterItemEventHandler(BlogsRepeater_ItemDataBound);
}
/// <summary>
/// 控件被加载时,会先调用这个方法
/// </summary>
/// <param name="e"></param>
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
EnsureChildControls();
/*
RankBy={0}
*/
if (wlContext.GetIntFromQueryString("RankBy", 0) > 0)
this.SortBy = (SortBlogsBy)wlContext.GetIntFromQueryString("RankBy", 0);
if (!Page.IsPostBack)
DataBind();
}
/// <summary>
/// 为这个控件绑定上数据,父类会自动调用这个方法
/// </summary>
public override void DataBind()
{
base.DataBind();
Bind();
}
/// <summary>
/// 绑定数据方法具体实现
/// </summary>
void Bind()
{
Header.AddTitle(Globals.SiteName + " :: 博客(blog) - 博客排名", Context);
//string asdasd = ChannelUrls.Instance().BlogPostsForTab(10, (int)BlogThreadSortBy.TotalRatings, SortOrder.Descending);
switch (this.SortBy)
{
case SortBlogsBy.Points:
rankByPointsLi.Attributes["class"] = "selected";
break;
case SortBlogsBy.PostCount:
rankByPostCountLi.Attributes["class"] = "selected";
break;
case SortBlogsBy.CommentCount:
rankByCommentCountLi.Attributes["class"] = "selected";
break;
case SortBlogsBy.WeekHitTimes:
rankByWeekHitTimesLi.Attributes["class"] = "selected";
break;
case SortBlogsBy.HitTimes:
rankByHitTimesLi.Attributes["class"] = "selected";
break;
case SortBlogsBy.CreateDate:
rankByPostDateLi.Attributes["class"] = "selected";
break;
}
rankByPoints.NavigateUrl = ChannelUrls.Instance().BlogRanks((int)SortBlogsBy.Points);
rankByPostCount.NavigateUrl = ChannelUrls.Instance().BlogRanks((int)SortBlogsBy.PostCount);
rankByCommentCount.NavigateUrl = ChannelUrls.Instance().BlogRanks((int)SortBlogsBy.CommentCount);
rankByHitTimes.NavigateUrl = ChannelUrls.Instance().BlogRanks((int)SortBlogsBy.HitTimes);
rankByWeekHitTimes.NavigateUrl = ChannelUrls.Instance().BlogRanks((int)SortBlogsBy.WeekHitTimes);
rankByPostDate.NavigateUrl = ChannelUrls.Instance().BlogRanks((int)SortBlogsBy.CreateDate);
//ChannelUrls.Instance().
BlogQuery query = new BlogQuery();
query.SortBy = this.SortBy;
query.SortOrder = SortOrder.Descending;
query.PageIndex = pager.PageIndex;
PagingDataSet<Weblog> pds = Weblogs.GetWeblogs(query);
if (pds != null)
{
if (pager != null)
{
pager.TotalRecords = pds.TotalRecords;
pager.PageSize = query.PageSize;
}
if (pager2 != null)
{
pager2.TotalRecords = pds.TotalRecords;
pager2.PageSize = query.PageSize;
}
}
blogsRepeater.DataSource = pds.Records;
blogsRepeater.DataBind();
}
/// <summary>
/// 绑定每条记录项时,会调用这个方法
/// 目的是为了给每条记录中对应的每个子控件绑定上数据
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BlogsRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Weblog blog = (Weblog)e.Item.DataItem;
if (blog != null)
{
HyperLink blogName = e.Item.FindControl("BlogName") as HyperLink;
if (blogName != null)
{
blogName.Text = blog.SectionName;
blogName.ToolTip = string.Format("查看 {0} 的博客", blogName.Text);
blogName.Text = StringUtils.Trim(blogName.Text, 15);
blogName.NavigateUrl = UserUrls.Instance().BlogHome(blog.ApplicationKey);
blogName.Attributes["target"] = "_blank";
}
HyperLink author = e.Item.FindControl("Author") as HyperLink;
if (author != null)
{
User blogmaster=SpaceBuilder.Components.Users.FindUserByUsername(blog.ApplicationKey);
if (blogmaster != null)
{
author.Text = StringUtils.Trim(blogmaster.NickName, 8);
author.ToolTip = blogmaster.NickName;
author.NavigateUrl = UserUrls.Instance().UserProfile(blog.ApplicationKey, UserType.PersonUser);
author.Attributes["target"] = "_blank";
}
}
Literal lastUpdatedDate = e.Item.FindControl("LastUpdatedDate") as Literal;
if (lastUpdatedDate != null)
lastUpdatedDate.Text = Formatter.FormatDate(blog.MostRecentPostDate);
Literal points = e.Item.FindControl("Points") as Literal;
if (points != null)
points.Text = blog.Points.ToString();
//Literal postCount = e.Item.FindControl("ArticleCount") as Literal;
//if (postCount != null)
// postCount.Text = blog.ArticleCount.ToString();
Literal articleCount = e.Item.FindControl("PostCount") as Literal;
if (articleCount != null)
articleCount.Text = blog.PostCount.ToString();
Literal commentCount = e.Item.FindControl("CommentCount") as Literal;
if (commentCount != null)
commentCount.Text = blog.CommentCount.ToString();
Literal hitTimes = e.Item.FindControl("HitTimes") as Literal;
if (hitTimes != null)
hitTimes.Text = blog.HitTimes.ToString();
Literal weekHitTimes = e.Item.FindControl("WeekHitTimes") as Literal;
if (weekHitTimes != null)
weekHitTimes.Text = blog.WeekHitTimes.ToString();
}
}
}
#region 属性
/// <summary>
/// 排名依据
/// </summary>
private SortBlogsBy sortBy = SortBlogsBy.Points;
public SortBlogsBy SortBy
{
get { return sortBy; }
set { sortBy = value; }
}
#endregion
}
}
