作爲一個普遍的問題,人們如何實現這種類型的樣式,而無需網站一直進行查找以獲取各種文檔類型屬性的值?
如果您希望內容編輯者通過umbraco控制樣式,您肯定必須在某個時間點查看這些值。問題是如何最好地緩存數據以及如何最好地查詢它。我不會在這裏花費盡可能多的時間來緩存。根據設置的方式,您可能只能使用Html.CachedPartial(...)。至於你如何從umbraco查詢,我看到了很多代碼,看起來像這樣:
var cs = ApplicationContext.Current.Services.ContentService;
var node = cs.GetById(nodeId);
var value = node.GetValue("backgroundColorHex");
使用ContentService將命中數據庫。你不想那樣。它會減慢你的網站很多。如果您打算以編程方式編輯內容,則應該只使用ContentService。這裏將是一個更好的方式來查詢一把umbraco數據:
var node = Umbraco.TypedContent(nodeId);
var value = node.GetPropertyValue<string>("backgroundColorHex");
上面的代碼使用UmbracoHelper查詢一把umbraco。由於它利用了很多umbraco內置的緩存,因此速度明顯更快。
如果網站管理員將「品牌」文檔的背景顏色從紅色更改爲藍色,然後重新發布該網站/發佈該網頁,那麼這些更改是如何傳遞給網站使用的CSS文件的?
如果你可以把它關閉,一個選項是使用剃鬚刀分配不同的類到你的html元素。您的LESS可以選擇這些課程並分配適當的樣式。這很整潔,因爲你不必編寫任何內聯的CSS。訣竅是,如果內容編輯者可以輸入ANY十六進制顏色,他們可以想象,編寫邏輯可以將這些十六進制值轉換爲類,這可能會非常嚴重。
@* Some logic here that gets the hex values from umbraco and converts the data to classes maybe? This depends on what the color data looks like *@
<div class="@bgColorClass @fontColorClass @borderClass">
...
</div>
否則,你可以寫這樣的事情
<div style="background-color:@bgColor;">
...
</div>
你覺得呢?讓我知道這是否會觸及現場,或者如果我錯過了您真正想知道的內容,或者我是否跳過了您感興趣的內容。
不看代碼就很難說。我的猜測是這些值沒有被合併到一個CSS文件中,而是一個內容節點被用作CSS文件,應用了一個模板?只是一個猜測,但如果我錯了,請在這裏澄清一下。 關於性能,它不應該是壞的。你有分析過嗎? Umbraco編譯成內存緩存,所以每次都沒有數據庫查找,並且在那裏的性能(一般來說)是好的。有了正確的HTTP頭文件,CSS文件也可以理想地緩存在客戶端,但這當然需要首先存在這些頭文件。 – trnelson