DNN-提供会员资格皮肤的最佳方式?

时间:2012-02-03 13:37:01

标签: dotnetnuke dotnetnuke-module

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

同样,我希望允许门户网站管理员为用户定义皮肤。

告诉我该怎么做?

1 个答案:

答案 0 :(得分:2)

根据用户角色see this explanation动态更改皮肤,来自DotnetNuke.com:

  

动态或编程有几种不同的方法   更改特定页面加载的外观。 DotNetNuke将首先展望   用于URL中的覆盖值。如果找到特定值,则DNN   将加载该页面加载的皮肤和/或容器。第二,DNN   将查看本地cookie以查看是否有皮肤被定义。   最后,如果前两个方法没有指定要加载的皮肤,DNN   将加载页面或站点定义的默认外观。在这种情况下   皮肤不存在,DNN附带的默认皮肤将   加载。

     

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

     

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

在Essence中,在每个页面上放置的DotNetNuke模块中,您必须检查以下内容:

  1. 用户在哪个门户网站?
  2. 用户在哪个安全角色?
  3. 基于1& 2,用户应该看哪个皮肤?
  4. 如果对#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())