DNN中的Skinning系統

2021-09-05 14:37:57 字數 1561 閱讀 6147

對skinning

早有耳聞。但很汗的是,

dnn才是我接觸過的第乙個採用

skinning

的專案。所謂

skinning

就是實現功能和外觀的分離。但由於接觸

asp.net

不多。看了挺長時間

dnn了,現在才對整個

skinning

系統有了一定的理解。 在

dnn中,所謂的**由兩部分組成。即

skin

和container

。由於這是

dnn的標誌性功能。對這些講解的文章很多。在

/documents/dotnetnuke skinning

中,我覺得講的已經足夠清楚了。我想寫的是整個頁面的繪製過程。

1.首先,從鍵入乙個

url開始。這個

url將會被

urlrewritemodule

類率先獲得。並利用

asp.net

所支援的

url重寫系統對乙個

url進行重寫。我一直對這個重寫機制有著很多的疑問。但在看完後,很多疑問都得以解決。推薦和我一樣對

url重寫不大了解的人看下這篇文章。

dnn的

url重寫幾乎是按照這篇文章的標準格式完成的。

2.重寫完畢的

url將被定位到乙個頁面上,一般是

default.aspx

頁面。這個頁面的後台類是

cdefault

。這個類的

loadskin方法將載入skin。skin的路徑一般會在portalsettings.activetab.skinsrc中。tab才是真正的頁面標示,因為幾乎所有的頁面都是在default.aspx上動態繪製,只有通過tab來區分。在資料庫中,我們可以看到tabs中存放著skinsrc和containersrc。在tabmodules中,儲存著每乙個tab的模組及其位置。

3.在每乙個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檔案裡邊你能找...