这可能是新手Qs ...我正在使用Sitecore 7作为我的网络应用程序,这就是我到目前为止所拥有的
数据模板 - 这只有一个名为“标题”的字段,用于显示页面特定标题
一个布局 - 这是指向我在asp.net mvc项目路径下的cshtml文件。这是从Doctype开始的完整标记。 head标签下的标题标签使用Sitecore的Html扩展来从#1中提到的模板渲染字段“Title”。这也通过在布局的body标签下名为“page-body”的占位符呈现sitecore的View。
我在asp.net mvc项目中创建了一个指向Razor视图的View Rendering。这个视图只是让h1调用了hello world。
Sitecore / Content / Home项目(来自sitecore的主树)使用#1中创建的模板并使用#2中创建的布局。此项目只有一个在#3
现在当我从我当地的sitecore网站点击根目录时,一切看起来都很棒!我在body标签下的H1标签中看到了Hello World,并在布局中提到了完整的html makrup ...
这就是事情开始变得复杂的地方......现在我希望我的View Rendering(在#3中创建)引用一个特定于此Rendering的CSS文件。此CSS不会被引用到所有页面。当然我想将引用添加到头部作为链接href。所以尝试使用asp.net mvs“部分”,但我一直得到那个甜蜜的错误“文件无法直接请求,因为它调用了rendersection方法......”所以我意识到我的视图渲染没有任何@ {Layout =“ ......“}和当前由sitecore引擎控制!!
所以我仍然继续在我的视图中添加了布局参考Rendering的cshtml文件,并参考Sitecore引擎所用的相同布局文件(即上面的#2)。我仍然有同样的错误。
然后我找到了一篇帖子Using sections in Editor/Display templates,主要是针对Scripts并试图实现CSS。但这不起作用,因为在头标记中的Helper被执行后执行View Rendering所以我的CSS引用永远不会在流中吐出。 BTW for Scripts这个解决方案非常有效,因为在Sitecore的视图渲染之后会调用脚本渲染帮助器。
此时我完全陷入了“如何在头标记中获取我的CSS参考查看渲染”。有任何sitecore专家在这里提供帮助吗?
答案 0 :(得分:3)
所以它绝对是一种更高级的自定义,但我们使用Cassette和renderLayout
管道的自定义来实现这一点。使用此管道可以解决在视图渲染之前调用的head标记中的助手问题。
/sitecore/templates/System/Layout/Renderings/View rendering
)并添加一个字段,用于存储要包含在页面上的Cassette包的名称。RenderLayoutProcessor
中,循环浏览所有页面呈现(Sitecore.Context.Page.Renderings
),检查包字段(rendering.RenderingItem.InnerItem[YOUR_FIELD]
)的呈现项,然后调用Cassette的Bundles.Reference
。 Bundles.RenderStylesheets()
。您也可以在没有Cassette的情况下完成此任务,但它使脚本和样式表的捆绑,引用和包含变得更加容易。
这种方法的另一个优点是它不会破坏Sitecore缓存。任何需要在View渲染中执行代码的方法都会导致Sitecore HTML缓存失效,因为当缓存渲染时,您的代码将无法执行,并且页面样式将被破坏。