2005年12月3日

如何修改CCS的页面布局 相信很多人觉得比较麻烦
这里就来看看CCS的首页有些什么

1、加载默认首页布局
<CS:ContentContainer runat="server" id="MPContainer">
文件位置:CommunityServerControls\ContentContainer.cs该类继承于MetaBuilders.WebControls.MasterPages.ContentContainer

用来加载MasterPage(主页布局)的实体类
首先会访问当前设定的样式风格的(主页控件) 默认为Matser.ascx
如果不存在~ 则会进一步访问默认风格的主页控件~ 默认风格为Default

在具体运行过程中。它首先去加载 ~/Themes/当前用户选择的风格名称/Masters/Master.ascx
如果该文件不存在~ 则会跑去加载~/Themes/Default/Masters/Master.ascx
如果也不在~ 那就啥都不加载~
 所以当你设定某个风格后
你又不小心把这个风格的文件夹删除了或者这个风格除了文件夹啥都没有
首页依然还会有内容输出~ 正式因为他们默认加载的~/Themes/Default/Masters/Master.ascx
但是由于你当前风格不是Default所以仅能显示页面布局 而不懈怠Default的CCS样式控制
如果基于默认布局做新皮肤~ 可以新建一种风格的文件夹 然后仅仅添加需要的样式控制和图片就可以了

关于<CS:ContentContainer runat="server" id="MPContainer">的内部
 public class Region : MetaBuilders.WebControls.MasterPages.Region{}
 public class Content : MetaBuilders.WebControls.MasterPages.Content{}
 public class Form : MetaBuilders.WebControls.MasterPages.NoBugForm {}
说明了Region  Content  Form  均是继承MetaBuilders公司的MasterPages控件的部分
大家可以去http://www.metabuilders.com/Tools/MasterPages.aspx下载控件来做研究
该控件大致分为4个类
(1)Content: This control contains the content for a particular region
此类控件包含真实内容
(2)ContentContainer: This control serves two distincts purposes: - it marks the location where the Master Page will be inserted into the Page - it contains the various Content sections that will be matched to the Master Page's Region controls (based on their ID's).
此控件有两个意图:
·作为一个定位标志,标识Master Page将被插入到页中;
·与Region Controls相匹配
(3)NoBugForm: A server form that does not cause a problem by being inside a master page or other naming container.
无错form。可以放心使用
(4)Region: The control marks a place holder for content in a master page
占位控件

2加载文件和基本设置
3.1加载js文件
<CS:Script Src = "Utility/UpdatePosts.js" runat = "server" />
文件位于:CommunityServerControls/Script .cs
文件继承于LiteralControl 表示一个html元素
他会通过Src属性来定义js文件 并输出<script src=\"{0}/{1}\" type=\"text/javascript\"></script>这样的js引用html语句
如果Src属性为空 则默认加载Utility/global.js全局js文件

默认超链接方式设置
<cs:Base Target="_top" runat="server"/>
转换输出<base target='_top'/>  这样的标签



3加载自定义的皮肤控件

有不少包含了皮肤功能的控件均继承于
SecureTemplatedWebControl或者TemplatedWebControl.cs两个控件
SecureTemplatedWebControl继承于TemplatedWebControl而TemplatedWebControl又继承于WebControl, INamingContainer
TemplatedWebControl控件会通过SkinName属性加载当前风格下的皮肤如果不存在则会加载默认布局的皮肤文件
SecureTemplatedWebControl除了具备TemplatedWebControl的功能外还有检验当前url的功能用来判断当前访问是否一个基于本站的访问
在每个皮肤控件对应的类中我们可以通过重构CreateChildControls方法对该控件进行初始化的设置重构AttachChildControls方法
来对皮肤上的控件对应的变量事件进行设定
比如首页上的<CS:Login SkinName="Skin-LoginSmall.ascx" runat="server" />
会去加载Skin-LoginSmall.ascx的布局
在CommunityServerControls\Login.cs里面我们可以看到该控件的代码







posted @ 2005-12-03 21:22 颓废边缘 阅读(1429) 评论(3) 编辑
CS是啥?可不是用枪爆头那个东西~ 是.net世界里面开源的典范
包含了 一个论坛 一个电子相册 还有一个博客,最早期要从宝玉研究asp forums的汉化工作算起
 一直到宝玉建立了CCS 把这么优秀的代码介绍了给大家 在这里像宝玉致敬了!!
但是由于宝玉他们主要是精力没法集中在CCS的商业化进程上~CCS的结构又很复杂。所以让一般的开发者望而却步!!
小弟不才就有过想在CCS的基础上基于某一成熟版本 做商业化的开发乃至于产品。不过那些都是以后有精力才敢想的了
昨天我提出了一些对UI权限管理的控制想法
今天在研究CCS后台管理的UI组织上所幸看见了根据权限进行UI界面组织的实现~~乐得把手都拍红了
现在就为大家大致介绍一下。如果是一知半解希望大家抱着宽容的态度 不要说些刻薄的话~

首先~在CCS后台管理是通过CommunityServerControls\Navigation\tabs.cs来进行界面组织的~
在该文件中首先申明了Tab和TabCollection两个实体类 Tab是表示每个选项的Tab标签页的实体类
其主要属性有
        private string _text;//文字
        private string _href;//超链接
        private string _name;//名称
        private string _queryString;//用来设置当前的url传值参数
        private string _roles;//角色~能够访问该Tab的角色
        private bool _enable = true;//是否可以使用
        private Tab[] _children;//子功能的Tab数组
        private bool _isRoot = false;//是否根
        private string _filter = null;//用来存放该Tab的操作

