Register  |  Login

吹响启动DNN 5.x的号角

好久没动笔, 感觉有点生疏了, 然而对DNN的研究依然没有懈怠, 不过改为暗渡陈仓的方式, 呵呵 :) 不过最近的确有点忙得过火了. 在此跟大家一块分享最近的活动和情况吧:

1) 首先推荐大家一篇文章, 这对于如果想优化DNN性能及其速度的朋友无疑是一个不错的参考,

    优化DotNetNuke网站性能的10个技巧

   对于DNN速度及其优化的一些方式, 本博客也稍有涉及, 有兴趣的朋友也不妨看看, 比如如何利用CBO来提示你的代码质量和性能, 如何规避"重复的轮子"方法的出现, 优化CSS样式文件及其js脚本等等

2) 修正DNN 5.0 下的FCK Editor bug( 这个Bug已在DNN 5.0.1及其以后的版本修正 ), bug的具体情况就是没法在FCK编辑里边上传任何东西, 比如image, flash, video等, 本地测试会出现类似提示: Could not load type 'DotNetNuke.HtmlEditor.FckHtmlEditorProvider.fckimagegallery'.  修正方法蛮简单, 把在程序集根目录bin下的Providers文件夹里(~/bin/Providers/)的DotNetNuke.FckHtmlEditorProvider.dll移动到上一级bin(~/bin/)文件夹即可.

3) 感谢积木网(提供托管服务))和m2land(logo的设计)的帮忙, www.dnnsun.com独立出去的新网站www.sunblognuke.net正式启动, 欢迎大家拍砖, 这也标志本人将开始深入DNN 5.x的框架研究和相关开发工作, DNN 5.x有很多东西待挖掘 :), 最初的logo设计:

SunBlogNuke_logo

最后暂定为:

SunBlogNuke Logo

4) 如何判断当前用户是否是网站管理员, 也就是我们常说的管理员角色, 可以用

Public ReadOnly Property HasAdminPermission() As Boolean
       Get
           Return PortalSecurity.IsInRole(PortalSettings.AdministratorRoleName)
       End Get
End Property

需要注意一点的是不可用类似的方法 PortalSecurity.IsInRole(PortalSettings.AdministratorRoleId.ToString()), 实际上这一方法判断当前用户是否为默认存在的管理员, 也就是安装DNN创建的administrator, 其用户ID为2, 而并不是我们想要的管理员权限角色。

5) 在模块里判断当前用户是否具有某一权限, 可以使用这一方法:

Return ModulePermissionController.HasModulePermission(ModuleConfiguration.ModulePermissions, ConfigManager.glbPermissionManage)

其参数分别是当前模块的权限集合和指定的权限键值(PermissionKey), 但其实如果你的模块是继承于PortalModuleBase, 那不妨简化直接使用基类PortalModuleBase的方法HasModulePermission(细看下边代码可看出其实基类PortalModuleBase已经为你封装这一方法, 你大可不必新造自己的轮子):

Public Function HasModulePermission(ByVal PermissionKey As String) As Boolean
    Return ModulePermissionController.HasModulePermission(Me.ModuleConfiguration.ModulePermissions, PermissionKey)
End Function

6) 如何找回失去的ModuleConfiguration对象, 从而获取TabID, PortalID等基本属性? 如果你开发过复杂一些的模块, 也许就会碰到如下场景, 比如文章模块使用ViewDetail.ascx作为详细信息页面装载的用户控件, 继承于PortalModuleBase(这是必须的, 你应该知道吧? 所有DNN模块必须直接或间接继承于该基类), 而文章或新闻一般都需要评论的支持(增进用户的交互性), 这样你也许需要集成评论功能, 可是你希望更灵活些(让用户可以选择是否允许评论), 自然你希望评论这一功能有另外一个用户控件来承担(也许叫CommentView.ascx), 然后根据需要加载到ViewDetail.ascx里, 如此一来CommentView.ascx就相当于ViewDetail.ascx的子控件, 同时你也希望CommentView.ascx可以直接获取到相关的模块基本信息(TabID, PortalID等基本属性), 故最简便的方法就是CommentView.ascx也继承PortalModuleBase。一切看起来似乎合情合理, 应该可以工作的。然而你最终会发现在子控件CommentView.ascx怎么也找不到正确的TabID, PortalID等基本属性, 原来脱离PortalModuleBase的上下文信息(Context), 也就是尽管继承了PortalModuleBase, 但父类PortalModuleBase已不是正确的上下文信息(Context)了。解决方案就是获取恰当的信息重新设置子类的CommentView.ascx的ModuleConfiguration, 信息从何而来, 父类ViewDetail.ascx也, 并在Page_Init事件里边初始化, 代码如下:

Partial Public Class ViewComment
    Inherits PortalModuleBase

    Protected Overloads Overrides Sub OnInit(ByVal e As EventArgs)
        MyBase.OnInit(e)

        Dim parentControl As Control = TryCast(Parent, Control)
        While Not (TypeOf parentControl Is PortalModuleBase)
            parentControl = parentControl.Parent
        End While

        ' 关键在这: 重新初始化ModuleConfiguration或LocalResourceFile, 
        ' 这样ViewComment就可以跟父类ViewDetail保持一致
        ModuleConfiguration = DirectCast(parentControl, PortalModuleBase).ModuleConfiguration
        LocalResourceFile = DirectCast(parentControl, PortalModuleBase).LocalResourceFile
    End Sub

End Class

好的, 今天到此就这些, 往后就尽量陆续分享一些开发DNN 5.x模块的心得和体会。如今DNN的版本很多, 4.x 仍是很普遍, 但5.x也是大势所趋, 所以如何使得你开发的模块保持良好的兼容性也是模块开发过程中考虑比较多的问题之一, 我也将在接下来的文章中分享一些自己的经验, 希望能给大家一点帮助。:)

Popular tags: SunBlog, SEO, CBO, FCK
Previous Entry: 简洁代码之哲学(摘录)
Next Entry: 黑暗的艺术: CSS Hack

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作为我们核心的系统机制,更多相关信息...
版权声明
本站任何言论仅代表个人观点,与作者所在的公司没有任何关系,所有贴子皆以“现状”提供且没有任何担保,同时也没有授予任何权利。