dotnetnuke でメンバーシップ ベースのポータルを開発する予定です。
同じように、ポータル マネージャーがユーザーのスキンを定義できるようにしたいと考えています。
どうすればそれができるか教えてください。
dotnetnuke でメンバーシップ ベースのポータルを開発する予定です。
同じように、ポータル マネージャーがユーザーのスキンを定義できるようにしたいと考えています。
どうすればそれができるか教えてください。
ユーザーの役割に基づいてスキンを動的に変更するには、DotnetNuke.comの次の説明を参照してください。
特定のページの読み込みに合わせてスキンを動的またはプログラムで変更するには、いくつかの方法があります。DotNetNuke は、最初に URL のオーバーライド値を探します。特定の値が見つかった場合、DNN はそのページの読み込み時にそのスキンやコンテナーを読み込みます。次に、DNN はローカル Cookie を調べて、スキンが定義されているかどうかを確認します。最後に、最初の 2 つのメソッドで読み込むスキンが指定されていない場合、DNN はページまたはサイトで定義されたデフォルトのスキンを読み込みます。スキンが存在しない場合は、DNN に同梱されているデフォルトのスキンが読み込まれます。
これが、インストール後に元のスキン パッケージを削除しないことが重要な理由です。
セキュリティ ロールに基づいてスキンを動的にロードする方法としては、DotNetNuke モジュールまたは HttpModule を使用して単純な Cookie を作成するのがおそらく最善の方法です。どちらの方法でも、ユーザー情報を取得し、IsInSecurityRole() プロパティに基づいて、目的のスキンを実際にロードする Cookie を生成できます。
Essence では、すべてのページに配置された DotNetNuke モジュールで、次のことを確認する必要があります。
#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())