2009-04-13 2 views
0

Sorry das ist eine ziemlich offene Frage!Wie pro Benutzer Parameter gespeichert werden - Meinungen gesucht

Ich möchte Benutzer auf meiner Website in die Lage zu ändern HTML/CSS-Parameter für Vorlagen, die sie für ihre Profile - ein bisschen wie myspace (wirklich, wirklich Entschuldigung über die Verwendung als ein Beispiel ...).

• eine Bibliothek von „Themen“ Es gibt, dass einige • Themen müssen nicht angepasst werden kann durch den Benutzer • Einige Themen ausgewählt werden, können nicht die gleiche anpassbaren Parametern

ich die gespeichert werden sollen, haben angepasste Variablen für jeden Benutzer, für jedes Thema, das sie anpassen möchten. Was ist das beste Format dafür?

DB könnte

-------------------------------------- 
user id | theme id | custom parameters 
-------------------------------------- 

Wie könnte ich speichern Dinge wie bg color = # 34ed55 bg image = bg.jpg font = comic sans color = 554.323 css = h1 { font- Größe: 1em; Farbe: blau; } .customCss { Auffüllen: 10px; }

Antwort

2

Wenn die Parameter alle den gleichen Typ aufweisen (z. B. Zeichenfolgenwerte), können Sie eine separate Parametertabelle für die Zuordnung von Schlüssel/Wert-Paaren verwenden, die die Themeneigenschaften des Benutzers darstellen.

user_theme 
    user_id 
    theme_id 

user_theme_parameters 
    user_id 
    key 
    value 

Die Tabelle könnte wie mag:

user_id key  value 
1  bgcolor #000000 
1  bgimage bg.jpg 
2  font  Arial 

Wenn Themen gemeinsamen Schlüssel gemeinsam nutzen, könnten Sie die Parameterschlüssel in einer anderen Tabelle Faktor und sie hier durch Kenn stattdessen die Schlüsselfolgen zu duplizieren (wie "bgcolor").

1

Sie könnten die folgenden Tabellen verwenden:

custom_param: 
    param_id 
    theme_id 
    param_name 
user_params: 
    user_id 
    param_id 
    value 
user_settings: 
    user_id 
    ...  -- whatever other user settings you store 
    theme_id -- for current theme 

Sie etwas gutes Verhalten erhalten von Cascading mit dieser Methode löscht. Wenn ein Parameter nicht mehr existiert, löschen Sie ihn einfach aus custom_param und Viola wird aus den Benutzereinstellungen gelöscht. Wenn Sie ein ganzes Theme löschen möchten, wird es in custom_param kaskadiert und löscht alle relevanten Parameter und dann alle relevanten user_params.

Stellen Sie sicher, dass Sie Ihre Tabelle user_settings so einrichten, dass beim Löschen eines Themes theme_id auf ein Standardthema gesetzt wird und die Zeile nicht gelöscht wird!

0

Sie könnten eine Klasse erstellen, die die benutzerdefinierten Parameter enthält, und eine serialisierte Version der Klasse im Feld CustomParameters in der Tabelle speichern. In meinem Fall habe ich meine vorhandene Users-Klasse erweitert, um Werte in meiner UserCustomParameters-Klasse abzurufen und festzulegen.

Das Schöne daran ist, dass, sobald es an Ort und Stelle ist, ich meine DB nicht ändern muss.

Natürlich müssen Sie entscheiden, ob etwas wichtig ist, um ein eigenes Feld in einer Tabelle zu haben oder nicht. Einfache Benutzereinstellungen wie diejenigen, die Aussehen und Verhalten steuern, benötigen für mich keine eigenen Felder.

Das Serialisieren und Deserialisieren der Klasse war der zeitaufwendigste Teil.

Verwandte Themen