Как хранить параметры для каждого пользователя - мнения ищут - PullRequest
0 голосов
/ 14 апреля 2009

Извините, это довольно открытый вопрос!

Я хочу, чтобы пользователи на моем сайте могли изменять параметры html / css для шаблонов, которые они используют для своих профилей - немного похоже на myspace (действительно, очень жаль, что я использовал это в качестве примера ...).

• Существует библиотека «тем», которые могут быть выбраны пользователем • Некоторые темы могут быть настроены, некоторые не могут • Темы не обязательно имеют одинаковые настраиваемые параметры

Я хочу сохранить настраиваемые переменные для каждого пользователя, для каждой темы, которую они выбирают для настройки. Какой лучший формат для этого?

БД может иметь

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

Как я могу хранить такие вещи, как bg color = # 34ed55 bg image = bg.jpg шрифт = комический без цвет = 554323 css = h1 { Размер шрифта: 1em; цвет синий; } .Пользовательские CSS{ обивка: 10px; }

Ответы [ 3 ]

2 голосов
/ 14 апреля 2009

Если все параметры одного типа (например, строковые значения), у вас может быть отдельная таблица параметров для сопоставления пар ключ / значение, которые представляют свойства темы пользователя.

user_theme
    user_id
    theme_id

user_theme_parameters
    user_id
    key
    value

Таблица может понравиться как:

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

Если темы имеют общие ключи, вы можете поместить ключи параметров в другую таблицу и ссылаться на них здесь по идентификатору вместо дублирования строк ключей (например, «bgcolor»).

1 голос
/ 14 апреля 2009

Вы можете использовать следующие таблицы:

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

Этот метод дает хорошее поведение при каскадном удалении. Если параметр больше не существует, вы просто удаляете его из custom_param и альта удаляет из настроек пользователя. Если вы хотите удалить всю тему, она будет каскадно настраиваться на custom_param и удалять все соответствующие параметры, а затем все соответствующие user_params.

Обязательно настройте таблицу user_settings, чтобы при удалении темы она устанавливала theme_id в какую-то тему по умолчанию и не удаляла строку!

0 голосов
/ 14 апреля 2009

Вы можете создать класс для хранения пользовательских параметров и сохранить сериализованную версию класса в поле CustomParameters в таблице. В моем случае я расширил свой существующий класс Users, чтобы получить и установить значения в моем классе UserCustomParameters.

Приятно то, что после установки мне не нужно изменять свою БД.

Конечно, вы должны решить, нужно ли что-то для собственного поля в таблице или нет. Для меня простые пользовательские настройки, такие как те, которые управляют внешним видом, не нуждаются в собственных полях.

Правильная сериализация и десериализация класса была самой трудоемкой частью.

...