У меня было подобное требование один раз. В моем случае они хотели, чтобы пользователи могли изменять «цветовую схему» портала MOSS (поэтому макет и шрифты были одинаковыми, но цвет фона и цвета изображений были разными в каждой теме). Я создал «базовую тему», которая включала полный макет (одна из предоставленных тем) как один файл CSS. Затем я создал дополнительные темы, такие как «blue.css», «red.css», «green.css» и т. Д. И поместил все эти файлы в portal/ourthemes/
.
Мы хотели, чтобы пользователи могли выбирать свою тему, поэтому мы создали новое свойство профиля пользователя «CurrentTheme» (Sharepoint Central Administration -> Shared services -> Профили пользователей и свойства -> Добавить свойство профиля), которое было определено как строка с заранее определенным списком вариантов.
Затем я создал простой элемент управления 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
каждый раз пользователь загрузил страницу)
Затем я установил этот элемент управления на главную страницу, созданную для этого портала.
EDIT: Для выполнения кэширования мы создали ключ кеша, который содержал имя пользователя и сохранял сгенерированный текст там. В результате получилось что-то вроде этого:
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
hi naivists Спасибо за быстрый ответ. Было бы здорово, если бы вы могли дать мне полный исходный код. так что я могу иметь четкое понимание кэширования для каждого пользователя. – Sachin
добавил код, чтобы показать, как он был реализован. Да, еще одна вещь заключается в том, что мы на самом деле создали веб-сайт, где пользователь мог выбрать тему (выбрав из экрана предварительного просмотра). Затем веб-страница установит свойство UserProfile и очистит значение кеша. – naivists
привет наивисты ... Спасибо за вашу помощь. Это определенно собирается мне помочь. – Sachin