Community Server 插件开发二
因为我们的程序要求能够在后台也能进行管理,所以必须CS的后台也进行扩展,经过前台,导航栏的增加后,在后台增加我们也有了一定的经验,我发现CS后台的导航栏配置是在Web\ControlPanel\Tabs.config中定义的
<?xml version="1.0" encoding="utf-8"?>
<TabCollection>
<Tabs>
<Tab resourcename="CP_Tabs_Dashboard" urlname="controlpanel" name="Home" isRoot = "true" />
<Tab resourcename="CP_Tabs_MyBlogs" href="~/controlpanel/blogs" name="Blogs" iTabType="CommunityServer.ControlPanel.Controls.WeblogsItemValidator,CommunityServer.Web" />
<Tab resourcename="CP_Tabs_MyPhotos" urlname="gallery_ControlPanel_Photos" name="Photos" iTabType="CommunityServer.ControlPanel.Controls.GalleriesItemValidator,CommunityServer.Web" />
<Tab resourcename="CP_Tabs_LocalPhotos" href="~/controlpanel/localphotos" name="LocalPhotos" iTabType="Papersnake.LocalPhoto.ControlPanel.Controls.LocalPhotoValidator,Papersnake.LocalPhoto" />
<Tab resourcename="CP_Tabs_MyFiles" href="~/controlpanel/files" name="Files" iTabType="CommunityServer.ControlPanel.Controls.FilesItemValidator,CommunityServer.Web" />
<Tab resourcename="CP_Tabs_ForumsModeration" href="~/controlpanel/moderation" name="ForumModeration" roles = "SystemAdministrator;ForumsAdministrator;Moderator" iTabType="CommunityServer.ControlPanel.Controls.ForumsItemValidator,CommunityServer.Web" />
<Tab resourcename="CP_Tabs_Administration" urlname="settings_ControlPanel_Home" name="Setup" roles="SystemAdministrator;BlogAdministrator;ForumsAdministrator;GalleryAdministrator;ReaderAdministrator;MembershipAdministrator;FileAdministrator" />
<Tab resourcename="CP_Tabs_Reporting" urlname="settings_ControlPanel_Reporting" name="Reporting" roles="SystemAdministrator;BlogAdministrator;ForumsAdministrator;GalleryAdministrator;ReaderAdministrator;MembershipAdministrator;FileAdministrator" />
</Tabs>
</TabCollection>
我也在这个文件中添加了一条相应的条目,有几个属性简单的介绍一下
resourcename:资源名,用于本地化,我们要在对应的语言资源文件中添加相应条目<resource name="CP_Tabs_LocalPhotos">本地相册</resource>
urlname和href:都是定义这个Tab所指向的页面路径,但两个也各有不同,href是直接提供所指向的路径,而urlname是众siteurls.config中去获取相应的路径
name:应用程序名
iTabType:这个是定义的Tab类型,把的值是一个对应的程序IsValid方法,我也没有搞得太明白,但是似乎只是返回一个bool值用来判断这个应用程序有没有在后台里被禁用.
roles:看单词也看出来了,肯定是定义其访问权限
关于iTabType我们也在自己的程序集中完成了这个方法,因为如果要改成也能在后台中进行程序的起用或禁用管理就必需修改CS中原有的代码,也就需要对CS重新编译,这违背了我整个程序只是做为CS中一个插件的设想,对CS一些ASPX页面的修改是不用重新编译整个项目的,便是对一些.CS文件进行修改就不得不进行重编译,所以我在我自己的IsValid直接返回一个true值
using System;
using System.Collections.Generic;
using System.Text;
using CommunityServer.Components;
using CommunityServer.Controls;
namespace Papersnake.LocalPhoto.ControlPanel.Controls
{
public class LocalPhotoValidator : IMenuItem
{
public LocalPhotoValidator()
{
}
IMenuItem 成员
}
}
最后在CS的web\controlpanel\下新建一个localphotos目录,再添加一个default.aspx,运行,可以正确的在导航中显示我们自定义的项