Register  |  Login

DNN模块开发之利器篇:七种武器

读过武侠小说的你一定都知道古龙曾有一部著名的小说<<七种武器>>,其中列举了当今武林最牛的,杀伤力最大的武器,其中包括长生剑、孔雀翎、碧玉刀、多情环、霸王枪、离别钩、拳头.后来还有百晓生的兵器排行榜,其中就包括小李飞刀等等.在此我就班门弄斧了,借着古代利器之说,姑且列举一些对DNN模块开发起决定作用的一些方法或类,并辅助说明使用方式(排名没有先后之分,纯粹用于标识): 1) PortalModuleBase 所属命名空间:DotNetNuke.Entities.Modules 这是一个开发DNN模块所必须继承的基类,标志性的基类,在此基类中,你可以得到DNN所为你封装的一些模块基本信息,毋需你多费周折,其中包括当前用户UseID,UserInfo,TabID,ModulePath,ModuleConfiguration,LocalResourceFile等等,下边就简单解析几个比较有用的属性:       <1> ModulePath: 模块根目录,可以获取到模块根目录所需要的文件,比如脚本文件,图像文件,比如你想在后台注册一个js脚本,代码可以类似:      ScriptManager scriptManager = ScriptManager.GetCurrent(Page);    scriptManager.Services.Add(new ServiceReference(this.ModulePath + "WebService.asmx"));    scriptManager.Scripts.Add(new ScriptReference(this.ModulePath + "js/Utility.js"));        <2> LocalResourceFile: 本地化资源文件,默认是关联到模块根目录下的App_LocalResources下对应文件,比如你开发的模块用户控件为xx_view.as ...

推荐系列:一些感想及资源(2008年第1期 )

最近因为定制开发本站点的Blog模块,需要增加Skins(主题)功能,需要在页面加载时动态加载对应的样式文件,类似DNN默认的Skins加载机制,苦于没有合适的方法,后来Google了一把,觉得发现解决方案就在之前方便过的文章中"加速DNN的新举措",正所谓"踏破铁鞋无觅处,得来全不费功夫",资源就在眼前,何须苦苦寻找呢,所以我发觉有时工作之余有所心得如果能够记录下来,下次也许你碰到类似的问题能从此能到提示甚至现成的解决方案,因为有时人毕竟还是会健忘的,而这可以节省不少时间.故此有时在开发DNN过程,出现问题我就会想到我是否已经对类似问题有所记录,一般都会思索一番,然后在自己博客中看看,这的确帮助我不少,比如CommandButton的使用("再谈dnn的物尽所用(三)"), Skin docType的声明("解析DNN皮肤级别的doctype声明",URL用户控件的扩展("浅谈如何做到dnn物尽所用(二)")等等.希望大家也能从此能到一些提示或帮助.
按照惯例,今天在此还是分享一些资源:
1) Installing DotNetNuke 4.8.2 on localhost - Vista Home Premium and IIS7
作者详细讲述如何在Vista操作系统和IIS7下安装DNN4.8.2,列举了一些注意的步骤等等,图文并茂,也许对新入门的你有些帮助...
http://www.sunsethillsolutions.com/Resources/DotNetNuke/tabid/362/articleType/ArticleView/articleId/16/Default.aspx
2)Introduction to DotNetNuke Module Development
http://www.sunsethill.ca/Resources/DotNetNuke/tabid/362/articleType/ArticleView/articleId/17/Introduction-to-DotNetNuke-Module-Development.aspx
跟上一篇文章是同一个作者,同样图文并茂的讲述如何搭建DNN模块的开发环境及其创建"Hello,World"模块.
类似相关的文章你也可以在http://www.adefwebserver.com/DotNetNukeHELP/能找到比较详细的专题教程.
3)YAF论坛
自从IBuyPortal正式升级到DNN,YAF论坛就已经整合成为DNN模块,记得当时算是DNN框架下第一个开源的论坛,到目前为止,DNN相关的论坛比较有名就是ActiveForum, YAF-Forum, 还有就是DNN后来开发的核心论坛模块DNN-Forum.目前YAF论坛也升级到YAF-v1.9.1,可以在dnn4.5版本之上正常运行.有兴趣者不妨去官方网站看看:http://www.yetanotherforum.net/
4)DNN是微软国度的二等公民么?
对此DNN创始人Shaun Walker澄清了相关言论并对DNN的地位进行确认,关心DNN成长的你不妨看看:
Is DotNetNuke a second-class citizen?
http://www.dotnetnuke.com/Community/Blogs/tabid/825/EntryID/1831/Default.aspx
相关链接:
Who Uses DotNetNuke?
http://www.dotnetnuke.com/Community/Blogs/tabid/825/EntryID/1655/Default.aspx
你会发现DNN不再是在襁褓的婴儿,它是不容小觑的!
5)如何注释你的代码
   http://www.devtopics.com/13-tips-to-comment-your-code/
  这是一篇本人逛博客园看到的文章,作者列举了13个注释代码的原则或技巧,很有借鉴意义,记得<<代码大全>>也说到类似问题,万变不离其宗,个人觉得基本的原则是当你在构思你的代码时,不妨想想这些原则就好(当然不可能全都能顾及到), 这就是你对你的代码及其维护代码人员的一种负责态度了. 其中我最欣赏的是<10>,<11>,<12>. ^_^
  <1> Comment each level
  <2> Use paragraph comments
  <3> Align comments in consecutive lines
  <4> Don't insult the reader's intelligence
  <5> Be polite
  <6> Get to the point
  <7> Use a consistent style
  <8> Use special tags for internal use
  <9> Comment code while writing it
  <10> Write comments as if they were for you (in fact, they are)
  <11> Update comments when you update the code
  <12> The golden rule of comments: readable code
  <13> Share these tips with your colleagues

