目前我在ASP.NET MVC項目,這將有2個或更多的主題,css主題,所以我問什么是最好的wqy處理這樣的請求。 我可以允許用戶在css文件中寫東西嗎?或者我可以在數據庫中存儲一些css值,并在用戶登錄后用jquery加載到css中嗎? 我只是在尋找最好的方法和方式來做好,順利。
如果你有預定義的主題,用戶可以為他們將來的登錄選擇,你可以在你的數據庫中創建主題表,并根據用戶存儲各自的主題id。如果用戶沒有選擇任何主題,你將有默認的主題。
并在你的服務器上分別創建主題的css文件,每個主題會有不同的文件。
但是,如果用戶為他/她將來的登錄選擇了主題,請在登錄時驗證用戶身份后,將其保存在您的數據庫中。將值傳遞給表單上的任何隱藏字段,并使用隱藏字段中的id值更改樣式表,并使用javascript在每個網頁上加載相同的文件。
在您的評論之后:
如果想讓用戶控制創建自己的風格,我認為基本上是顏色和字體的變化,你可以用相同的類名創建不同的css文件,并在登錄后加載它們。根據數據庫中的用戶id,這將有助于您更快地加載頁面,減少數據庫連接。
您可以使用以下命令獲取用戶ID
if (!Page.User.Identity.IsAuthenticated)
{
MembershipUser member = Membership.GetUser();
if (member != null)
{
ProfileCommon opC = Profile.GetProfile(Email.Text);
hdnTheme.Value = opC.ThemeID;
hdnUserID.Value = member.ProviderUserKey.ToString();
}
}
在你的ASPX代碼的加載頁上
$(document).ready(function (){
var themeid = $("#hdnTheme.ClientID").val()
var UserID= $("#hdnUserID.ClientID").val()
if (themeid == 1)// for user specific theme
<link href="includes/css/"+ UserID +".css" type="text/css" rel="stylesheet" />
else if (themeid == 2) // for the theme which you have created and already the file exists
<link href="includes/css/2.css" type="text/css" rel="stylesheet" />
else
<link href="includes/css/default.css" type="text/css" rel="stylesheet" />
});
通過屬性contenteditable = & quottrue & quot
<div id="oEditableCssForEveryone" contenteditable="true">
<style contenteditable="true">
/* USER, please try input, type your css code text here */
#oEditableCssForEveryone {
margin: 12px 0;
font-family: Consolas, Monaco, monospace;
}
#oEditableCssForEveryone style {
display: block;
white-space: pre;
}
#oEditableCssForEveryone[contenteditable="true"] {
padding: 90px;
overflow-x: auto;
outline: 3px dashed #cccccc;
}
#oEditableCssForEveryone[contenteditable="true"]:hover{
cursor: text;
background: #e4f3f9;
outline: 3px dashed #2B8BAD;
}
</style>
</div>
和保存按鈕:
<script type="text/javascript">
$('body').on('click', '.oSaveButton', function() {
fetch(window.location.origin + "/ajax/ajaxSaveUserCssPlease.php", {
method:"POST",
headers: {
'Content-Type': 'application/json;charset=utf-8'
},
body: JSON.stringify(document.getElementById("oEditableCssForEveryone").innerHTML)
});
return false;
}).then(..);
</script>
可能附加設置顯示:塊
<style style="display:block;" contenteditable="true" >
您應該將CSS值存儲在數據庫中,然后在用戶登錄時加載它。那是最簡單的方法。
然而,當你的網站有很多日志用戶時,會大大降低網站的速度。
更高級的方法是,當用戶填寫表單并單擊save時,php腳本可以生成并保存一個CSS文件(可以稱為user_ id.css)。我不記得為什么function會這樣做,但谷歌或這個網站是你的朋友。然后當用戶登錄時,CSS文件的位置將被保存在數據庫中,并在head標簽中被調用