Register  |  Login

加速DNN的新举措

Posted in [DNN皮肤设计], [优化DNN] By Baldwin
在优化DNN的过程中我们可能注意到这一点,就是我们的皮肤文件一般都写在同一个文件,可能是skin.css或container.css, 也就是说不论我们页面加载是否应用到该样式文件里边的所有属性,我们总会必须加载这样一个CSS样式文件,尽管皮肤有很多属性并不是我们所需要的,但有时我们所创建的皮肤可能会包含好些类别的skin主题,比如专为首页显示的xx_Home.ascx,专为管理页面的xx_admin.ascx,一般的xx_skin.ascx等等,显然这些页面可能是不同的布局设计,不同的样式定义,如果这些不同的样式都在skin.css里定义的话会导致该文件冗赘,并且不能达到不同的样式的目的(前提是你使用同样的class样式定义).故此我们可以有一种新的解决方案,简约而实用,那就是我们可以把通用的样式定义在skin.css里,而一些有区别的,定制的样式我们可以新建一个跟skin一样名字的样式表文件,比如xx_admin.ascx对应新建一个xx_admin.css.而DNN加载的顺序是skin.css->xx_admin.css,如此一来即使你不想使用通用的样式(在skin.css里), 你也可以在xx_admin.css里重新定义而达到覆盖的效果, 并不会造成数据加载的不必要负荷,从而提高页面的加载速度。
关于这具体的DNN样式继承关系,可阅读我之前的一篇文章: DNN默认核心CSS继承关系解析(里边有比较详细的介绍分析)
再者还有一种情况,因为DNN是权限分离极为清晰的CMS系统,也就是一般的用户和管理员看到的菜单和操作方式是不大一样的,比如每个模块在管理员编辑状态都会呈现相关操作选项在左上角的下拉菜单(the Menu Actions),当然这些页面也是需要样式来定义布局,故此我们可提出一种优化的解决方案,那就是那管理模式的样式定义和一般样式动态分离,也就是我们在加载皮肤时根据用户的权限加载需要的样式文件,是admin.css还是normal.css . 具体的实现是可在皮肤文件的里边添加一个动态分离样式的方法,代码如下:
<script runat="server">
    Private Sub Page_Init(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Init
        '判断用户是否具有管理权限
        If Request.IsAuthenticated Then
            Dim ID As String
            '获取在缓存中的样式定义
            Dim objCSSCache As Hashtable = CType(DataCache.GetCache("CSS"), Hashtable)
            If objCSSCache Is Nothing Then
                objCSSCache = New Hashtable
            End If
            '设置唯一ID
            ID = CreateValidID(SkinPath) & "ContainerAdmin_"
            
            If objCSSCache.ContainsKey(ID) = False Then
                objCSSCache(ID) = SkinPath & "ContainerAdmin.css"
                '判断是否禁用缓存
                If Not PerformanceSetting = PerformanceSettings.NoCaching Then
                    DataCache.SetCache("CSS", objCSSCache)
                End If
            End If
            
            If objCSSCache(ID).ToString <> "" Then
                '判断是否已添加了该样式,否则添加到页面Header的样式定义表里边
                Dim objCtrl As Control = Page.Header.FindControl(ID)
                If objCtrl Is Nothing Then
                    Dim objLink As New HtmlLink()
                    '设置属性
                    objLink.ID = ID
                    objLink.Attributes("rel") = "stylesheet"
                    objLink.Attributes("type") = "text/css"
                    objLink.Href = objCSSCache(ID).ToString
 
                    Dim oCSS As Control = Me.Page.FindControl("CSS")
                    If Not oCSS Is Nothing Then
                        oCSS.Controls.Add(objLink)
                    End If
                End If
            End If
        End If
    End Sub
script>
样例容器皮肤下载
Copyright ©2007 dnnsuun.com(sun wangji)
Popular tags: Optimization, DNN优化
Previous Entry: DNN Blog修改日志(优化及扩展)
Next Entry: 王者归来—再谈CBO

Comments

Was it good for you, too? Join the discussion »

leave a reply

About the author
Baldwin's Status
 Contact Me
Baldwin Sun
Senior Developer for dnn solution & founder of SunBlog module...
网站主页
dnnsun
最新评论
  1. Re: "暴力"解决DNN无法登陆的问题

    你好 有个问题 我改了登录界面后能登录 但是一点注册 就跳到了HOME页 这个怎么解决

    --zl24622

  2. Re: 你的dnn站点慢了么?

    需要你把旁边的checkbox勾选上再执行 :)

    --Baldwin

  3. Re: 你的dnn站点慢了么?

    为什么,我将你的代码copy到host>sql中去执行之后,报错呢,语句是不是有问题哦?

    --claire

  4. Re: 剖析DNN架构-开篇之作

    很好

    --vling83

  5. Re: SunBlog更新:增加3D Tag Clouds插件

    在以上评论已说明, SunBlog已经是一个成熟的商业模块,如果需要授权或下载请邮件联系我们, 感谢你的关注, 我们即将推出一个demo的站点(这周之内).

    --Baldwin

  6. Re: SunBlog更新:增加3D Tag Clouds插件

    这个没地方下载的吗,要怎么才能下载到,谢谢

    --Sun key

  7. Re: SunBlog更新:增加3D Tag Clouds插件

    已经电邮您了,请注意查收

    --sunny0315

  8. Re: 如何添加DNN模块的自定义权限

    你只要设置好该节点即可, 比如:DnnSun.SunBlogNuke.Business.InterfaceController, DnnSun.Modules.SunBlogNuke 其他的请再详细看看本文,我觉得说得蛮清楚的 :)

    --Baldwin

Blog搜索
Rss Feed
feedsky
抓虾
pageflakes
newsgator
哪吒
相册库
更多照片请查看相册库
我们的服务
  • DotNetNuke 咨询
  • Web设计及其模块开发
  • 免费建站
  • 电子商务
  • 开拓市场
我们致力于开发定制的web 2.0 ,所服务的客户主要包括小中型企业,社区俱乐部及其非盈利机构组织。我们将利用开源的DNN作为我们核心的系统机制,更多相关信息...
版权声明
本站任何言论仅代表个人观点,与作者所在的公司没有任何关系,所有贴子皆以“现状”提供且没有任何担保,同时也没有授予任何权利。