本Blog将新增一个栏目,暂时取名为"剖析DNN架构",名号似乎有些大了,但考虑到这也算是鞭策所写文章质量的一种手段,故最后暂且不做更改了。对于为何出现这一栏目,主要是一直以来跟一些DNN爱好者们的交流所促使的。曾有几位朋友所在公司想利用DNN这一开源平台或开发产品,或与现有系统整合,或优化框架以便满足需求等等,故他们都愿意招聘能真正担当起这一重担的“千里马”,想想这将要求所聘之人具备以下一些条件:
1) 熟悉DNN核心架构和框架脉络。
2) 有一定的架构经验,懂得设计模式相关知识。
3) 精通DNN模块开发流程及其皮肤机制。
等等,“DNN架构师”也就从此诞生了,当时我听到他们的招聘要求之后,唯一的想法是在国内,此等“千里马”实在是凤毛麟角,恐怕他们只能望梅止渴了。因为想想国内研究DNN的氛围,人气之淡,交流之稀,凭何能促进DNN这一开源平台的兴盛呢?
对于DNN入门的门槛,就我个人的观点还是蛮高的,当然你想借助DNN搭建一个网站倒是及其容易的,也就是1-3分钟即可,而目前DNN模块及其皮肤资源还是蛮多的(其中包括免费或商业的),只要你合理利用还是可以满足大部分需求的。但如果你想定制业务或布局修改的话,那就必须得了解一些编程技巧或HTML,CSS布局原理等。对于非专业人员,恐怕是力所不及的。而对于刚入门的开发人员,你需要了解的更多,其中包括DNN基本架构,模块开发流程,API调用等等,想真正开发一个高级模块,也不是一蹴而就的。最不幸的是,由于国内相关资源的欠缺,一些刚入门者屡屡碰壁也就不足为怪了,在此我还是鼓励大家,如果你想真正好DNN,那么请你耐着性子看看英文资料吧,其中包括DNN官方的第一手资料。相反,可喜的是如今大家已经逐渐看好DNN,各方面应用不断涌现,比如电子商务,游戏站点,社区论坛,ERP整合,电子政务等等,可以这么说,DNN应用在国内这一潜在市场正在形成中,群雄逐鹿,看看你是否可以在此市场中分得一杯可观的羮。
最后,再聊点本人认识的DNN,DNN可算是.net下最大的开源平台,其优势是显而易见的,其地位也是举足轻重的,DNN可谓为Microsoft也作出了相当大的贡献,想想DNN本身是VB.Net开发的,这也可以理解为留住VB开发人员的一个诱饵吧,更深的一层就是由DNN带动的.net项目不在少数,曾有官方数据对此进行佐证,可惜我没有记得链接,似乎是DNN OpenForce '07大会 ...
Read the rest of entry »
读过武侠小说的你一定都知道古龙曾有一部著名的小说<<七种武器>>,其中列举了当今武林最牛的,杀伤力最大的武器,其中包括长生剑、孔雀翎、碧玉刀、多情环、霸王枪、离别钩、拳头.后来还有百晓生的兵器排行榜,其中就包括小李飞刀等等.在此我就班门弄斧了,借着古代利器之说,姑且列举一些对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 ...
Read the rest of entry »
最近因为定制开发本站点的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即将升级到5.0版本(代号为Cambrian),这将是一个具有里程碑意义的版本发布,时间大概是今年秋天,估计应该是在DotNetNuke OpenForce '08 大会之前吧,让我们拭目以待吧. 关心DNN皮肤的朋友们, 现在让我们先来看看皮肤机制将发生哪些变化...
Read the rest of entry »
上一篇文章简单解析了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= ...
Read the rest of entry »
目前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 ...
Read the rest of entry »
如题目所言, 你在为寻找dnn资源而发愁么?苦于搜索好些时候也没找到自己所遇到问题的合适解决方案, 其实对我个人所言, 如果你想查找dnn资源, 毕竟还是国外资源要比国内资源丰富得多, 时效性也好些,故此我推荐大家如果有点耐性的话不妨多看看国外的DNN资源, 我想这对你的dnn之旅会受益不少. 在此我推荐一个专门针对dnn资源搜索的网站, 你可以比较有针对性的获取到纯"DNN" 的第一手资源, 也许里边就有你想要的解决方案, 同时它也提供了一些有效获取dnn资源的途径: