张麟华,郭彩萍
(1.太原工业学院计算机工程系,山西太原 030008;2.太原工业学院电子工程系,山西太原 030008)
基于DotNetNuke系统的模块开发研究
张麟华1,郭彩萍2
(1.太原工业学院计算机工程系,山西太原 030008;2.太原工业学院电子工程系,山西太原 030008)
在对DotNetNuke(简称DNN)运行机制分析的基础上,以Banner模块的开发为例,针对首次接触DNN的程序人员不熟悉基本开发步骤这个主要问题,介绍了制作DNN模块的详细流程,指出了环境搭建中的一些常见问题和注意事项。
DotNetNuke;模块;Asp.Net
DNN是一个免费、开源、可扩展的内容管理系统[1],是建立在微软ASP.NET平台之上的一套Web应用框架[2]。可广泛应用于商务网站、企业内网和外网网站、在线内容发布网站[3]。本文将以一个实际应用为例详细介绍DNN模块的开发流程和注意事项。
DNN的所有内容(包括页面、模块定义、模块内容等)都是存储在数据库中,每次加载页面过程实际是对数据库中不同数据的读取[4]。DNN真正的页面其实只有一个Default.aspx,它根据URL中的信息加载相应的皮肤,然后将相应的模块注入到皮肤的区域中。
本实例使用C#,以VS2008作为开发环境,在DNN之外单独建立一个模块项目。这样虽然调试过程比较繁琐,但是速度较快。
(1)建立一个Asp.Net Web应用程序。注意要将项目建立在网站根目录下的DesktopModules文件夹下;
(2)将输出路径改为网站根目录下的bin文件夹中;
(3)添加Microsoft.ApplicationBlocks。Data、DotNetNuke程序集的引用;
(4)将Components中的文件组织在一个命名空间下;
(5)为用户控件引入命名空间:
using DotNetNuke.Common.Utilities;
using DotNetNuke.Entities.Modules;
using DotNetNuke.Services.Exceptions;
using DotNetNuke.Services.Localization;
using Banner.Components;
(6)修改用户控件的继承
至此,一个DNN项目建立完成,安装后即可进行开发调试。
3.1 结构分析
3.1.1 App_LocalResources文件夹
该文件夹下为资源文件,DNN的本地化会用到,每一个资源文件与界面文件相对应。
3.1.2 Components文件夹
该文件夹包括一些共用的组件如下[5]。
DataProvider.cs:用于DNN模块中的数据库访问。由于DNN支持多数据库,此处使用工厂模式,运用。Net的反射技术生成相应操作数据库的对象。
SqlDataProvider.cs:实际操作数据库的类。
BannerController.cs:前台调用后台数据时使用该类。
BannerInfo.cs:用于保存后台读出的数据。
3.1.3 SqlDataProvider文件
包含建表、建存储过程、删除表等操作的脚本,在DNN中安装或卸载模块时被调用。
3.1.4 ascx文件
类似普通网页中的.aspx文件,其功能是为模块提供与用户的交互界面[6]。一般View**为模块主界面,Edit**为模块的编辑界面,Setting是对模块的一些设置。
3.2 ViewBanner.ascx分析
ViewBanner.ascx是Banner模块的主要界面,用于显示一些广告图片及其说明。这里主要涉及DNN的数据访问策略。
3.2.1 ViewBanner.ascx.cs代码
3.2.2 BannerController.cs中定义
3.2.3 DataProvider.Instance()反射机制[7]
3.2.4 实际调用
SqlHelper是一个数据库帮助类。getAllBanners是存储过程名称,moduleId为存储过程所用的参数,返回一个IDataReader的数据流。
3.3 EditBanner.ascx分析
该控件为模块的编辑控件,用于上传广告图片。在这里涉及到的内容包括控件之间的跳转、本地化支持以及使用DNN提供的一些控件。
3.3.1 控件之间的跳转
首先要从ViewBanner控件跳转到EdiBanner控件。在Asp.Net中一般使用Response.Redirect(URL)实现页面的跳转。由于DNN并没有实际的页面,所以关键是如何生成正确的URL。这里使用EditUrl(ctl),其中ctl为要跳转到的控件的标识,即在添加控件时设置的Key值。
3.3.2 使用DNN提供的控件
在DNN中提供了丰富的控件以简化程序员工作[8]。一种是编译到.dll文件中的控件,一种是可直接使用的.ascx控件。如为EditBanner增加图片上传选择的功能,就可选择后者。
首先注册控件,
<%@Register TagPrefix=“dnn”TagName=“URL”Src=“~/controls/URLControl.ascx”%>
然后即可在代码中使用,
<dnn:url id=“urlImgSrc”runat=“server”/>
3.3.3 本地化支持
本文以DNNLabel为例介绍本地化操作。
(1)首先在代码中加入一个DNNLabel控件<%@RegisterTagPrefix=“dnn”TagName=“Label”Src=“~/controls/labelcontrol.ascx”%>
<dnn:Label runat=“server”resourcekey=“lblTitle”width=“130px”></dnn:Label>
(2)在EditBanner.ascx.resx进行如图1的操作.注意Text,Help等属性的大小写。
图1 资源文件操作
(3)当需要中文时,只需再添加一个资源文件EditBanner.ascx.zh-CN.resx。
4.1 调试模块
在开发过程中需要进行调试,对于单独建立的DNN模块项目可以使用附加进程的方法:
(1)打开安装了改模块的网站;
(2)在VS中选择“调试”->“附加到进程”,选择aspnet_wp.exe,点击“附加”即可调试程序。
4.2 打包模块
可以手动添加发布包,也可以使用DNN系统自动生成发布包。本文以自动生成方式为例:
(1)添加数据库脚本文件。在01.00.00.SqlDataProvider文件中添加生成表、存储过程的脚本,在安装模块中会执行这些脚本。在Uninstall.SqlDataProvider文件中添加删除表、存储过程的脚本,当删除模块时会执行这些脚本;
(2)以Host身份登录网站,进入Module Definition页面;
(3)进入MyBanner模块的编辑界面;
(4)点击页面最底部的Create Package,进入模块的打包界面;
(5)按提示进行下去,系统生成一个后缀名为。dnn的安装文件;
(6)当一切完成后会提示生成的.Zip包位置。
至此模块打包完成,可以在其它DNN系统上安装运行。
本文概要介绍了DNN模块开发的流程以及开发过程中的一些技巧,意在使研发人员能快速上手DNN模块的开发,避免一些初学者易犯的错误。
[1]Shaun Walker.Professional DotNetNuke 5:Open Source Web Application Framework for ASP.NET[M].Indiana:Wiley Publishing,2009:378-421.
[2]Shaun Walker.Professional DotNetNuke Module Programming[M].Canada:Wiley Publishing,2009:121-131.
[3]宫洪芸,张芹.基于ASP.NET的WEB应用框架DNN的研究与应用[J].软件导刊,2009(1):161-162.
[4]王时绘,童小刚.开源内容管理系统DotNetNuke的研究[J].软件导刊,2009(8):34-35.
[5]莫光健,谭冠政.基于.NET开源架构DotnetNuke的web应用[J].贵州工业大学学报,2008,35(2):58-61.
[6]滕国栋,姜华强.基于DNN的高校科研管理信息系统的分析与设计[J].杭州师范学院学报,2006,5(2):145-147.
[7]肖国尊.DotNetNuke 4高级编程[M].北京:清华大学出版社,2008:215-264.
[8]Andrew Hay.Beginning DotNetNuke Skinning and Design[M].Canada:Wrox Publishing,2007:56-93.
〔编辑 高海〕
Module Development based on DotNetNuke
ZHANG Lin-hua1,GUO Cai-ping2
(1.Department of Computer Engineering,Taiyuan Institute of Technology,Taiyuan Shanxi,030008;2.Department of Electronic Engineering,Taiyuan Institute of Technology,Taiyuan Shanxi,030008)
Taking the development of Banner Module for example,this paper introduces detailed process of making DNN modules and points out some issues and considerations when building environment for programmers who first contact DNN and are not familiar with the basic development steps on the analysis of operation mechanism of the DotNetNuke.
DotNetNuke;Module;Asp.Net
TP311.1
A
1674-0874(2011)01-0019-03
2010-10-28
张麟华(1982-),男,山西太原人,硕士,讲师,研究方向:计算机应用。