2016-08-17 105 views
1

我已经(在我的部分很少一把umbraco知识)继承了一把umbraco系统,我目前通过“品牌”的文件看网站目前动态CSS样式

的品牌/造型被控制的性能类型,它允许网站管理员指定背景颜色,字体等

作为一个普遍的问题,人们如何实现这种类型的样式,而无需网站一直进行查找以获取各种文档类型属性的值?

ie:如果网站管理员将“品牌”文档的背景颜色从红色更改为蓝色,然后重新发布网站/发布网页,那么更改是如何传递给网站的CSS文件的使用?

该网站似乎是使用较少几乎做到了“实时查询”反对一把umbraco,这是不是很高性能的

+0

不看代码就很难说。我的猜测是这些值没有被合并到一个CSS文件中,而是一个内容节点被用作CSS文件,应用了一个模板?只是一个猜测,但如果我错了,请在这里澄清一下。 关于性能,它不应该是坏的。你有分析过吗? Umbraco编译成内存缓存,所以每次都没有数据库查找,并且在那里的性能(一般来说)是好的。有了正确的HTTP头文件,CSS文件也可以理想地缓存在客户端,但这当然需要首先存在这些头文件。 – trnelson

回答

1

作为一个普遍的问题,人们如何实现这种类型的样式,而无需网站一直进行查找以获取各种文档类型属性的值?

如果您希望内容编辑者通过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> 

你觉得呢?让我知道这是否会触及现场,或者如果我错过了您真正想知道的内容,或者我是否跳过了您感兴趣的内容。