回答
要更改動態基於用戶的角色,see this explanation,從DotnetNuke.com皮膚:
有幾種不同的方式來動態或程序 改變皮膚特定頁面加載。 DotNetNuke將首先在URL中尋找覆蓋值 。如果找到具體的值,則DNN 將在該頁面加載時加載該皮膚和/或容器。其次,DNN 將查看本地cookie以查看是否有皮膚被定義。 最後,如果前兩種方法未指定要加載的外觀,DNN 將加載由頁面或網站定義的默認外觀。在皮膚不存在的事件 的情況下,隨DNN一起提供的默認皮膚將被加載 。
這就是爲什麼安裝後不要刪除原始皮膚包 的原因。
基於 安全角色動態加載皮膚的最佳方法可能是使用DotNetNuke模塊或HttpModule創建一個簡單的cookie。無論哪種方式,您將可以通過 檢索用戶信息,並基於IsInSecurityRole() 屬性生成一個實際加載所需皮膚的cookie。
從本質上說,在DotNetNuke的模塊放置在每一頁上,你將不得不檢查以下內容:
- 哪個門戶是用戶?
- 用戶在哪個安全角色?
- 基於1 & 2,用戶應該看到哪些皮膚?
如果答案#3是「非默認皮膚」,那麼你將需要執行一些這樣的代碼,從DotNetNuke.com採取:
'import DotNetNuke.Entities.Users'
If Not Me.UserInfo Is Nothing AndAlso Me.UserInfo.UserID > Null.NullInteger Then
If Me.UserInfo.IsInRole("My Security Role") Then
' import System.Web.HttpCookie
Response.Cookies.Add(New HttpCookie("SkinSrc", "[G]Skins/DarkKnight/Home-Mega-Menu.ascx"))
Else
' either assign another skin, or do nothing
End If
Else
' either assign another skin, or do nothing
End If
上面的代碼剪斷節目如何通過添加Cookie鍵值對來設置外觀。
我可能會把上面的邏輯放到一個不可見的DNN模塊中,並自動添加到網站上的所有頁面上;否則,您可能可以將邏輯注入Default.aspx(由於編輯DNN核心而不推薦)。
注意:PortalID是可在每個模塊項目中訪問的字段。 Response.Write("My Portal ID: " & PortalID.ToString())
+1但絕對不要修改default.aspx ... – egrunin 2012-02-04 08:32:02
需要更多的細節。已經可以爲每個門戶設置默認皮膚,或者是否需要爲每個用戶角色的門戶設置皮膚? – 2012-02-03 16:25:25
我想「爲每個用戶角色設置每個門戶的皮膚」。這可能嗎?如果是的話如何? – 2012-02-04 05:44:28