2012-02-03 48 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