展望DNN皮肤前景及其推荐一些皮肤资源

自从DNN发布以来,用户对DNN皮肤机制一直以来都是褒贬不一,我对此也曾写过一些文章分析其中道理,有兴趣者不妨看看我之前的文章,目前DNN即将升级到5.0版本(代号为Cambrian),这将是一个具有里程碑意义的版本发布,时间大概是今年秋天,估计应该是在DotNetNuke OpenForce '08 大会之前吧,让我们拭目以待吧. 关心DNN皮肤的朋友们, 现在让我们先来看看皮肤机制将发生哪些变化...

DNN登陆注册链接小变身(Skin Object定制开发)

上一篇文章简单解析了DNN多语言解决方案,其中提到了一个皮肤级别的本地化支持.这篇文章接着简单分析如何定制开发自己的皮肤对象(在dnn称之为Skin Objects),不妨来看看我们如何给DNN默认的登陆注册链接皮肤对象做个小变身.首先还是先描述一下需求,例如有客户需要在设计皮肤时可以在登陆注册这两个链接增加一个小图象提示,起到修饰美观的作用,最终效果如图: 如何开发呢?其实对我来说,开发DNN的原则就是如何节省代码量,同时可以让DNN物尽所用,但又不能影响以后的升级.我想这个理念在前几篇文章都阐述得淋漓尽致(比如浅谈如何做到dnn物尽所用(二), 浅谈如何做到dnn物尽所用).有兴趣者不妨回头看看,也许你也会得到些许提示的.回到正题,首先我想到就是利用原有的登陆注册这两个链接皮肤对象,再结合DNN自带的CommandButton(文章"再谈dnn的物尽所用(三)"对此有所解析)这一用户控件就可以实现我们的需求了.那我们就开始吧,还是我之前提到开发皮肤对象的步骤: 1) 在网站根目录下的admin/Skins文件夹里创建一个UserControl,比如现在新增dnnsunUser.ascx和dnnsunLogin.ascx(请注意该文件夹下的代码不需要重新编译,如果你是以站点形式发布的). 2) 创建对应的资源文件(dnnsunUser.ascx.resx, dnnsunUser.ascx.zh-CN.resx及其dnnsunLogin.ascx.resx,ascx.resx, dnnsunLogin.ascx.zh-CN.resx) 其中上述步骤你可以直接拷贝默认的登陆注册链接皮肤对象,然后重命名即可.接下来就是替代我们即将加入的CommandButton,在页面中注册并添加实例: dnnsunLogin.ascx @ Register TagPrefix="dnn" Assembly="DotNetNuke" Namespace="DotNetNuke.UI.WebControls" %> <dnn:CommandButton ID="cmdLogin" runat="server" CssClass="SkinObject" CausesValidation="false"/> 或 dnnsunUser.ascx @ Register TagPrefix= ...

