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. 在linux下将当前目录文件全部小写含目录名

    ls | sed -n '/[A-Z]/s/.*/mv & \L&/e' 公司以前用的windows server 服务器  文件大小写都一样.  新迁移到centos 服务器上,发现 ...

  2. Python学习笔记 :01概述

    Python基础 首先推荐学习Python基础的教程和书籍 视频教程推荐南京大学张莉老师在cousera上的教程用Python玩转数据 入门教程<Python基础教程> 数据挖掘教程< ...

  3. UVA 1594 Ducci Sequence(两极问题)

           Ducci Sequence Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu   D ...

  4. socket本地模拟TCP 服务器+客户端(二)

    建立两个py文件,分别打开两个cmd界面,即可进行通信.服务器端运用多进程,连续不断的处理从客户端接收到的数据:客户端通过一个list不断给客户端发送数据. (每个连接都必须创建新线程(或进程)来处理 ...

  5. socket函数

    为了执行网络IO,一个进程必须做的第一件事就是调用socket函数,指定期望的通信协议类型 int socket(int family,int type,int protocol); 其中,famil ...

  6. Actor模型

    Actors模型(Actor model)首先是由Carl Hewitt在1973定义, 由Erlang OTP (Open Telecom Platform) 推广,其 消息传递更加符合面向对象的原 ...

  7. Shared and Exclusive Locks 共享和排它锁

    14.5 InnoDB Locking and Transaction Model InnoDB 锁和事务模型 14.5.1 InnoDB Locking 14.5.2 InnoDB Transact ...

  8. 【HDOJ】2395 Alarm Clock

    水题. /* 2395 */ #include <cstdio> #include <cstring> #include <cstdlib> #define MAX ...

  9. Symmetric Tree——LeetCode

    Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For e ...

  10. tengine rpm制作

    最近又在centos6.4下折腾tengine了,刚好不久前看了rpm包的制作方法,所以又有了搞个rpm包的想法. 1 安装centos的开发环境集成包及tengine的依赖包 1 yum group ...