ASP.NetMVCを使用して開発されたWebサイトがあります。リクエストに基づいて(国に基づいて)Webサイトのテーマを変更したいと思います。
例:米国の場合-カナダのテーマ1-テーマ2
リクエストがどのテーマとも一致しない場合は、デフォルト(現在のテーマ)を表示します。
どうすればこれを動的に達成できますか。
cssをもう一度書き直す必要がありますか、それともこれを行うためのより良い方法はありますか?
あなたのアイデアを共有してください
前もって感謝します :)
ASP.NetMVCを使用して開発されたWebサイトがあります。リクエストに基づいて(国に基づいて)Webサイトのテーマを変更したいと思います。
例:米国の場合-カナダのテーマ1-テーマ2
リクエストがどのテーマとも一致しない場合は、デフォルト(現在のテーマ)を表示します。
どうすればこれを動的に達成できますか。
cssをもう一度書き直す必要がありますか、それともこれを行うためのより良い方法はありますか?
あなたのアイデアを共有してください
前もって感謝します :)
一般的なスタイルのグローバルcssファイルを定義する必要があります。現在の国にアクセスするための何らかのヘルパーメソッドがあると仮定すると、国固有のスタイルシートを条件付きでロードするか、国と同じ名前のスタイルシートなどのルールに基づいてスタイルシートをロードできます(次のコードはテストされていません)。
<link rel="stylesheet" type="text/css" href="css/global.css">
// conditional
@if (SiteHelper.CurrentCountry == "USA") {
<link rel="stylesheet" type="text/css" href="css/usa.css">
}
// or assume a css file exists with the country name
<link rel="stylesheet" type="text/css" href="css/@(SiteHelper.CurrentCountry).css">
国やテーマごとに異なるレイアウトページを使用することをお勧めします。これにより、より詳細に制御できるようになります。基本的に、上記のロジックを_ViewStart.cshtmlに移動し、現在の国に基づいてレイアウトを設定します。
これが最善のアプローチかどうかはわかりませんが、これが私が行っていることです。私はこれに似たフォルダ構造を持っています:
/Content
layout.css
/Content/Images
/Content/Themes/ThemeUSA
layout.css
/Content/Themes/ThemeUSA/Images
次に、ヘルパー拡張機能を使用して、たとえば画像の正しいパスを返します。
<img src="@Url.Image(Model.EnhImg)" alt="@Model.EnhImgAlt" />
どこ
public static string Image(this UrlHelper helper, string fileName)
{
string sLocation = Content() + "images/" + fileName;
return helper.Content(sLocation);
}
private static string Content()
{
string sLocation = "~/content/";
string sTheme = (string)HttpContext.Current.Session["Theme"];
if (!String.IsNullOrEmpty(sTheme))
{
sLocation += "themes/" +sTheme + "/";
}
return sLocation;
}
テーマフォルダ内の画像は、デフォルトフォルダと同じ名前になっています。スタイルシートについても同じです。