你需要么,dnn多语言解决方案?

目前dnn多语言解决方案是我这段时间研究的重点, 我接下来也许会写几篇相关文章阐述这些问题. 切入正题, 本地化是ASP.NET的特性, 无疑dnn也会直接支持, 但是事实上并不是很乐观, 因为dnn本身也只是在表面上作些文章吧了, 如果你想利用dnn实现多语言门户(Portals), 那你可能想错了, 除非你重新开发或在模块级别上定制的开发支持多语言. 那dnn究竟支持多语言到何种程度呢? 让我慢慢道来, 其实dnn默认支持的多语言只局限于页面标签(Tags,Token etc), 比如登陆链接, 编辑模块时的字段Label等等, 而这些并非我们通常理解的内容本地化(多语言支持). 当然你可以通过下列两种解决方案来实现: 1) 模块级别的多语言开发,但你的内容可能需要存储好几个版本(根据你站点支持的语言总数)   2) 站点级别的多语言开发,也就是你需要发布好几个站点(根据你需要支持的语言总数)目前在DNN模块市场也有一些模块按照第一种思路做到了内容上支持多语言,比如:1) MLSkinHelper, PageLocalization Module,Language Selector skin object 等等http://www.apollo-software.nl/Home/tabid/36/language/en-US/Default.aspx最经典的范例就是http://declic-video-fx.com/,它利用apollo-software相关模块实现了多语言站点,可以说基本上实现了多语言支持的所有功能.2) Localization Extensions: Easily implement multilingual portals http://www.adequation-dotnetnuke.com/en/AboutUs.aspx该站点的公司主页就是利用来实现了多语言支持,请访问http://www.adequation-informatique.com/en/Home.aspx3) 这是一个免费的模块Magic Content,同时也是DNN Forget下的一个新模块,该模块属于proeder.network.consult公司.Magic Content is a multi-lingual content publishing module for the DotNetNuke ...

你在为寻找dnn资源而发愁么?

如题目所言, 你在为寻找dnn资源而发愁么?苦于搜索好些时候也没找到自己所遇到问题的合适解决方案, 其实对我个人所言, 如果你想查找dnn资源, 毕竟还是国外资源要比国内资源丰富得多, 时效性也好些,故此我推荐大家如果有点耐性的话不妨多看看国外的DNN资源, 我想这对你的dnn之旅会受益不少. 在此我推荐一个专门针对dnn资源搜索的网站, 你可以比较有针对性的获取到纯"DNN" 的第一手资源, 也许里边就有你想要的解决方案, 同时它也提供了一些有效获取dnn资源的途径:

资源共享的第一份礼物

本着资源共享的原则,我在此先给大家拿出第一份礼物(也作为即将到来的全国第一个五一小假的纪念 :)

你愿意共享DNN资源么,抑或你需要DNN资源?

