Пользовательская тема в sharepoint
У меня есть требование, где на моем сайте sharepoint я хочу установить тему в соответствии с пользователем.
например, скажем, если пользователь установил свою тему как theme1, а пользователь b вошел в систему и установил theme на theme2. Поэтому в следующий раз, когда пользователь войдет в систему, он должен увидеть заданную им тему. То есть тема а.
Может кто-нибудь сказать мне, что будет лучшим подходом, чтобы сделать это.
Заранее спасибо.
Сэчин
1 ответ
У меня было подобное требование однажды. В моем случае они хотели, чтобы пользователи могли изменять "цветовую разметку" портала 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