2012-02-03 58 views
1

我打算在dotnetnuke中開發基於會員的門戶。DNN-提供基於會員的皮膚的最佳方式?

同樣我想讓門戶網站管理員爲用戶定義皮膚。

告訴我我該怎麼做?

+0

需要更多的細節。已經可以爲每個門戶設置默認皮膚,或者是否需要爲每個用戶角色的門戶設置皮膚? – 2012-02-03 16:25:25

+0

我想「爲每個用戶角色設置每個門戶的皮膚」。這可能嗎?如果是的話如何? – 2012-02-04 05:44:28

回答

2

要更改動態基於用戶的角色,see this explanation,從DotnetNuke.com皮膚:

有幾種不同的方式來動態或程序 改變皮膚特定頁面加載。 DotNetNuke將首先在URL中尋找覆蓋值 。如果找到具體的值,則DNN 將在該頁面加載時加載該皮膚和/或容器。其次,DNN 將查看本地cookie以查看是否有皮膚被定義。 最後,如果前兩種方法未指定要加載的外觀,DNN 將加載由頁面或網站定義的默認外觀。在皮膚不存在的事件 的情況下,隨DNN一起提供的默認皮膚將被加載 。

這就是爲什麼安裝後不要刪除原始皮膚包 的原因。

基於 安全角色動態加載皮膚的最佳方法可能是使用DotNetNuke模塊或HttpModule創建一個簡單的cookie。無論哪種方式,您將可以通過 檢索用戶信息,並基於IsInSecurityRole() 屬性生成一個實際加載所需皮膚的cookie。

從本質上說,在DotNetNuke的模塊放置在每一頁上,你將不得不檢查以下內容:

  1. 哪個門戶是用戶?
  2. 用戶在哪個安全角色?
  3. 基於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())

+0

+1但絕對不要修改default.aspx ... – egrunin 2012-02-04 08:32:02