在一个QQ群里,总是不断有新人进来,就好比dnn社区,也不断会有新手进来,这不可避免出现老是不断的问同一个问题的状况,在此我想创建一个专门共享资源的群区,大家可以在此分享自己的DNN资源,积少成多,我想最终我们大家都会受益匪浅的.这样就有DNNSUN讨论区(群号:60930597)的创建,哪位有兴趣者不妨加入,但有一个小小要求,希望你不是那种只顾索要资源的类型,而是真正的发扬资源共享精神的一分子. 当然因为DNN本源就是开源的,所有我们在此更多的是推广DNN的非商业运用及其资源收集.
如果你愿意分享的话,我会负责整理这些资源,让大家一起受益,也让后来者感激不已的.当然我们团队也会收集所有关于dnn的资源发布在这里(或我们的站点http://www.dnnsun.com)
目前我们的口号是:让我们一起努力,研究DNN的所有相关课题,希望给DNN在中国的广为人知贡献一点绵薄之力!
这一活动的伸延就是Best Web Gallary的诞生,在此你可以得到最新,最实时的,最前卫的DNN设计及其同行者的咨询,最优秀的DNN网站资源. 访问Best Web Gallary请点击:http://www.dnnsun.com/Home/ShowCase.aspx

如何定制dnn的FCKEditor

这篇文章将简单介绍如何使用和定制DNN里边的富文本编辑器(Rich TextEditor): FCKEditor

DotNetNuke OpenForce '08 来了

DotNetNuke OpenForce Is Back,After a highly successful OpenForce '07 it is now time to begin planning for OpenForce '08.  We are currently working with our conference partners on the OpenForce '08 conferences.  One of our first tasks is to start identifying our speakers.
Are you a DotNetNuke expert?  Do you like to share your DotNetNuke knowledge with the community? Do you enjoy speaking in front of large crowds? You are exactly the person we are looking for.
Please visit the detail from here ( http://www.openforce08.com/Home/tabid/55/Default.aspx )

你的dnn站点慢了么?

当你的dnn站点在线运行了一段时间之后,你会发现速度在不断下降,加载页面很慢很慢,最后导致连自己都懒得访问了.这是为何呢?仔细寻找,你可能会发现数据库一直在膨胀,我想这就是站点变慢的罪魁祸首,在dnn中,如果你开启网站记录这一功能或某一任务调度,这些都会产生一堆的记录信息,久而久之就让你站点的数据库不断的膨胀. 你如果有条件或权限的话,你不妨到主机管理/SQL服务或在SQL Manage里执行以下语句看看你的数据库大小都消耗在哪了:  
sp_spaceused eventlog/sitelog/schedulehistory
 
我想到这你就应该很清楚我们下一步该怎么做,那就是把这些信息都清除了,减轻网站的页面加载压力. 当然,如果这些信息对你跟踪网站有用的话,那你只能继续你的”蜗牛之旅”了.下边列举两种方法可以清除这些记录.
1)  网站管理/查看日志网站记录等页面手动清除,这一方法的缺点就是你还是没法清除schedulehistory这一表里的数据.
2)  主机管理/SQL服务下执行以下SQL脚本:
 
  1. TRUNCATE TABLE {databaseOwner}[{objectQualifier}eventlog]   
  2. GO   
  3.   
  4. TRUNCATE TABLE {databaseOwner}[{objectQualifier}schedulehistory]   
  5. GO   
  6.   
  7. TRUNCATE TABLE {databaseOwner}[{objectQualifier}sitelog]   
  8. GO   
  9.   
  10. TRUNCATE TABLE {databaseOwner}[{objectQualifier}SearchItemWordPosition]   
  11. GO  
就我本地开发服务器上的dnn站点,原来备份数据有60M左右,清理之后我再备份就只有不大10M,我想这效果还是很显然的,所以不管是站点变慢了还是因为备份需要,我觉得我们都可以例时执行以上SQL脚本清理一下,这不失为一种策略.

如何定制DNN站点的网站管理和主机管理

