DNN - Лучший способ предоставить скины на основе членства? - PullRequest
1 голос
/ 03 февраля 2012

Я собираюсь разработать портал, основанный на членстве, в dotnetnuke.

Там же я хочу разрешить менеджеру портала определять скины для пользователей.

Скажите, как мне это сделать?

1 Ответ

2 голосов
/ 04 февраля 2012

Чтобы динамически изменить обложку в зависимости от роли пользователя, см. Это объяснение от DotnetNuke.com:

Существует несколько различных способов динамического или программного измененияскин для конкретной загрузки страницы.Сначала DotNetNuke будет искать значение переопределения в URL.Если определенное значение найдено, DNN загрузит этот скин и / или контейнер при загрузке этой страницы.Во-вторых, DNN просматривает локальный файл cookie, чтобы определить, определен ли скин.Наконец, если первые два метода не указали обложку для загрузки, DNN загрузит обложки по умолчанию, определенные страницей или сайтом.Если обложка не существует, будет загружена обложка по умолчанию, поставляемая с DNN.

Поэтому важно не удалять исходный пакет обложки после установки.

Возможнолучший способ приблизиться к динамической загрузке скина на основе роли безопасности - создать простой файл cookie, используя модуль DotNetNuke или HttpModule.В любом случае вы сможете получить информацию о пользователе и на основе свойства IsInSecurityRole () сгенерировать файл cookie, который в действительности загрузит нужный скин.

В сущности, в модуле DotNetNukeПри размещении на каждой странице вам нужно будет проверить следующее:

  1. На каком портале находится пользователь?
  2. В какой роли безопасности находится пользователь?
  3. На основена 1 и 2, какой скин должен видеть пользователь?

Если ответ на вопрос № 3 - «скин не по умолчанию», то вам нужно будет выполнить некоторый код, подобный этому, взятый из DotNetNuke.com:

'import DotNetNuke.Entities.Users'
If Not Me.UserInfo Is Nothing AndAlso Me.UserInfo.UserID > Null.NullInteger Then
  If Me.UserInfo.IsInRole("My Security Role") Then
    ' import System.Web.HttpCookie 
    Response.Cookies.Add(New HttpCookie("SkinSrc", "[G]Skins/DarkKnight/Home-Mega-Menu.ascx"))
  Else
      ' either assign another skin, or do nothing 
  End If
Else
  ' either assign another skin, or do nothing 
End If

Приведенный выше фрагмент кода показывает, как установить скин, добавив пару ключ-значение cookie.

Я бы, вероятно, поместил вышеуказанную логику в модуль DNN, который невидим и автоматически добавляется на все страницы сайта;в противном случае вы, вероятно, можете внедрить логику в Default.aspx (не рекомендуется из-за редактирования ядра DNN).

Примечание. PortalID - это поле, доступное в каждом модульном проекте.Response.Write("My Portal ID: " & PortalID.ToString())

...