例如,我有一个板块名为“灌水乐园”,为了实现版主的功能,可以按以下步骤进行:
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这个参数,不然是找不到角色的。