對
skinning
早有耳聞。但很汗的是,
dnn才是我接觸過的第乙個採用
skinning
的專案。所謂
skinning
就是實現功能和外觀的分離。但由於接觸
asp.net
不多。看了挺長時間
dnn了,現在才對整個
skinning
系統有了一定的理解。
在dnn中,所謂的**由兩部分組成。即
skin
和container
。由於這是
dnn的標誌性功能。對這些講解的文章很多。在
/documents/dotnetnuke skinning
中,我覺得講的已經足夠清楚了。我想寫的是整個頁面的繪製過程。
首先,從鍵入乙個
url開始。這個
url將會被
urlrewritemodule
類率先獲得。並利用
asp.net
所支援的
url重寫系統對乙個
url進行重寫。我一直對這個重寫機制有著很多的疑問。但在看完後,很多疑問都得以解決。推薦和我一樣對
url重寫不大了解的人看下這篇文章。
dnn的
url重寫幾乎是按照這篇文章的標準格式完成的。
重寫完畢的
url將被定位到乙個頁面上,一般是
default.aspx
頁面。這個頁面的後台類是
cdefault
。這個類的
loadskin方法將載入skin。skin的路徑一般會在portalsettings.activetab.skinsrc中。tab才是真正的頁面標示,因為幾乎所有的頁面都是在default.aspx上動態繪製,只有通過tab來區分。在資料庫中,我們可以看到tabs中存放著skinsrc和containersrc。在tabmodules中,儲存著每乙個tab的模組及其位置。
在每乙個skin,即每乙個skin.ascx的後台類都是skin。它會取出所有頁面上id為contentpane,leftpane,rightpane,topane,bottompane。的td,span,div,p。(id必須唯一)並取出相應的container放進去。並且在每個container中id為contentpane的控制項上放入相應的module。這樣就繪製出了整個頁面。
原來我以為會在default.aspx的後台類中載入skin,container,module。但它只在其中完成了skin的載入,大部分的功能都在skin.ascx的後台類中完成。我想這樣設計自然會有它的理由。也許是為了集中控制。希望能聽到高人的理解。
給我最大的啟發就是要想實現功能部件的分離,和動態的組裝。必須有一定的語法規則。就是通過彼此都預設的字串把各部件聯絡在一起。同時還要有從字串生成物件或是呼叫功能的能力。從skinning中可以看到。類似於contentpane這樣命名規則必須遵守,同時還要有loadcontrol(controlpath as string) as usercontrol這樣由字串直接載入成控制項的能力。在.net中提供了很多這樣的機制,如反射。這種機制的引入,通常會提高靈活性,但也免不了會付出一些代價,使用時要根據需求,權衡利弊。
DNN中的Skinning系統
對skinning 早有耳聞。但很汗的是,dnn才是我接觸過的第乙個採用 skinning 的專案。所謂 skinning 就是實現功能和外觀的分離。但由於接觸 asp.net 不多。看了挺長時間 dnn了,現在才對整個 skinning 系統有了一定的理解。在 dnn中,所謂的 由兩部分組成。即 ...
DNN中的Localization系統
一直對本地化挺有興趣。原來也做過類似的工作。但一直都覺得做得不好。所以很想看看 dnn是怎麼做得。在 dnn的文件中 documents dotnetnuke localization 看了一下。覺得這篇文章寫得很好。然後又特意去查了下 msdn 結果查到了這篇文章 可以看做是 net 平台上web...
dnn中的使用者密碼設定
1.密碼是儲存在aspnet membership表裡邊,在這個表裡有三個相關字段,password,passwordformat,passswordsalt,只是在這儲存的都不是明文,而是用加密演算法加密後的金鑰。2.覺得dnn加密的方式應該是用sha1演算法,在web.config檔案裡邊你能找...