Sitecore 7 : Combine CSS from View Renderings into the Layout <head> area

标签 sitecore sitecore7

这可能是一个新手问题...我正在为我的 Web 应用程序使用 Sitecore 7,这就是我到目前为止所拥有的

  1. 数据模板 - 只有一个名为“标题”的字段,用于显示页面特定标题

  2. 一个布局 - 这指向 asp.net mvc 项目路径下的我的 cshtml 文件。这具有从 Doctype 开始的完整标记。 head 标签下的标题标签使用 Sitecore 的 Html 扩展来呈现 #1 中提到的模板中的“Title”字段。这还会通过布局的 body 标记下名为“page-body”的占位符呈现 sitecore 的 View 。

  3. 我在我的 asp.net mvc 项目中创建了一个指向 Razor View 的 View 渲染。这个 View 只有 h1 调用 hello world。

  4. Sitecore/Content/Home 项目(来自 sitecore 的主树)使用 #1 中创建的模板并使用 #2 中创建的布局。该项目有且仅有一个在 #3 中创建的渲染

现在,当我从本地 Sitecore 网站进入根目录时,一切看起来都很好!我在 body 标签下的 H1 标签中看到 Hello World,并在布局中提到了完整的 html makrup...

这就是事情开始变得复杂的地方......现在我希望我的 View 渲染(在#3中创建)引用仅特定于此渲染的CSS文件。这个CSS不会被所有页面引用。当然,我想将引用作为链接 href 添加到头部。所以尝试使用 asp.net mvs“Section”,但我不断收到那个甜蜜的错误“无法直接请求文件,因为它调用 rendersection 方法...”所以我意识到我的 View 渲染没有任何 @{Layout = "..."} 当然这是由 sitecore 引擎控制的!

所以我仍然继续在我的 View 渲染的 cshtml 文件中添加布局引用,并引用与 Sitecore Engine 相同的布局文件(即上面的#2)。我仍然有同样的错误。

然后我发现了一个帖子Using sections in Editor/Display templates这本质上是针对脚本的,并尝试针对 CSS 进行实现。但这也不起作用,因为 View 渲染是在 head 标签中的 Helper 执行之后执行的,所以我的 CSS 引用永远不会在流中吐出。顺便说一句,对于脚本来说,这个解决方案非常完美,因为脚本渲染助手是在 Sitecore View 渲染之后调用的。

此时我完全陷入了“如何在 head 标签中获取用于 View 渲染的 CSS 引用”的问题。有任何 Sitecore 专家可以提供帮助吗?

最佳答案

所以这绝对是更高级的自定义,但我们使用Cassette来做到这一点以及对 renderLayout 管道的自定义。使用此管道解决了在 View 渲染之前调用 head 标记中的帮助程序的问题。

  1. 扩展 View 呈现模板 (/sitecore/templates/System/Layout/Renderings/ViewRendering) 并添加一个字段,用于存储要包含在页面上的 Cassette 包的名称。
  2. RenderLayoutProcessor 中,循环遍历所有页面渲染 (Sitecore.Context.Page.Renderings),检查捆绑字段的渲染项 (rendering .RenderingItem.InnerItem[YOUR_FIELD]),并调用 Cassette 的 Bundles.Reference
  3. 在主布局的标题中,调用 Cassette 的 Bundles.RenderStylesheets()

您也可以在不使用 Cassette 的情况下完成此任务,但它使脚本和样式表的捆绑、引用和包含变得更加容易。

这种方法的另一个优点是它不会破坏 Sitecore 缓存。任何需要在 View 渲染中执行代码的方法都会使 Sitecore HTML 缓存变得毫无用处,因为当渲染被缓存时,您的代码将不会执行,页面样式也会被破坏。

关于Sitecore 7 : Combine CSS from View Renderings into the Layout <head> area,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22154396/

相关文章:

c# - 替代 ToString() 进行索引搜索(C# 转换为 SQL)

sitecore - 获取与 Sitecore 中的 URL 匹配的项目

sitecore - WFFM 中的 DropList 字段在消息正文中显示值

sitecore - 通过代码隐藏 Sitecore 中的快速信息

sitecore - 是否可以将查询用作使用 Glass Mapper 进行 Sitecore 渲染的数据源?

Sitecore 7 WFFM 无法加载文件或程序集 'HtmlAgilityPack,版本 = 1.4.0.0

xml - Sitecore 7 :Calling one xml control from other xml control

sitecore - Sitecore 的 core、master 和 web 数据库之间有什么区别?

asp.net - Sitecore:打开 HTML 缓存会阻止回发行为

使用指定用户登录后 Sitecore Tracker 为空