作为一个普遍的问题,人们如何实现这种类型的样式,而无需网站一直进行查找以获取各种文档类型属性的值?
如果您希望内容编辑者通过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