必要なルックアップを実行する関数を備えたカスタム .LESS プラグインを作成してみませんか?
以下のコードは、示されているようにテストされました。実際に DB 内のデータを検索するわけではありませんが、そのために必要なすべての情報を利用できるはずです。Web サイトで Windows 認証モードを実行しているときに、現在のユーザーを .xml から取得できることを確認しましたHttpContext.Current.User.Identity.Name
。
以下の関数を使用するには、less ファイルに次のように入力します。
--lookup using custom function (hit db)
@brand_color:getCustomColor(usersThemeAttribute);
--then use the variable like normal
color: @brand_color;
コード
[DisplayName("UserProfilePlugin")]
public class UserProfilePlugin : IFunctionPlugin
{
public Dictionary<string, Type> GetFunctions()
{
return new Dictionary<string, Type>
{
{ "getCustomColor", typeof(GetCustomColorFunction) }
};
}
}
public class GetCustomColorFunction : Function
{
protected override Node Evaluate(Env env)
{
Guard.ExpectNumArguments(1, Arguments.Count(), this, Location);
Guard.ExpectNode<Keyword>(Arguments[0], this, Arguments[0].Location);
//the idea is that you would have many colors in a theme, this would be the name for a given color like 'bgColor', or 'foreColor'
var colorAttrName = Arguments[0] as Keyword;
//Lookup username
// string username = HttpContext.Current.User.Identity.Name;
//perform some kind of DB lookup using the username, get user theme info
// UserProfile up = new UserProfile();
// System.Drawing.Color c = up.GetColorByAttribute(colorAttrName.Value);
//return the appropriate color using RGB/etc...
// return new Color(c.R, c.G, c.B);
return new Color(129, 129, 129);
}
}
プラグインを登録するには、これを web.config に追加します。
<dotless cache="false" >
<plugin name="UserProfilePlugin" assembly="Your.Assebly.Name" />
</dotless>
ユーザーが行った変更がすぐに有効になるように、dotless のキャッシュを無効にすることを検討してください。
リンク: https://github.com/dotless/dotless/wiki/FunctionPlugins