張麟華,郭彩萍
(1.太原工業(yè)學(xué)院計(jì)算機(jī)工程系,山西太原 030008;2.太原工業(yè)學(xué)院電子工程系,山西太原 030008)
基于DotNetNuke系統(tǒng)的模塊開(kāi)發(fā)研究
張麟華1,郭彩萍2
(1.太原工業(yè)學(xué)院計(jì)算機(jī)工程系,山西太原 030008;2.太原工業(yè)學(xué)院電子工程系,山西太原 030008)
在對(duì)DotNetNuke(簡(jiǎn)稱DNN)運(yùn)行機(jī)制分析的基礎(chǔ)上,以Banner模塊的開(kāi)發(fā)為例,針對(duì)首次接觸DNN的程序人員不熟悉基本開(kāi)發(fā)步驟這個(gè)主要問(wèn)題,介紹了制作DNN模塊的詳細(xì)流程,指出了環(huán)境搭建中的一些常見(jiàn)問(wèn)題和注意事項(xiàng)。
DotNetNuke;模塊;Asp.Net
DNN是一個(gè)免費(fèi)、開(kāi)源、可擴(kuò)展的內(nèi)容管理系統(tǒng)[1],是建立在微軟ASP.NET平臺(tái)之上的一套Web應(yīng)用框架[2]??蓮V泛應(yīng)用于商務(wù)網(wǎng)站、企業(yè)內(nèi)網(wǎng)和外網(wǎng)網(wǎng)站、在線內(nèi)容發(fā)布網(wǎng)站[3]。本文將以一個(gè)實(shí)際應(yīng)用為例詳細(xì)介紹DNN模塊的開(kāi)發(fā)流程和注意事項(xiàng)。
DNN的所有內(nèi)容(包括頁(yè)面、模塊定義、模塊內(nèi)容等)都是存儲(chǔ)在數(shù)據(jù)庫(kù)中,每次加載頁(yè)面過(guò)程實(shí)際是對(duì)數(shù)據(jù)庫(kù)中不同數(shù)據(jù)的讀?。?]。DNN真正的頁(yè)面其實(shí)只有一個(gè)Default.aspx,它根據(jù)URL中的信息加載相應(yīng)的皮膚,然后將相應(yīng)的模塊注入到皮膚的區(qū)域中。
本實(shí)例使用C#,以VS2008作為開(kāi)發(fā)環(huán)境,在DNN之外單獨(dú)建立一個(gè)模塊項(xiàng)目。這樣雖然調(diào)試過(guò)程比較繁瑣,但是速度較快。
(1)建立一個(gè)Asp.Net Web應(yīng)用程序。注意要將項(xiàng)目建立在網(wǎng)站根目錄下的DesktopModules文件夾下;
(2)將輸出路徑改為網(wǎng)站根目錄下的bin文件夾中;
(3)添加Microsoft.ApplicationBlocks。Data、DotNetNuke程序集的引用;
(4)將Components中的文件組織在一個(gè)命名空間下;
(5)為用戶控件引入命名空間:
using DotNetNuke.Common.Utilities;
using DotNetNuke.Entities.Modules;
using DotNetNuke.Services.Exceptions;
using DotNetNuke.Services.Localization;
using Banner.Components;
(6)修改用戶控件的繼承
至此,一個(gè)DNN項(xiàng)目建立完成,安裝后即可進(jìn)行開(kāi)發(fā)調(diào)試。
3.1 結(jié)構(gòu)分析
3.1.1 App_LocalResources文件夾
該文件夾下為資源文件,DNN的本地化會(huì)用到,每一個(gè)資源文件與界面文件相對(duì)應(yīng)。
3.1.2 Components文件夾
該文件夾包括一些共用的組件如下[5]。
DataProvider.cs:用于DNN模塊中的數(shù)據(jù)庫(kù)訪問(wèn)。由于DNN支持多數(shù)據(jù)庫(kù),此處使用工廠模式,運(yùn)用。Net的反射技術(shù)生成相應(yīng)操作數(shù)據(jù)庫(kù)的對(duì)象。
SqlDataProvider.cs:實(shí)際操作數(shù)據(jù)庫(kù)的類。
BannerController.cs:前臺(tái)調(diào)用后臺(tái)數(shù)據(jù)時(shí)使用該類。
BannerInfo.cs:用于保存后臺(tái)讀出的數(shù)據(jù)。
3.1.3 SqlDataProvider文件
包含建表、建存儲(chǔ)過(guò)程、刪除表等操作的腳本,在DNN中安裝或卸載模塊時(shí)被調(diào)用。
3.1.4 ascx文件
類似普通網(wǎng)頁(yè)中的.aspx文件,其功能是為模塊提供與用戶的交互界面[6]。一般View**為模塊主界面,Edit**為模塊的編輯界面,Setting是對(duì)模塊的一些設(shè)置。
3.2 ViewBanner.ascx分析
ViewBanner.ascx是Banner模塊的主要界面,用于顯示一些廣告圖片及其說(shuō)明。這里主要涉及DNN的數(shù)據(jù)訪問(wèn)策略。
3.2.1 ViewBanner.ascx.cs代碼
3.2.2 BannerController.cs中定義
3.2.3 DataProvider.Instance()反射機(jī)制[7]
3.2.4 實(shí)際調(diào)用
SqlHelper是一個(gè)數(shù)據(jù)庫(kù)幫助類。getAllBanners是存儲(chǔ)過(guò)程名稱,moduleId為存儲(chǔ)過(guò)程所用的參數(shù),返回一個(gè)IDataReader的數(shù)據(jù)流。
3.3 EditBanner.ascx分析
該控件為模塊的編輯控件,用于上傳廣告圖片。在這里涉及到的內(nèi)容包括控件之間的跳轉(zhuǎn)、本地化支持以及使用DNN提供的一些控件。
3.3.1 控件之間的跳轉(zhuǎn)
首先要從ViewBanner控件跳轉(zhuǎn)到EdiBanner控件。在Asp.Net中一般使用Response.Redirect(URL)實(shí)現(xiàn)頁(yè)面的跳轉(zhuǎn)。由于DNN并沒(méi)有實(shí)際的頁(yè)面,所以關(guān)鍵是如何生成正確的URL。這里使用EditUrl(ctl),其中ctl為要跳轉(zhuǎn)到的控件的標(biāo)識(shí),即在添加控件時(shí)設(shè)置的Key值。
3.3.2 使用DNN提供的控件
在DNN中提供了豐富的控件以簡(jiǎn)化程序員工作[8]。一種是編譯到.dll文件中的控件,一種是可直接使用的.ascx控件。如為EditBanner增加圖片上傳選擇的功能,就可選擇后者。
首先注冊(cè)控件,
<%@Register TagPrefix=“dnn”TagName=“URL”Src=“~/controls/URLControl.ascx”%>
然后即可在代碼中使用,
<dnn:url id=“urlImgSrc”runat=“server”/>
3.3.3 本地化支持
本文以DNNLabel為例介紹本地化操作。
(1)首先在代碼中加入一個(gè)DNNLabel控件<%@RegisterTagPrefix=“dnn”TagName=“Label”Src=“~/controls/labelcontrol.ascx”%>
<dnn:Label runat=“server”resourcekey=“l(fā)blTitle”width=“130px”></dnn:Label>
(2)在EditBanner.ascx.resx進(jìn)行如圖1的操作.注意Text,Help等屬性的大小寫(xiě)。
圖1 資源文件操作
(3)當(dāng)需要中文時(shí),只需再添加一個(gè)資源文件EditBanner.ascx.zh-CN.resx。
4.1 調(diào)試模塊
在開(kāi)發(fā)過(guò)程中需要進(jìn)行調(diào)試,對(duì)于單獨(dú)建立的DNN模塊項(xiàng)目可以使用附加進(jìn)程的方法:
(1)打開(kāi)安裝了改模塊的網(wǎng)站;
(2)在VS中選擇“調(diào)試”->“附加到進(jìn)程”,選擇aspnet_wp.exe,點(diǎn)擊“附加”即可調(diào)試程序。
4.2 打包模塊
可以手動(dòng)添加發(fā)布包,也可以使用DNN系統(tǒng)自動(dòng)生成發(fā)布包。本文以自動(dòng)生成方式為例:
(1)添加數(shù)據(jù)庫(kù)腳本文件。在01.00.00.SqlDataProvider文件中添加生成表、存儲(chǔ)過(guò)程的腳本,在安裝模塊中會(huì)執(zhí)行這些腳本。在Uninstall.SqlDataProvider文件中添加刪除表、存儲(chǔ)過(guò)程的腳本,當(dāng)刪除模塊時(shí)會(huì)執(zhí)行這些腳本;
(2)以Host身份登錄網(wǎng)站,進(jìn)入Module Definition頁(yè)面;
(3)進(jìn)入MyBanner模塊的編輯界面;
(4)點(diǎn)擊頁(yè)面最底部的Create Package,進(jìn)入模塊的打包界面;
(5)按提示進(jìn)行下去,系統(tǒng)生成一個(gè)后綴名為。dnn的安裝文件;
(6)當(dāng)一切完成后會(huì)提示生成的.Zip包位置。
至此模塊打包完成,可以在其它DNN系統(tǒng)上安裝運(yùn)行。
本文概要介紹了DNN模塊開(kāi)發(fā)的流程以及開(kāi)發(fā)過(guò)程中的一些技巧,意在使研發(fā)人員能快速上手DNN模塊的開(kāi)發(fā),避免一些初學(xué)者易犯的錯(cuò)誤。
[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應(yīng)用框架DNN的研究與應(yīng)用[J].軟件導(dǎo)刊,2009(1):161-162.
[4]王時(shí)繪,童小剛.開(kāi)源內(nèi)容管理系統(tǒng)DotNetNuke的研究[J].軟件導(dǎo)刊,2009(8):34-35.
[5]莫光健,譚冠政.基于.NET開(kāi)源架構(gòu)DotnetNuke的web應(yīng)用[J].貴州工業(yè)大學(xué)學(xué)報(bào),2008,35(2):58-61.
[6]滕國(guó)棟,姜華強(qiáng).基于DNN的高??蒲泄芾硇畔⑾到y(tǒng)的分析與設(shè)計(jì)[J].杭州師范學(xué)院學(xué)報(bào),2006,5(2):145-147.
[7]肖國(guó)尊.DotNetNuke 4高級(jí)編程[M].北京:清華大學(xué)出版社,2008:215-264.
[8]Andrew Hay.Beginning DotNetNuke Skinning and Design[M].Canada:Wrox Publishing,2007:56-93.
〔編輯 高?!?/p>
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-),男,山西太原人,碩士,講師,研究方向:計(jì)算機(jī)應(yīng)用。