DNN (Dotnetnuke) 首先是开源的,并且采用BSD开源协议,也就是说你可以任意修改源代码、传播、作为商品出售,仅有的要求就是保留源代码中的版权文字,这就解决了我多年来的心病:我知道动网新闻发布系统、微软官方论坛等都做得相当不错,可惜源代码都是不公开的,并且有着很严格的产权保护,你在做项目时不得不多考虑一些东西,但是DNN不一样,它几乎赤裸裸的以至于你可以为所欲为,并且得到了官方的稳定支持,学习和开发资料相对齐全,这么好的东西,我为什么不采用拿来主义呢?
 
DNN部署是很简单的,没费多大劲,我从官方网站(http://www.dotnetnuke.com)下载了安装版,数据库只支持SQL Server,不过它提供了接口,你可以自己开发让它也同时支持Oracle,Access等,但是工作量不小哦。
 
当我输入localhost进入刚安装完毕的DNN时,启动速度相对很慢,我的笔记本特别兴奋,硬盘使劲的转着,十几秒后终于看到了首页,界面设计属菜鸟级的,一如陈世美相遇秦香莲,没多大兴趣也没多大惊喜,而且扑面盖地的英文,好在本人英文水平也还凑合,据说和子怡姐姐不相上下,整个网站没有Flash。我很快找到了登录窗口,想进入后台看看,程序员嘛,多少都是偷窥狂,都渴望尽早的撕开那美丽的外衣,渴望尽早的感受那惊心动魄的内部结构。
 
我以最高权限Host用户进入了,后台不是我想象中,如动网一样的Outlook菜单,而是和前台没多大区别,多个了工具栏,每个模块,如新闻、友情链接都多了一个小箭头,鼠标晃过去就出现了菜单,很多功能所见即所得,真正震憾之旅开始了,要说清出这一大堆的前因后果,得听我细细道来。
 
我首先遇到的问题是汉化,我不可能拿个英文版的东西给客户吧?人家当时就可以用中文骂死我,但是我不知道DNN如何实现多语言?看了一下开发文档,原来 DNN是以资源包的形式实现的,我当时大笑,英雄所见略同啊。就是有一大堆的xml文件,你要变成中文的,就加个xml文件,按条目将标签对照着翻过来就行了,而强大之处在于,你可以在后台直接上传个中文包就立即汉化,也可将自己手动汉化的内容导出成xml资源文件包。这里特别感谢 dnnChina 网站,将绝大部分都成功翻译成中文了,而且相当专业,我从dnnChina 网站下载完中文包,几秒钟后,网站全成中文的了。不过只对DNN5的版本支持较好,到了DNN7则无法完全汉化了。不过后来经常发现一些乱码,于是我在web.config文件中,把默认编码utf-8换成了gb2312,乱码问题都顺利解决,我当时就纳闷:你 utf-8不是号称支持全球文字吗?怎么一遇到中文就水土不服呢?郁闷了好久,始终不得其解,打电话咨询相关机构,老外一口英文,他说的话我全能听懂,可是我说的英文这家伙竟然一句都听不懂,这老外听力根本不行,于是更郁闷了。
 
汉化问题解决了,那么紧接着是改变页面视觉效果了,这是我最耗时间的地方,客户经常以页面设计来决定整个项目的成败,我当时呕心沥血,穷尽所思,终于设计出了令客户满意的页面,当时真的很崇拜自己,美工编码双料冠军,人世罕见(臭美一下)。那么如何将这些定制的页面套到DNN呢?DNN自己定义了一系列的标准,按照这个标准,我几乎当天就制作做完了HTML页面,传到后台中就自动套上了,真的很神奇啊。
 
皮肤问题搞定,然后就是要实现内容的后台添加了。DNN以模块的形式实现这些功能,比如,客户要一个在线调查,直接插入相关模块就行了,而且各个模块可以在页面中自由的移动,很方便。其实所有模块中,最重要的是就是文章管理模块了,可惜DNN没有自带这个模块,上网搜出一个免费的,备受国内开发者推崇的 Article模块,可惜不太好使,没办法,只好自己开发一个。我觉得这才称得上是黄金框架,你开发一个模块,DNN提供了很好的接口,不用改变原系统一行代码,开发完成后,再以插件方式套上去,DNN自动识别并可以立即使用,真正的即插即用。
 
你如果能开发出第一个模块,其他的产品推荐、留言板模块就特别快了,不过很多模块DNN都自带了,不好使的可以到网上去搜,很快就可以找到,后来发现国外好多程序员在网上卖DNN模块,有个我花一天完成的同样功能模块,老外竟然卖2美元,真是黑啊,商业意识真强啊。
 
不过,当下DNN也有一些问题急待解决:1、性能不是很好,我用DNN搭建完成的这个项目后,用LoadRunner测试了一下,50人同时在线,首页打开竟要32秒,并且DNN是很耗资源的,我分析了一下,DNN由于产品化,为支持多语言、多数据库等功能增加了许多额外的代码,自带的模块从数据库读取数据时没做优化,都是按一股脑的绑到了DataSet中,当数据量到万条以上,服务器估计就得撑不住了。
 
2、自带的模块大多不太好使,很多模块连基本的翻页功能都没有,例如友情链接模块,就只支持文字而不支持图片链接,只好自己重新开发了。
 
3.调试代码太耗时间。由于DNN本身代码量就不少,每次要调试一个功能时,你最好旁边放杯茶,当你茶喝完了,要调试的代码也就出来了。后来自己开发模块时干脆就自己建立解决方案,把需要的dll都引入,这才大大提高了开发效率。于是当时我又纳闷了:Windows上千万条代码,也不知他们是怎么调试的?
 
DNN在长达10年的发展过程逐渐被国外的一些公司和组织所接受,并且形成了良好的生态。有大批的开发者和建站者为其发展添砖加瓦,由于平台建设所需的皮肤和模块很多,越来越多的人们使用DNN来建站。反观国内,由于对软件产品的消费意识不强烈,导致DNN发展止步不前也值得我们国人所思的。
大家可以去我的网站上看一下DNN皮肤和模块的介绍,也许会让大家很有启发:http://www.dnntools.net/DNNStore

开源CMS建站项目DNN研究与心得的更多相关文章

  1. 如何选择适合自己的CMS建站系统

             在互联网发展突飞猛进的今天,可谓”得市场者得天下”,而电商已成为占据市场速度最快.范围最广的手段,进而网站建设也逐渐引起商家重视,并深入到了企业和个体的发展战略之中. 如今企业建站已 ...

  2. 基于ZKEACMS的.Net Core多租户CMS建站系统

    多租户架构 多租户技术或称多重租赁技术,简称SaaS,是一种软件架构技术,是实现如何在多用户环境下共用相同的系统或程序组件,并且可确保各用户间数据的隔离性.简单讲:在一台服务器上运行单个应用实例,它为 ...

  3. 来选择一款适合你网站的CMS建站程序吧

    1:首页我们要搞清楚什么叫cms? ContentManagementSystem就是cms的全名,意思就是内容管理系统.cms整站系统是以文章系统为核心,增加用户需要的模块,如文章.图片.下载等,提 ...

  4. 推荐的五款市面上常用的免费CMS建站系统

    我做设计也有不少年头了,很多客户或者朋友找我做网站的时候,一般问我的是用什么软件系统给他们做.大部分客户希望用的软件是免费的.所以今天给大家介绍五款我自己用过还不错的,重点是还免费的建站系统. Met ...

  5. 织梦CMS建站入门学习(二)

    织梦建站的数据库设计: 1.模型表:根据网站的需求,建立不同的数据模型,如:文章浏览,软件下载,视频观看等等. 2.栏目表:根据网站的需求,建立不同的栏目,每一个栏目选择一个数据模型. 3.内容主表: ...

  6. cms建站

    1. 搭建php环境 phpnow软件安装(下载地址:  http://www.phpnow.org) 注意如果安装失败,请用以下解决办法: 1.请使用命令提示符(管理员)2.打开后进入PHPnow目 ...

  7. 帝国cms建站总结-(分页)

    帝国cms分页代码文件t_functions.php 代码为: <?php if(!defined('InEmpireCMS')) { exit(); } define('InEmpireCMS ...

  8. 帝国cms建站-动态获取栏目id

    <?php $fcr=explode('|',$class_r[$GLOBALS[navclassid]][featherclass]); $topbclassid=$fcr[1]?$fcr[1 ...

  9. 织梦CMS建站入门学习(一)

    一.下载与安装. 首先到织梦官网下载软件,可选择UTF8或GBK不同编码格式,如果电脑没有PHP环境,还要下载dede自带的PHP环境软件. 将软件中的upload文件夹内容复制到WWW文件夹下,然后 ...

随机推荐

  1. centos 下搭建 php环境(1)

    3.PHP的安装 安装GD库(让PHP支持GIF,PNG,JPEG) 首先下载 jpeg6,libpng,freetype 并安装模块 wget http://www.ijg.org/files/jp ...

  2. codevs 1153 道路游戏

    传送门   题目描述 Description 小新正在玩一个简单的电脑游戏.游戏中有一条环形马路,马路上有n 个机器人工厂,两个相邻机器人工厂之间由一小段马路连接.小新以某个机器人工厂为起点,按顺时针 ...

  3. Nhibernate 分页

    public IList<Student> GetStudentByPage(int pageSize, int pageIndex, string SName) { ISession s ...

  4. 在安装包运行时指定Component的安装路径

    Basic MSI工程类型中如果实现动态指定安装路径的功能,下面介绍的方法也适用于InstallScript MSI工程. 1. 在Setup Design中找到相对应的Component. 2. 点 ...

  5. .NET MVC执行过程

    1.网址路由比对 2.执行Controller与Action 3.执行View并返回结果 在使用MVC中是由IgnoreRoute()辅助方法对比成功的,会导致程序直接跳离MVC的执行生命周期,将程序 ...

  6. 关于Qt在子线程中使用QMessageBox的折衷方法

    Qt将所有GUI相关的处理都限制在主线程中,这么做有助于防止意想不到的访问冲突产生,但也限制了线程中某些简单的UI交互的实现,比如QMessageBox. 因为QMessageBox必须在主线程中打开 ...

  7. DEDECMS调用最新评论

    {dede:feedback row='5' titlelen='24' infolen='80'} <div class="yhplk"><div>[fi ...

  8. 【细说Java】Java封箱拆箱的一些问题

    1.概念 首先简单介绍一下概念性的东西: 所谓封箱:就是把基本类型封装成其所对应的包装类型: 而拆箱则恰好相反,是把包装类型转换成其所对应的基本数据类型. 如基本类型int,封箱后的包装类是Integ ...

  9. jstat(JVM Statistics Monitoring Tool)

    功能   用于监视虚拟机各种运行状态信息的命令行工具.它可以显示本地或远程虚拟机进程中的类装载.内存.垃圾收集.JIT编译等运行数据,在没有GUI图形界面,只提供了纯文本控制台环境的服务器上,它将是运 ...

  10. 错误 1 未能找到元数据文件“C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/wwwroot/7cb4fcd

    错误 1 未能找到元数据文件“C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/wwwroot/7cb4fcd ...