Пользовательская тема в 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
Другие вопросы по тегам