1

我将在 dotnetnuke 中开发基于会员的门户。

同样,我想允许门户管理器为用户定义皮肤。

告诉我我该怎么做?

4

1 回答 1

2

要根据用户角色动态更改皮肤,请参阅DotnetNuke.com 上的说明:

有几种不同的方法可以动态或以编程方式更改特定页面加载的皮肤。DotNetNuke 将首先在 URL 中查找覆盖值。如果找到特定值,则 DNN 将在该页面加载时加载该皮肤和/或容器。其次,DNN 将查看本地 cookie 以查看是否定义了皮肤。最后,如果前两种方法没有指定要加载的皮肤,DNN 将加载页面或站点定义的默认皮肤。如果皮肤不存在,将加载 DNN 附带的默认皮肤。

这就是为什么安装后不要删除原始皮肤包的重要性。

可能基于安全角色动态加载皮肤的最佳方法是使用 DotNetNuke 模块或 HttpModule 创建一个简单的 cookie。无论哪种方式,您都可以检索用户信息,并根据 IsInSecurityRole() 属性生成一个 cookie,该 cookie 实际上将加载所需的皮肤。

在 Essence 中,在每个页面上放置的 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())

于 2012-02-04T08:27:49.343 回答