sharepoint中的用户特定主题

时间:2010-01-28 09:03:27

标签: sharepoint moss wss

我有一个要求,在我的sharepoint网站上,我想根据用户设置主题。

例如,假设用户将主题设置为theme1,用户b登录并将主题设置为theme2。所以下次当用户登录时,他必须要看到他设置的主题。主题a。

任何人都可以告诉我这是最好的方法。

提前致谢。

萨钦

1 个答案:

答案 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