2010-01-28 5 views
0

У меня есть требование, где на моем сайте sharepoint я хочу установить тему в соответствии с пользователем.Пользовательская тема в sharepoint

например, например, если пользователь установил свою тему в качестве темы1, а пользователь b войдет в систему и установит тему в тему2. Поэтому в следующий раз, когда пользователь зайдет в журнал, он должен увидеть тему, заданную им. I.e тема a.

Может ли кто-нибудь сказать мне, что будет лучше всего подходит для этого.

Заранее спасибо.

Sachin

ответ

0

У меня было подобное требование один раз. В моем случае они хотели, чтобы пользователи могли изменять «цветовую схему» портала 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 
+0

hi naivists Спасибо за быстрый ответ. Было бы здорово, если бы вы могли дать мне полный исходный код. так что я могу иметь четкое понимание кэширования для каждого пользователя. – Sachin

+0

добавил код, чтобы показать, как он был реализован. Да, еще одна вещь заключается в том, что мы на самом деле создали веб-сайт, где пользователь мог выбрать тему (выбрав из экрана предварительного просмотра). Затем веб-страница установит свойство UserProfile и очистит значение кеша. – naivists

+0

привет наивисты ... Спасибо за вашу помощь. Это определенно собирается мне помочь. – Sachin

Смежные вопросы