孟昕(安徽電子信息職業(yè)技術(shù)學(xué)院信息與智能工程系,安徽蚌埠233030)
ASP.NETCMS的設(shè)計(jì)與開發(fā)
孟昕
(安徽電子信息職業(yè)技術(shù)學(xué)院信息與智能工程系,安徽蚌埠233030)
ASP.NETCMS是使用ASP.NET技術(shù)設(shè)計(jì)開發(fā)的一款安全實(shí)用、精簡高效、編碼規(guī)范、功能易于擴(kuò)展、注重用戶體驗(yàn)的網(wǎng)站內(nèi)容管理系統(tǒng)(CMS),內(nèi)容包括匿名角色業(yè)務(wù)設(shè)計(jì)、內(nèi)容編輯管理業(yè)務(wù)設(shè)計(jì)、內(nèi)容審核管理業(yè)務(wù)設(shè)計(jì)、欄目編輯管理業(yè)務(wù)設(shè)計(jì)、賬戶權(quán)限管理業(yè)務(wù)設(shè)計(jì),著重分析了其中的數(shù)據(jù)編輯類業(yè)務(wù)和欄目管理業(yè)務(wù)的具體開發(fā)實(shí)現(xiàn).
內(nèi)容管理系統(tǒng);ASP.NET;設(shè)計(jì)模式;站點(diǎn)地圖提供程序
Meng X.Design and DevelopmentofCMSBased on ASP.NET[J].Journalof Yibin University,2015,15(6):61-65.
內(nèi)容管理系統(tǒng)(Content Management System,CMS)是企業(yè)信息化建設(shè)和電子政務(wù)的必要工具,多用于網(wǎng)站開發(fā)或運(yùn)行維護(hù),以加快網(wǎng)站開發(fā)的速度和減少開發(fā)的成本[1].目前常用的商用CMS有動易內(nèi)容管理系統(tǒng)、Zoom la!逐浪CMS、帝國網(wǎng)站管理系統(tǒng)、織夢CMS、方正翔宇CMS、uzcms、Wordpress等.在系統(tǒng)功能和架構(gòu)上,這些網(wǎng)站內(nèi)容管理系統(tǒng)都有很大的相似性,一般都具備權(quán)限管理、模塊管理、界面模板管理、統(tǒng)計(jì)分析等功能[2].典型開發(fā)語言和技術(shù)主要包括:PHP+MySQL、ASP.NET+MSSQL、ASP+ Access/MSSQL、JAVAEE/J2EE.因?yàn)樽陨砑夹g(shù)路線局限,Web開發(fā)人員只會選擇其中自己熟悉的一類中的某個CMS進(jìn)行網(wǎng)站建設(shè),并用于網(wǎng)站后期運(yùn)行維護(hù)的管理.適用于ASP.NET網(wǎng)站建設(shè)的CMS稍少,且多為商用,由于微軟的商業(yè)運(yùn)行模式,技術(shù)多閉源,基于ASP.NET的開源CMS更少.使用自主開發(fā)的CMS無需授權(quán)費(fèi)用,且便于二次開發(fā)[3].對于使用CMS較多的企事業(yè)單位或軟件公司來說,自主開發(fā)一款CMS具有必要性和經(jīng)濟(jì)意義.
當(dāng)前,高校對信息化教學(xué)越來越重視[4],為解決使用基于ASP.NET的商用CMS系統(tǒng)選擇范圍小,授權(quán)費(fèi)用開銷高,以及對高校教學(xué)資源庫、精品資源共享課等教學(xué)領(lǐng)域網(wǎng)站建設(shè)需求考慮不周,二次開發(fā)不便或成本高、網(wǎng)站管理效率低等問題,結(jié)合學(xué)校及其二級部門網(wǎng)站、精品資源共享課等教學(xué)網(wǎng)站和其他一般企事業(yè)門戶網(wǎng)站的建設(shè)管理需求,設(shè)計(jì)開發(fā)了一個安全實(shí)用、精簡高效、編碼規(guī)范、功能易于擴(kuò)展、注重操作體驗(yàn)的網(wǎng)站內(nèi)容管理系統(tǒng).
結(jié)合對學(xué)校部門網(wǎng)站、精品資源共享課等教學(xué)網(wǎng)站和一般企業(yè)門戶網(wǎng)站建設(shè)與維護(hù)的需求分析,按角色劃分權(quán)限的設(shè)計(jì)思想,可將CMS用戶分為一般用戶(匿名角色)、內(nèi)容編輯管理、內(nèi)容審核管理、欄目編輯管理、賬戶權(quán)限管理等五種角色,分別具有不同業(yè)務(wù)操作權(quán)限.按角色業(yè)務(wù)權(quán)限劃分的主要功能如圖1所示.
圖1 CMS的主要功能
2.1匿名角色業(yè)務(wù)設(shè)計(jì)
網(wǎng)站用戶均可以注冊新賬戶,等待具有管理權(quán)限的賬戶將其劃分到相應(yīng)角色,具有不同業(yè)務(wù)權(quán)限,若沒有被劃分角色,則為匿名角色賬戶.匿名角色賬戶具有的業(yè)務(wù)權(quán)限主要有投遞稿件和在線留言.
(1)投遞稿件
匿名角色賬戶可為網(wǎng)站指定欄目添加內(nèi)容,查看所有自己添加的內(nèi)容,修改或刪除自己添加的未被內(nèi)容審核管理角色發(fā)布到網(wǎng)站前端的內(nèi)容.
此功能比較實(shí)用,如cnBeta、雷鋒網(wǎng)等很多IT資訊網(wǎng)站內(nèi)容很大一部分來自網(wǎng)站用戶投稿,這大大減輕了網(wǎng)站運(yùn)維人員的工作量.對于高校內(nèi)的精品課程或精品資源共享課網(wǎng)站,允許學(xué)生為網(wǎng)站一些欄目添加課程學(xué)習(xí)資源,無疑可提高學(xué)生對本課程的參與度和學(xué)習(xí)興趣.
(2)在線留言
用戶登錄后,可以在線留言或提問,增加網(wǎng)站運(yùn)維方與用戶的互動.
除去上述兩個業(yè)務(wù)外,匿名角色用戶(包括其他管理賬戶)均可以修改密碼、重置忘記的密碼、查看賬戶信息.
2.2內(nèi)容編輯管理業(yè)務(wù)設(shè)計(jì)
內(nèi)容編輯管理角色賬戶主要業(yè)務(wù)權(quán)限有添加編輯刪除內(nèi)容、檢索查看內(nèi)容、發(fā)布預(yù)覽、上傳圖片或附件.
(1)添加編輯刪除內(nèi)容
具有內(nèi)容編輯管理權(quán)限的用戶登錄后,可以為網(wǎng)站所有欄目(即文章類別)添加文章,即確定文章的標(biāo)題、來源、所屬欄目、內(nèi)容摘要、內(nèi)容詳情、標(biāo)題圖片等信息.添加者、添加時間等信息,系統(tǒng)將自動記錄,也可以編輯或刪除未被發(fā)布的文章,系統(tǒng)自動記錄編輯時間.已發(fā)布的文章,已經(jīng)在網(wǎng)站前端顯示,若要編輯或刪除,需要經(jīng)具有內(nèi)容審核管理權(quán)限的賬戶取消發(fā)布后才可以進(jìn)行.
(2)檢索查看內(nèi)容
內(nèi)容編輯管理用戶可以查看所有文章列表或按文章所屬欄目、標(biāo)題、來源、內(nèi)容詳情檢索文章,并可對文章列表按標(biāo)題、添加者、添加時間、來源等進(jìn)行排序,分頁查看.
(3)發(fā)布預(yù)覽
預(yù)覽文章在網(wǎng)站前端頁面中的顯示效果,便于在發(fā)布前發(fā)現(xiàn)問題.
(4)上傳圖片或附件
網(wǎng)站內(nèi)容中,除文本外,還有圖片、視頻、音頻或其他供鏈接下載的被允許格式和大小的文件等.若有需要,內(nèi)容編輯管理角色賬戶可根據(jù)需要上傳.
2.3內(nèi)容審核管理業(yè)務(wù)設(shè)計(jì)
內(nèi)容審核管理賬戶主要業(yè)務(wù)權(quán)限有發(fā)布預(yù)覽、內(nèi)容發(fā)布或刪除、管理圖片附件等.
(1)內(nèi)容發(fā)布或刪除
匿名賬戶投遞的稿件或者內(nèi)容編輯管理賬戶添加的文章,經(jīng)內(nèi)容審核管理賬戶預(yù)覽檢查,或根據(jù)需要編輯后,若合格則設(shè)置其在網(wǎng)站前端顯示,否則刪除或留待添加者繼續(xù)編輯.另外,內(nèi)容審核管理賬戶也可以根據(jù)實(shí)際需要設(shè)置某些文章在前端列表頁中靠前顯示.
(2)管理圖片附件
內(nèi)容審核管理賬戶可查看上傳的圖片和其他格式文件,刪除未在使用的圖片或者文件,以節(jié)省部署網(wǎng)站服務(wù)器的存儲開銷.系統(tǒng)應(yīng)提供自動檢索無用圖片或文件的功能,以供刪除.
2.4欄目編輯管理業(yè)務(wù)設(shè)計(jì)
欄目編輯管理主要業(yè)務(wù)權(quán)限有欄目管理、友鏈管理和數(shù)據(jù)備份.
(1)欄目管理
網(wǎng)站導(dǎo)航菜單是進(jìn)入網(wǎng)站各欄目頁的入口,同一類別的文章在同一欄目頁中以各種列表形式(如標(biāo)題列表、圖片列表、標(biāo)題和圖片列表等)展示出來供用戶點(diǎn)擊查看.欄目編輯管理賬戶若可以自由擴(kuò)展、修改、刪除欄目,控制欄目級別,允許投稿與否,允許在前端顯示與否,甚至更換欄目內(nèi)容列表頁模板,并在前端頁面導(dǎo)航菜單中自動同步,將使網(wǎng)站高度動態(tài)化.
(2)友鏈管理
一般網(wǎng)站前端多會有友情鏈接列表,在系統(tǒng)中可以對其進(jìn)行添加、編輯、刪除、控制其是否顯示等操作.
(3)數(shù)據(jù)備份
網(wǎng)站的賬戶信息、欄目信息以及文章信息都存儲在數(shù)據(jù)庫中,為防止誤操作或者服務(wù)器故障導(dǎo)致數(shù)據(jù)丟失,可以進(jìn)行數(shù)據(jù)備份和還原.
2.5賬戶權(quán)限管理業(yè)務(wù)設(shè)計(jì)
賬戶權(quán)限管理主要業(yè)務(wù)權(quán)限有權(quán)限管理、查看賬戶、刪除賬戶.
(1)權(quán)限管理
一般多個管理員甚至一般用戶都會參與到網(wǎng)站的管理,不同的類別(角色)的賬戶應(yīng)具有不同的操作業(yè)務(wù)和訪問權(quán)限,需要基于角色的權(quán)限控制.CMS系統(tǒng)可賦予各角色不同權(quán)限,具有賬戶權(quán)限管理權(quán)限的賬戶可把用戶劃分到某一個或多個角色,以讓其獲取相應(yīng)授權(quán).此外,權(quán)限管理還包括創(chuàng)建角色、刪除角色等.
(2)查看賬戶
可以查看所有賬戶的當(dāng)前聯(lián)機(jī)狀態(tài)、登錄時間、上次活動時間等基本信息.
(3)刪除賬戶
根據(jù)需要,刪除無用賬戶.
3.1ASP.NET 2.0數(shù)據(jù)訪問組件結(jié)構(gòu)與設(shè)計(jì)模式選擇
網(wǎng)站內(nèi)容管理系統(tǒng)實(shí)際上是一個數(shù)據(jù)訪問Web應(yīng)用程序,主要負(fù)責(zé)把信息寫入數(shù)據(jù)庫,而網(wǎng)站前端頁面則讀取這些信息并展示出來,如圖2所示.
圖2 網(wǎng)站信息處理過程
對于ASP.NET 1.X技術(shù)而言,開發(fā)人員需要創(chuàng)建代碼訪問和更新數(shù)據(jù)庫,將檢索到的數(shù)據(jù)轉(zhuǎn)換為瀏覽器識別的HTML格式.可考慮采用三層架構(gòu)設(shè)計(jì),創(chuàng)建多個項(xiàng)目來分別實(shí)現(xiàn)表現(xiàn)層(UI)、業(yè)務(wù)邏輯層(BLL)和數(shù)據(jù)訪問層(DAL).
ASP.NET 2.0之后新增了數(shù)據(jù)訪問功能,若將三層架構(gòu)設(shè)計(jì)應(yīng)用在ASP.NET 2.0+開發(fā)上,無疑增加代碼開銷和人力成本,并降低系統(tǒng)性能.對于ASP.NET 2.0+Web應(yīng)用程序,數(shù)據(jù)訪問依賴于兩個獨(dú)立的體系結(jié)構(gòu)層.第一層完全由Framework提供,直接跟數(shù)據(jù)源打交道,實(shí)現(xiàn)數(shù)據(jù)訪問的基本框架.第二層由為程序員提供數(shù)據(jù)訪問功能的API和控件組成,在實(shí)際應(yīng)用中,常常使用這些API和控件即可實(shí)現(xiàn)特定數(shù)據(jù)存儲的功能,提高開發(fā)人員的開發(fā)效率和Web應(yīng)用程序的性能.具體來看,數(shù)據(jù)訪問涉及四個主要的組件:Web應(yīng)用層(ASP.NET)、數(shù)據(jù)層(ADO.NET)、數(shù)據(jù)提供程序以及真正的數(shù)據(jù)源.這些組件構(gòu)成了所有數(shù)據(jù)訪問Web應(yīng)用程序的基礎(chǔ)結(jié)構(gòu),如圖3所示[5].開發(fā)過程主要關(guān)注Web應(yīng)用層一層即可.
圖3 ASP.NET 2.0組件體系結(jié)構(gòu)
3.2關(guān)鍵技術(shù)實(shí)現(xiàn)
本系統(tǒng)實(shí)現(xiàn)了前面總體設(shè)計(jì)中的所用功能需求,現(xiàn)僅就數(shù)據(jù)編輯類業(yè)務(wù)和欄目管理業(yè)務(wù)進(jìn)行簡要介紹.
(1)數(shù)據(jù)編輯類業(yè)務(wù)的實(shí)現(xiàn)
對于數(shù)據(jù)訪問和表示,ASP.NET提供一系列數(shù)據(jù)源控件和數(shù)據(jù)綁定控件,這些控件的設(shè)計(jì)意圖是為了減少數(shù)據(jù)訪問的代碼量.例如,開發(fā)人員能使用數(shù)據(jù)源向?qū)ё詣觿?chuàng)建和配置一個數(shù)據(jù)源控件,使用這個數(shù)據(jù)源控件發(fā)布查詢和檢索結(jié)果.數(shù)據(jù)綁定控件能夠綁定到一個數(shù)據(jù)源,并能夠依據(jù)從數(shù)據(jù)源檢索到的信息,自動設(shè)置控件的外觀和內(nèi)容[6].這些數(shù)據(jù)綁定控件具有多種表現(xiàn)形式,包括網(wǎng)格(如GridView)、樹(如TreeView)、菜單(如Menu)、列表(如DrowDownList)等.數(shù)據(jù)源控件通過提供程序(例如ADO.NET中的那些提供程序)綁定到下層的數(shù)據(jù)存儲.使用數(shù)據(jù)源控件的好處是能夠在頁面中聲明性地表示出來.此外,能夠在數(shù)據(jù)綁定控件中直接使用諸如分頁、排序、更新操作等功能,無需編寫代碼或只需編寫少量代碼,使開發(fā)人員只關(guān)注業(yè)務(wù)邏輯即可.
在本系統(tǒng)中,管理員使用最多的是內(nèi)容編輯查看、欄目編輯等數(shù)據(jù)訪問功能,主要使用數(shù)據(jù)綁定控件綁定數(shù)據(jù)源控件實(shí)現(xiàn).例如,實(shí)現(xiàn)內(nèi)容編輯查看業(yè)務(wù)功能的頁面,見圖4所示(部分).頁面上部用一個GridView控件和一個SqlDataSource控件綁定,用于查看文章列表,并可排序和分頁.頁面下部用一個DetailsView控件和SqlDataSource控件綁定,用于對文章內(nèi)容的編輯.GridView和DetailsView都被重新定義了用戶界面.如頁面下部的DetailsView控件中,使用了子控件RadioButtonList展示和編輯“所屬欄目”,使用了第三方控件CKEditor作為子控件,展示和編輯“詳細(xì)內(nèi)容”和“內(nèi)容摘要”.
圖4 內(nèi)容編輯
(2)欄目管理業(yè)務(wù)的實(shí)現(xiàn)
在ASP.NETWeb程序中,前端頁面一般使用導(dǎo)航控件Menu或者TreeView控件綁定SiteMapData?Source數(shù)據(jù)源控件,不需編碼即可自動顯示網(wǎng)站的導(dǎo)航信息,方便快捷地實(shí)現(xiàn)站點(diǎn)導(dǎo)航.
默認(rèn)情況下,站點(diǎn)的欄目信息存儲于站點(diǎn)地圖文件中,即數(shù)據(jù)源是一個后綴為.sitemap的XML文件,站點(diǎn)地圖提供程序?yàn)閄m lSiteMapProvier,由.NETFramework提供.若要欄目可通過CMS遠(yuǎn)程動態(tài)編輯,實(shí)現(xiàn)網(wǎng)站高度動態(tài)化,需將導(dǎo)航信息若存儲在關(guān)系型數(shù)據(jù)庫中,然后通過數(shù)據(jù)控件編輯.數(shù)據(jù)源由XML文件轉(zhuǎn)換成關(guān)系型數(shù)據(jù)庫后,需開發(fā)自定義站點(diǎn)提供程序,并對應(yīng)用程序進(jìn)行配置以調(diào)用自定義提供程序即可.本系統(tǒng)就是基于以上思路實(shí)現(xiàn)的欄目管理.
實(shí)現(xiàn)自定義站點(diǎn)地圖提供程序過程較復(fù)雜,本系統(tǒng)內(nèi)使用的方法是,創(chuàng)建一個繼承自System.Web.StaticSiteMapProvider抽象類的類,重寫B(tài)uildSiteMap()、GetRootNodeCore()等成員.其中實(shí)現(xiàn)BuildSiteMap()成員的部分代碼(C#)如下:
∥從數(shù)據(jù)庫創(chuàng)建一個內(nèi)存中的站點(diǎn)地圖并返回根節(jié)點(diǎn)
public override SiteMapNode BuildSiteMap(){
lock(this){∥確保站點(diǎn)地圖創(chuàng)建時沒有被修改
if(!IsInitialized)
{thrownewException("BuildSiteMapcalled incorrectly.");}
if(null==rootNode){∥如果沒有根節(jié)點(diǎn),就沒有站點(diǎn)地圖
Clear();∥清理初始狀態(tài)
int rootNodeId=-1;∥選擇站點(diǎn)地圖根節(jié)點(diǎn)
if(sqlConnection.State==ConnectionState.Closed)
sqlConnection.Open();
SqlCommand rootNodeCommand=new SqlCommand("SELECTnodeid,url,nameFROMSiteMapWHERE (parentnodeid IS NULL)",sqlConnection);
SqlDataReader rootNodeReader=rootNode-Command.ExecuteReader();
if(rootNodeReader.HasRows){
rootNodeReader.Read();
rootNodeId=rootNodeReader.Get Int32(0);
∥參照當(dāng)前靜態(tài)站點(diǎn)地圖提供程序創(chuàng)建一個站點(diǎn)地圖節(jié)點(diǎn)
rootNode=new SiteMapNode(this,root-NodeId.ToString(),rootNodeReader.GetString(1),rootNodeReader.GetString(2));
}else return null;
rootNodeReader.Close();
rootNode=AddChildNodes(rootNode);∥AddChildNodes()定義用于查找子節(jié)點(diǎn)并加入
sqlConnection.Close();
}
return rootNode;
}
}
通過自定義站點(diǎn)地圖提供程序,欄目可動態(tài)編輯、擴(kuò)展,欄目頁模板可動態(tài)選擇,使網(wǎng)站高度動態(tài)化,且不影響前端開發(fā)中使用導(dǎo)航控件方便快捷地實(shí)現(xiàn)網(wǎng)站導(dǎo)航.
除了實(shí)現(xiàn)前述業(yè)務(wù)功能外,在開發(fā)過程中,通過基于角色的權(quán)限控制、驗(yàn)證用戶輸入、頁面局部刷新、緩存技術(shù)、處理異常、優(yōu)化URL路徑、響應(yīng)式設(shè)計(jì)等使程序安全可靠,用戶操作體驗(yàn)良好.在使用本CMS系統(tǒng)基于ASP.NET技術(shù)進(jìn)行網(wǎng)站開發(fā)時,只需關(guān)注少數(shù)幾個前端頁面的設(shè)計(jì)即可,極大簡化網(wǎng)站開發(fā)的復(fù)雜度.
[1]王德靈,張巧超.CMS在高校院系網(wǎng)站建設(shè)中的應(yīng)用[J].遼寧經(jīng)濟(jì)職業(yè)技術(shù)學(xué)院學(xué)報,2011(1):63-64.
[2]伍伯華.網(wǎng)站內(nèi)容管理系統(tǒng)關(guān)鍵技術(shù)研究[D].長沙:中南大學(xué), 2010.
[3]李偉利,高寶,許興.內(nèi)容管理系統(tǒng)與高校信息化建設(shè)[J].實(shí)驗(yàn)技術(shù)與管理,2011(5):244-246.
[4]劉茗,曾海春.構(gòu)建高職院校門戶網(wǎng)站內(nèi)容管理系統(tǒng)關(guān)鍵問題初探[J].價值工程,2013(20):242-243.
[5]Patel J,Acker B,McGovern R.ASP.NET 2.0中的數(shù)據(jù)訪問[EB/OL].(2006-01-13)[2014-08-30].http://www.microsoft.com/china/msdn/library/webservices/asp.net/dataaccess.mspx?m fr=true.
[6] 微軟公司.Web應(yīng)用開發(fā):ASP.NET 2.0[M].北京:高等教育出版社,2007.
(編校:李青)
Design and Development of CMSBased on ASP.NET
MENGXin
(Departmentof Information and IntelligentEngineering,AnhuiVocationalCollegeofElectronics&Information Technology,Bengbu,An?hui233030,China)
An ASP.NETwebsite contentmanagement system(CMS)that is safe,practical,efficient,coding standardized, expanding easily,focusing on user experience is developed,which includes designs of anonymous role business,content editing business,contentauditing business,column editing businessand accountpermissionsmanagementbusiness.Par?ticularattention ispaid to theanalysesof the developmentof the dataeditingbusinessand columnmanagementbusiness.
contentmanagementsystem;ASP.NET;designmodel;site-map provider
TP3
A
1671-5365(2015)06-0061-05
2014-12-15修回:2015-01-02
安徽省高等教育振興計(jì)劃重大教學(xué)改革研究項(xiàng)目“高等職業(yè)院校整體教改研究與實(shí)踐”(2014zdjy170);安徽電子信息職業(yè)技術(shù)學(xué)院自然科學(xué)項(xiàng)目“基于ASP.NET+C#+MSSQL的CMS的設(shè)計(jì)與實(shí)現(xiàn)”(ADZX1410)
孟昕(1981-),男,講師,工學(xué)碩士,研究方向?yàn)槿斯ぶ悄芎椭悄苡?jì)算、計(jì)算機(jī)應(yīng)用技術(shù)
網(wǎng)絡(luò)出版時間:2015-02-02 14:05網(wǎng)絡(luò)出版地址:http://www.cnki.net/kcms/detail/51.1630.Z.20150202.1405.001.html
引用格式:孟昕.ASP.NETCMS的設(shè)計(jì)與開發(fā)[J].宜賓學(xué)院學(xué)報,2015,15(6):61-65.