我有一个要求,在我的sharepoint网站上,我想根据用户设置主题。
例如,假设用户将主题设置为theme1,用户b登录并将主题设置为theme2。所以下次当用户登录时,他必须要看到他设置的主题。主题a。
任何人都可以告诉我这是最好的方法。
提前致谢。
萨钦
答案 0 :(得分:0)
我有一次类似的要求。在我的情况下,他们希望用户能够更改MOSS门户的“颜色布局”(因此布局和字体是相同的,但每个主题的背景颜色和图像颜色不同)。我创建了一个“基本主题”,其中包含一个完整的布局(提供的主题之一)作为单个CSS文件。然后我创建了其他主题,例如“blue.css”,“red.css”,“green.css”等等,并将所有这些文件放在portal/ourthemes/
中。
我们希望用户能够选择他们的主题,因此我们创建了一个新的用户个人资料属性“CurrentTheme”(Sharepoint管理中心 - >共享服务 - >用户个人资料和属性 - >添加个人资料属性)被定义为具有预定义选择列表的字符串。
然后我创建了一个简单的ASP.Net控件,呈现为
Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
Dim oProf As Microsoft.Office.Server.UserProfiles.UserProfile = Microsoft.Office.Server.UserProfiles.ProfileLoader.GetProfileLoader.GetUserProfile()
Dim UserTheme As String
Try
If oProf.Item("CurrentTheme") IsNot Nothing Then
UserTheme = oProf.Item("CurrentTheme").Value.ToString()
Else
UserTheme = "blue"
End If
Catch ex As Exception
'shouldn't fail if we don't know the value
UserTheme = "blue" 'a default value for users who dont have a theme yet
End Try
writer.WriteLine("<link rel='stylesheet' type='text/css' href='/portal/ourthemess" & Trim(UserTheme) & ".css' />")
End Sub
(免责声明:实际代码有点长,因为我们每次用户使用缓存以避免每次用户加载页面时都从UserProfile
读取属性)
然后我将此控件放在为该门户创建的母版页中。
编辑:为了进行缓存,我们创建了一个包含用户名的缓存键,并将生成的文本存储在那里。结果是这样的:
Dim KeyName As String = Page.User.Identity.Name & "_CurrentTheme"
If (Not Me.Page.Cache.Item(KeyName) Is Nothing) Then
writer.Write(Page.Cache.Item(KeyName).ToString)
Else
'...code posted previously goes in here
'at the end
Me.Page.Cache.Add(KeyName, _
AllContentRenderedInPreviousCodeAsString, _
Nothing, _
Caching.Cache.NoAbsoluteExpiration, _
Caching.Cache.NoSlidingExpiration, _
Caching.CacheItemPriority.Low, Nothing)
End If