2009-04-13 48 views
0

對不起,這是一個相當開放的問題!如何存儲每個用戶的參數 - 徵求意見

我期望讓我的網站上的用戶能夠修改他們用於他們的個人資料的模板的html/css參數 - 有點像myspace(真的,真的很抱歉,以此爲例...)。

•有,可以由用戶 選擇•有些主題可定製「主題」庫中的一些不能 •主題不一定具有相同的自定義的參數

我想存儲爲每個用戶定製的變量,用於他們選擇自定義的每個主題。什麼是最好的格式?

DB可以有

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

我怎麼能存儲的東西像 背景顏色=#34ed55 BG圖像= bg.jpg 字體= Comic Sans字體顏色 = 554323個 CSS = H1 { 字體 - 大小:1EM; 顏色:藍色; } .customCss { padding:10px; }

回答

2

如果參數都是相同類型的(例如字符串值),那麼可以有一個單獨的參數表來映射表示用戶主題屬性的鍵/值對。

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 

如果主題分享共同的鍵,你可能因素的參數鍵到另一個表,並在這裏引用它們的ID,而不是複製鍵字符串(如「BGCOLOR」)。

1

您可以使用下表:

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和viola中刪除它就會從用戶的設置中刪除它。如果你想刪除整個主題,它將級聯到custom_param並刪除所有相關的參數,然後刪除所有相關的user_params。

只要確保設置您的user_settings表,以便在刪除主題時將theme_id設置爲某個默認主題並且不會刪除該行!

0

您可以創建一個類來包含自定義參數,並將類的序列化版本存儲在表的CustomParameters字段中。在我的情況下,我擴展了現有的用戶類,以在我的UserCustomParameters類中獲取和設置值。

這件事的好處是,一旦它到位,我不必修改我的數據庫。

當然,您必須決定是否需要在表中使用自己的字段。對我而言,簡單的用戶設置(如控制外觀和感覺的設置)不需要自己的字段。

正確地序列化和反序列化類是最耗時的部分。