我将在 dotnetnuke 中开发基于会员的门户。
同样,我想允许门户管理器为用户定义皮肤。
告诉我我该怎么做?
要根据用户角色动态更改皮肤,请参阅DotnetNuke.com 上的说明:
有几种不同的方法可以动态或以编程方式更改特定页面加载的皮肤。DotNetNuke 将首先在 URL 中查找覆盖值。如果找到特定值,则 DNN 将在该页面加载时加载该皮肤和/或容器。其次,DNN 将查看本地 cookie 以查看是否定义了皮肤。最后,如果前两种方法没有指定要加载的皮肤,DNN 将加载页面或站点定义的默认皮肤。如果皮肤不存在,将加载 DNN 附带的默认皮肤。
这就是为什么安装后不要删除原始皮肤包的重要性。
可能基于安全角色动态加载皮肤的最佳方法是使用 DotNetNuke 模块或 HttpModule 创建一个简单的 cookie。无论哪种方式,您都可以检索用户信息,并根据 IsInSecurityRole() 属性生成一个 cookie,该 cookie 实际上将加载所需的皮肤。
在 Essence 中,在每个页面上放置的 DotNetNuke 模块中,您必须检查以下内容:
如果#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())