2010-01-28 55 views
0

我有一个需求,在我的SharePoint站点我想根据用户设置主题。用户特定的主题在sharepoint

例如,如果用户将他的主题设置为主题1并且用户b登录并将主题设置为主题2。所以下次用户登录时,他必须看到他设定的主题。 I.e主题a。

任何人都可以告诉我什么是最好的做法。

在此先感谢。

萨钦

回答

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 
+0

嗨naivists 感谢您的快速回复。 如果你能给我完整的源代码,那将是非常棒的。这样我就可以清楚地了解每个用户的缓存。 – Sachin 2010-01-28 10:04:11

+0

添加了一些代码来显示它是如何实现的。是的,另一件事是我们实际上创建了一个Web部件,用户可以选择主题(从预览屏幕截图中选择)。然后,webpart将设置UserProfile属性并清除缓存值。 – naivists 2010-01-28 11:46:47

+0

嗨naivists ...感谢您的帮助。这将定义要帮助我很多.. – Sachin 2010-01-28 12:42:50