申明一下,这一篇文章是参考http://www.dnnskin.cn站点上的某一贴子而写,就是对此有所总结。(大家有兴趣不妨去看看,挺不错的:)admin configure
在DNN使用中,我们可能有这样的需求,那就不想开放过多的权限给管理员以防止误删的事件,当然可能也有这样的需求, 增加某一个管理页面,对此的一般做法设置为管理员可见,这样就可以保证只有管理员才能查看和编辑这个页面,但是红色的边框提示确实比较难看,或许你需要把这个页面加入到admin或者host菜单,这样更方便管理和显得合理。在这里我们列举如何利用SQL Script来实现(当然也可能也有其他方法,但SQL应该是比较方便和直接的,前提你具有host帐号权限),接下来我们就分别对这两种情况讲解.
注意:以下更改之后必须重启IIS方才生效。
1) 屏蔽某些管理页面,也就是隐藏这些页面,最简捷的解决方案就是把类似以下的脚本拷贝到 主机管理/SQL服务下 当作脚本执行即可隐藏这些页面,不过缺点也是明显,如果你直接拷贝原来的Url仍然可以访问这一页面,实质就是我们只不过玩弄一下技巧吧了,当然你也可以设置IsDeleted或DisableLink这一属性,这就可以彻底的防止通过Url访问了。
UPDATE {databaseOwner}[{objectQualifier}Tabs]
        SET [IsVisible]='0' -- Apply to the admin tab to not show
        WHERE tabid=52
2) 增加管理页面并加入网站管理或主机管理菜单中。
首先我们新建一个页面,要记得查看页面id并记录下来 ,页面权限为正常即可,不必设置为管理员可见,然后添加管理模块到该页面,之后把类似以下的脚本拷贝到 主机管理/SQL服务下 当作脚本执行即可完成把管理页面改到管理菜单下
UPDATE {databaseOwner}[{objectQualifier}Tabs] 
        SET [TabOrder]='10032',
            [IsVisible]='1',
            [PortalID]=0, -- the filed related to which portal the admin menu exist 
            [ParentID]='38',
            [Level]='1',   -- the filed is the menu level, 0 is 1st, 1 apply to 2st...
            [TabPath]='//Admin//YourTabName', -- YourTabName is your tabName which you will insert into the admin menus
            [IconFile]='yourTabimage src' -- this filed is optional
        WHERE tabid=57
参数解析:
1) TabOrder: 站点管理菜单TabOrder值截止到10031,也就是说你可以用10032 10033 10034……
2) ParentID: ParentID的计算,站点ID为0时,ParentID为38,站点ID为1时,ParentID为56,站点ID为2时,ParentID为74,站点id加1,ParentID加18
portalid=0 ParentID=38
portalid=1 ParentID=56
portalid=2 ParentID=74
portalid=3 ParentID=92
……
这一方法待考证.
3) tabid: 你要加进管理菜单的页面的id
类似如果想要把管理菜单写入host菜单下,需要修改语句如下:
UPDATE {databaseOwner}[{objectQualifier}Tabs] 
    SET [TabOrder]='24',
        [IsVisible]='1',
        [PortalID]=null,
        [ParentID]='7',
        [Level]='1',   -- the filed is the menu level, 0 is 1st, 1 apply to 2st...
        [TabPath]='//Host//YourTabName', -- YourTabName is your tabName which you will insert into the admin menus
        [IconFile]='yourTabimage src'  -- this filed is optional
    WHERE tabid=57
参数解析:
1) TabOrder: TabOrder主机管理菜单TabOrder值截止23,你可以用24 25 26……
2) PortalID: 主机管理菜单PortalID值不变,因为主机管理是全局的,故PortalID默认为NULL
2) ParentID: 类似PortalID,因为主机管理是全局的,故ParentID一般为7
3) tabid: 你要加进管理菜单的页面的id
当然还可以在Admin或者是Host菜单下添加二级管理菜单,只需要加上TabPath='//Admin//一级//二级//…',

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