我将在dotnetnuke开发基于会员的门户网站。
同样,我希望允许门户网站管理员为用户定义皮肤。
告诉我该怎么做?
答案 0 :(得分:2)
根据用户角色see this explanation动态更改皮肤,来自DotnetNuke.com:
动态或编程有几种不同的方法 更改特定页面加载的外观。 DotNetNuke将首先展望 用于URL中的覆盖值。如果找到特定值,则DNN 将加载该页面加载的皮肤和/或容器。第二,DNN 将查看本地cookie以查看是否有皮肤被定义。 最后,如果前两个方法没有指定要加载的皮肤,DNN 将加载页面或站点定义的默认外观。在这种情况下 皮肤不存在,DNN附带的默认皮肤将 加载。
这就是不删除原始皮肤包的重要性 安装后。
可能是基于动态加载皮肤的最佳方法 安全角色是使用a创建一个简单的cookie DotNetNuke模块,或HttpModule。无论哪种方式,你都可以 检索用户信息,并基于IsInSecurityRole() 属性,生成一个实际上会加载所需皮肤的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())