2012-05-29 13 views
5

Ich möchte .less Parameter in einer Datenbank speichern, ein Beispiel Anwendungsfall könnte sein, dass die Farbe für jeden Benutzer nach seinen Vorlieben ändert.dotless Parameter dynamisch ändern

Ich denke, der beste Weg, dies zu tun wäre, alle .less-Dateien zu analysieren, um die Parameter zu erhalten, kann der Benutzer dann die Parameter einstellen, die in einer DB gegen den Benutzer speichern würde. Wenn die weniger Datei angefordert wird, kann eine Überladung des Handlers die Datenbank nach den Parametern abfragen. Der Handler kann dann die CSS mit den eingestellten Parametern ausgeben.

Fragen: - Wie kann ich eine .less-Datei nehmen und eine Liste von Parametern erhalten? - Wie kann ich eine .less-Datei ein Array von Parametern (Schlüssel-Wert-Paare) und Ausgabe CSS nehmen?

Alle mit dem Dotless-Framework.

Antwort

2

Wenn Sie es in .Net tun, können Sie mit dotless ein Plugin angeben, das vor der Auswertung als Besucher ausgeführt werden kann. Dadurch werden alle Knoten im weniger abstrakten Syntaxbaum aufgerufen, sodass alle Variablen leicht ermittelt werden können. Mit Dotless können Sie auch Patamteres angeben, mit denen Sie eine Variablendatei erstellen können.

Aber das ist ott .. Sie könnten darüber nachdenken, alle Variablen in der Datenbank als Ihre "Master-Kopie" zu speichern und zu vermeiden, weniger zu parsen.

3

Möglicherweise eine späte Antwort, aber wir haben etwas ähnliches wie Ihre Anforderung, wo wir benutzerdefinierte Farben basierend auf Benutzern in der Datenbank gespeichert hatten.

Unsere Lösung wurde das Hinzufügen von benutzerdefinierten Code zur Quelle der dotless, die hier zur Verfügung Ich glaube https://github.com/dotless/dotless

Also dann während der Parsen es justs Zeichenfolge, die Teile ersetzt wir ersetzen wollten. Einziger Nachteil dieses Ansatzes ist es, aktualisierte Builds der neuen dotless dll zu erhalten, die wir jedes Mal neu auftauchen müssen.

EDIT Hier ist ein Beispiel-Code-Snippet:

dotless.Core.Utils.HslColor hslcolor = dotless.Core.Utils.HslColor.FromRgbColor(new dotless.Core.Parser.Tree.Color("187AAB"); 
       hslcolor.Lightness = 0.93; 
       var hexString = '#' + (hslcolor.ToRgbColor().RGB.Select(i => ((int)i).ToString("X2")).Aggregate((a, b) => a + b)).ToLowerInvariant(); 
       var resultColor = hexString; 
+0

Haben Sie ein Beispiel für Ihre Lösung bitte? Ich brauche genau das Gleiche. – Curt

+0

Ich habe einen Beispielcode hinzugefügt. Hier berechnen wir verschiedene Farbtöne für verschiedene Teile der Benutzeroberfläche basierend auf der benutzerdefinierten Farbe. – John

+0

Danke John, sehr geschätzt – Curt