增加论坛列表显示版主的功能
CS中本身没有专门的版主这个概念。它使用了基于角色的授权机制。我们可以使用这个机制实现版主这个功能。
例如,我有一个板块名为“灌水乐园”,为了实现版主的功能,可以按以下步骤进行:
1. 添加一个角色用于充当这个版块的版主,角色名为“灌水乐意管理员”(这里的角色名是不能随意写的,必须有一定的规范,以后会用到的)。
2. 修改此角色的默认权限,使之与“Everyone”的权限一样。这是因为新建的角色的所有权限都是受限的。
3. 将“灌水乐园管理员”这个角色添加到版块“灌水乐意”的权限映射列表中,并修改其权限,使之足以管理此版块。
4. 如果我希望用户“AA”出任版主,就为“AA”添加角色“灌水乐园管理员”。
设置某个用户为管理员就是这么几个步骤。
下面我们来看,怎么样在论坛列表中显示版主列表。示例请看牛头网论坛。
为了实现此功能,我们需要进行以下几个步骤的工作:
1. 编写版主显示控件(ForumManagersView);
2. 修改Resource.xml 文件,添加需要几个需要用到的字符串资源;
3. 修改View-ForumGroupView.ascx 控件,使之能够显示版主控件;
1. 编写版主显示控件(ForumManagersView)
我的代码如下:
代码很简单,这里就不在说了。大家可以根据自己的需要更改版主列表的显示方式,我在这里用的是一个div,横向显示。
2. 修改Resource.xml 文件,添加需要几个需要用到的字符串资源:
这里就用到了角色名称后缀,这也就是为什么充当版主的角色的名称不能随便取的原因,当然,这里也可以根据自己的需要更改后缀,或者用更复杂的表达示,不过这也是没有什么必要的。
3. 修改View-ForumGroupView.ascx 控件,使之能够显示版主控件
这里就需要大家自己更加情况添加了,具体方法就不用我说了吧。我是把版主列表放在版块描述信息上面,这里要注意的就是,一定要设置一下ForumManagersView这个控件的ForumName这个参数,不然是找不到角色的。
例如,我有一个板块名为“灌水乐园”,为了实现版主的功能,可以按以下步骤进行:
1. 添加一个角色用于充当这个版块的版主,角色名为“灌水乐意管理员”(这里的角色名是不能随意写的,必须有一定的规范,以后会用到的)。
2. 修改此角色的默认权限,使之与“Everyone”的权限一样。这是因为新建的角色的所有权限都是受限的。
3. 将“灌水乐园管理员”这个角色添加到版块“灌水乐意”的权限映射列表中,并修改其权限,使之足以管理此版块。
4. 如果我希望用户“AA”出任版主,就为“AA”添加角色“灌水乐园管理员”。
设置某个用户为管理员就是这么几个步骤。
下面我们来看,怎么样在论坛列表中显示版主列表。示例请看牛头网论坛。
为了实现此功能,我们需要进行以下几个步骤的工作:
1. 编写版主显示控件(ForumManagersView);
2. 修改Resource.xml 文件,添加需要几个需要用到的字符串资源;
3. 修改View-ForumGroupView.ascx 控件,使之能够显示版主控件;
1. 编写版主显示控件(ForumManagersView)
我的代码如下:
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using CommunityServer.Controls;
using CommunityServer.Components;
namespace Newtor.CS.Forums.Controls
{
/// <summary>
/// ForumManagerView 的摘要说明。
/// </summary>
public class ForumManagersView : PlaceHolder
{
public ForumManagersView()
{
}
protected override void OnInit(EventArgs e)
{
this.PreRender +=new EventHandler(ForumManagersView_PreRender);
base.OnInit (e);
}
#region ForumName 属性
private string forumName;
/// <summary>
///
/// </summary>
public string ForumName
{
get
{
return forumName;
}
set
{
forumName = value;
}
}
#endregion
public void BindData()
{
System.Guid roleID;
try
{
Role role = Roles.GetRole(this.ForumName+ResourceManager.GetString("ForumManagersView_RoleName_Postfix"));
roleID = role.RoleID;
}
catch( CSException e )
{
if( e.ExceptionType == CSExceptionType.RoleNotFound )
return;
else
throw e;
}
UserSet users = Roles.UsersInRole(0,10,SortUsersBy.LastActiveDate,SortOrder.Descending,roleID);
if ( !users.HasResults ) return;
HtmlGenericControl div = new HtmlGenericControl("div");
div.Controls.Clear();
div.Controls.Add(new LiteralControl(ResourceManager.GetString("ForumManagersView_Prefix")));
foreach ( User user in users.Users )
{
HyperLink userLink = new HyperLink();
userLink.NavigateUrl = Globals.GetSiteUrls().UserProfile(user.UserID);
userLink.Text = user.Username;
div.Controls.Add(userLink);
div.Controls.Add(new LiteralControl(ResourceManager.GetString("ForumManagersView_ManagersList_Seperator")));
}
if ( div.Controls.Count > 2 )
div.Controls.RemoveAt(div.Controls.Count - 1 );
this.Controls.Clear();
this.Controls.Add(div);
}
private void ForumManagersView_PreRender(object sender, EventArgs e)
{
BindData();
}
}
}
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using CommunityServer.Controls;
using CommunityServer.Components;
namespace Newtor.CS.Forums.Controls
{
/// <summary>
/// ForumManagerView 的摘要说明。
/// </summary>
public class ForumManagersView : PlaceHolder
{
public ForumManagersView()
{
}
protected override void OnInit(EventArgs e)
{
this.PreRender +=new EventHandler(ForumManagersView_PreRender);
base.OnInit (e);
}
#region ForumName 属性
private string forumName;
/// <summary>
///
/// </summary>
public string ForumName
{
get
{
return forumName;
}
set
{
forumName = value;
}
}
#endregion
public void BindData()
{
System.Guid roleID;
try
{
Role role = Roles.GetRole(this.ForumName+ResourceManager.GetString("ForumManagersView_RoleName_Postfix"));
roleID = role.RoleID;
}
catch( CSException e )
{
if( e.ExceptionType == CSExceptionType.RoleNotFound )
return;
else
throw e;
}
UserSet users = Roles.UsersInRole(0,10,SortUsersBy.LastActiveDate,SortOrder.Descending,roleID);
if ( !users.HasResults ) return;
HtmlGenericControl div = new HtmlGenericControl("div");
div.Controls.Clear();
div.Controls.Add(new LiteralControl(ResourceManager.GetString("ForumManagersView_Prefix")));
foreach ( User user in users.Users )
{
HyperLink userLink = new HyperLink();
userLink.NavigateUrl = Globals.GetSiteUrls().UserProfile(user.UserID);
userLink.Text = user.Username;
div.Controls.Add(userLink);
div.Controls.Add(new LiteralControl(ResourceManager.GetString("ForumManagersView_ManagersList_Seperator")));
}
if ( div.Controls.Count > 2 )
div.Controls.RemoveAt(div.Controls.Count - 1 );
this.Controls.Clear();
this.Controls.Add(div);
}
private void ForumManagersView_PreRender(object sender, EventArgs e)
{
BindData();
}
}
}
代码很简单,这里就不在说了。大家可以根据自己的需要更改版主列表的显示方式,我在这里用的是一个div,横向显示。
2. 修改Resource.xml 文件,添加需要几个需要用到的字符串资源:
<resource name="ForumManagersView_Prefix">版主: </resource>
<resource name="ForumManagersView_RoleName_Postfix">管理员</resource>
<resource name="ForumManagersView_ManagersList_Seperator"> , </resource>
<resource name="ForumManagersView_RoleName_Postfix">管理员</resource>
<resource name="ForumManagersView_ManagersList_Seperator"> , </resource>
这里就用到了角色名称后缀,这也就是为什么充当版主的角色的名称不能随便取的原因,当然,这里也可以根据自己的需要更改后缀,或者用更复杂的表达示,不过这也是没有什么必要的。
3. 修改View-ForumGroupView.ascx 控件,使之能够显示版主控件
这里就需要大家自己更加情况添加了,具体方法就不用我说了吧。我是把版主列表放在版块描述信息上面,这里要注意的就是,一定要设置一下ForumManagersView这个控件的ForumName这个参数,不然是找不到角色的。