【问题标题】:Sitecore 7 : Combine CSS from View Renderings into the Layout <head> areaSitecore 7:将视图渲染中的 CSS 合并到布局 <head> 区域
【发布时间】:2014-04-04 22:50:27
【问题描述】:

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

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

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

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

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

现在,当我从本地 sitecore 网站访问根目录时,一切看起来都不错!我在body标签下的H1标签中看到Hello World,布局中提到了完整的html makrup...

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

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

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

在这一点上,我完全被困在“如何在 head 标签中获取我的 CSS ref 以进行视图渲染”。有任何 sitecore 专家可以在这里提供帮助吗?

【问题讨论】:

  • 为什么不在 all 页面上包含 all 您的 CSS,并使用 CSS 选择器在你的渲染,通过 ID 或 css class 选择器?

标签: sitecore sitecore7


【解决方案1】:

所以这绝对是一个更高级的自定义,但我们使用Cassette 和对renderLayout 管道的自定义来执行此操作。使用此管道可以解决您在视图渲染之前调用 head 标记中的帮助程序的问题。

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

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

这种方法的另一个优点是它不会破坏 Sitecore 缓存。任何需要在视图渲染中执行代码的方法都会使 Sitecore HTML 缓存失效,因为当渲染被缓存时,您的代码将不会执行并且页面样式将被破坏。

【讨论】:

  • 这对我来说听起来完全超出了工程解决方案。 Cassette 正在做什么,甚至 IIS Request Reduce 模块都可以为我做,而无需添加单行代码。只要我在 Head 中有所有 CSS 和页面底部的所有脚本,IIS Request Reduce 就会在运行时合并、缩小和所有这些好东西。我不明白“为什么 Sitecore 不允许我使用 Section 和 RenderSection”。即使 View Rendering 提到了 Layout 文件,Sitecore 也不喜欢将 RenderSection 调用添加到 Layout 文件中。
  • 对 Sitecore MVC 的了解不足以回答这个问题,但我想您会发现这种方法可能会让您无法使用 Sitecore 的 HTML 缓存。
猜你喜欢
  • 2012-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多