而TabCollection则主要含有一个Tab的数组用来存放一组Tab实体对象。

TabControl类用来组织Tab标签显示和操作。首先它可以通过配置的一个xml配置文件获取后台管理可能出现的所有菜单组织
 1protected TabCollection GetTabs()
 2        {
 3            string path = Context.Server.MapPath(FileLocation);
 4
 5            TabCollection tc = CSCache.Get(path) as TabCollection;
 6            if(tc == null)
 7            {
 8                
 9                tc = (TabCollection)Serializer.ConvertFileToObject(path,typeof(TabCollection));
10                CSCache.Max(path,tc,new System.Web.Caching.CacheDependency(path));
11            }

12            return tc;
13        }
在GetTabs()方法中我们能够通过本地xml文件获得后台管理的TabCollection实体类来获得后台管理的配置
然后在读取配置文件的过程中它会根据配置文件的权限角色说明来确定每个标签及其子标签可以允许哪些用户浏览其xml配置简要如下:
 1<?xml version="1.0" encoding="utf-8"?>
 2<TabCollection>
 3  <Tabs>
 4    <Tab text="主页" href="~/admin" name="Home" isRoot = "true" />
 5    <Tab text="博客" href="~/admin/blogs" name="Blogs" >
 6      <SubTabs>
 7        <Tab text="日志" href="~/admin/blogs/postlist.aspx?App={0}" name="Posts" querystring="App" filter = "Blogs,CreateBlogs,AdminWeblogSettings,BlogPermissions,BlogDefaultPermissions"  />
 8        <Tab text="文章" href="~/admin/blogs/articlelist.aspx?App={0}" name="Articles" querystring="App" filter = "Blogs,CreateBlogs,AdminWeblogSettings,BlogPermissions,BlogDefaultPermissions"  />
 9        <Tab text="反馈" href="~/admin/blogs/feedback.aspx?App={0}" name="Feedback" querystring="App" filter = "Blogs,CreateBlogs,AdminWeblogSettings,BlogPermissions,BlogDefaultPermissions" />
10        <Tab text="链接" href="~/admin/blogs/manageblogroll.aspx?App={0}" name="Links" querystring="App" filter = "Blogs,CreateBlogs,AdminWeblogSettings,BlogPermissions,BlogDefaultPermissions"  />
11        <Tab text="配置" href="~/admin/blogs/weblogsettings.aspx?App={0}&amp;Url=blog_myblogs&amp;Args=" name="Configure" querystring="App" filter = "Blogs,CreateBlogs,AdminWeblogSettings,BlogPermissions,BlogDefaultPermissions"  />
12        <Tab text="切换到Blog" href="~/admin/blogs" name="Switch" querystring="App"  filter = "Blogs"  />
13        <Tab text="管理Blog" href="~/admin/blogs/ManageWeblogs.aspx" name="CreateBlogs" roles = "SystemAdministrator;BlogAdministrator" />        
14        <SubTabs>
15            <Tab text="设置" name="AdminWeblogSettings" roles = "SystemAdministrator;BlogAdministrator" />                            
16        </SubTabs>
17        <Tab text="权限设置" href="~/admin/blogs/ManageWeblogPermissions.aspx" name="BlogPermissions" roles = "SystemAdministrator;BlogAdministrator" />        
18        <Tab text="默认权限设置" href="~/admin/blogs/ManageDefaultWeblogPermissions.aspx" name="BlogDefaultPermissions" roles = "SystemAdministrator;BlogAdministrator" />        
19      </SubTabs>
20    </Tab>
21    <Tab text="新功能" href="~/测试/" name="新功能" querystring="App" filter = "">
22    </Tab>
23</Tabs>
24</TabCollection>
我们在filter属性中设置某一层UI界面允许的操作以及在roles属性设置该Tab标签运行访问的角色
比如上述配置文件中管理Blog就只能是系统管理员(SystemAdministrator)和博客管理员(BlogAdministrator)
另一方面filter属性中设置了该Tab标签允许的操作
querystring用来获取当前Http请求的url传值 querystring="App"
如果后台管理的地址为~/admin/blogs/postlist.aspx?App={0} 当我们访问后台是时会从当前的http请求中获取Querystrng["App"]格式化到{0}的部分
从而实现了其区分每个人能通过它访问管理自己的程序的操作
通过这个配置文件 TabCollection类能够通过一个Render(HtmlTextWriter writer)方法将菜单根据用户角色和xml配置来组织显示给大家浏览。
当然 系统从逻辑层有效的进行了权限控制~ 这里仅仅是用来让用户通过UI层获得更好的用户体验~具体它的逻辑层的权限控制还有待进一步研究
posted @ 2005-12-03 01:30 颓废边缘 阅读(1595) 评论(3) 编辑

导航

公告

昵称:颓废边缘
园龄:6年5个月
粉丝:4
关注:0
<2005年12月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

统计

搜索

 
 

常用链接

最新随笔

随笔分类

随笔档案

文章分类

文章档案

相册

积分与排名

最新评论

阅读排行榜

评论排行榜

推荐排行榜