我继承了Umbraco系统(我的Umbraco知识很少),我目前正在关注网站的性能
品牌/样式目前通过“品牌”文档类型进行控制,该类型允许网站管理员指定背景颜色,字体等
作为一般性问题,人们如何实现这种类型的样式,而网站不必一直进行查找以获取各种文档类型属性的值?
即:如果网站管理员将“品牌”文档的背景颜色从红色更改为蓝色,然后重新发布网站/发布页面,那么更改如何传递到网站使用的CSS文件中?
该网站似乎使用LESS几乎对Umbraco进行“实时查询”,这不是非常高效的
答案 0 :(得分: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内置的缓存。
如果网站管理员更改&#34;品牌&#34;的背景颜色文档从红色到蓝色,然后重新发布网站/发布页面,更改如何传递到网站使用的CSS文件?
如果你可以将它拉下来,一个选择是使用剃须刀为你的html元素分配不同的类。你的LESS可以选择这些课程并指定合适的风格。这很简洁,因为您不必编写任何内联css。诀窍在于,如果内容编辑者可以输入他们可以想象的任何十六进制颜色,那么编写将这些十六进制值转换为类的逻辑可能有点粗略。
@* 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>
你怎么看?让我知道,如果这个到达现场,或者我是否错过了你真正想知道的东西,或者我是否跳过你很好奇的东西。
答案 1 :(得分:0)
我在使用LESS的项目中做到了这一点。我的方法是使用dotless从较少的文件生成css文件。 (http://www.dotlesscss.org/)
我在umbraco发布事件后生成了样式表 https://our.umbraco.org/documentation/reference/events/ContentService-Events
在此之后,您可以将css文件作为普通静态文件加载。