在Orchard CMS中使用Document.cshtml的替代方案

本文关键字:cshtml 方案 Document Orchard CMS | 更新日期: 2023-09-27 18:29:01

我目前在一个网站上工作,该网站需要覆盖document.cshtml文件,以便我可以根据用户的当前位置应用特定的CSS类。

我曾尝试使用URL替代方案,如:

  • Document.cshtml
  • 文档url AreaA.cshtml
  • 文档url AreaB.cshtml
  • Document.url AreaC.cshtml

然而,它们似乎都使用Document.cshtml,而不是使用基于URL的Document.cshhtml。我很容易理解这是预期的目的,但我想知道是否有可能实现上面的功能。


更新

我相信我可能在这方面取得了一些进展,而不是使用URL替代方案,简单地在模型上添加一个字段(用于文档),简单地提取网站的当前"区域"并将该类应用于正文。

(在document.cs.html中)

@using Orchard.Mvc.Html;
@using Orchard.UI.Resources;
@{
    RegisterLink(new LinkEntry {Type = "image/x-icon", ...});
    string title = Convert.ToString(Model.Title);
    string siteName = Convert.ToString(WorkContext.CurrentSite.SiteName);
     //Pull the Area here
    string area = Model.DesignatedAreaField;
}
<!DOCTYPE html> 
<html lang="en" class="static @Html.ClassForPage()"> 
<head> 
    <meta charset="utf-8" />
    <title>@Html.Title(title, siteName)</title> 
    @Display(Model.Head)
</head> 
<body class='@area'>
//Body goes here
@Display(Model.Body)
@Display(Model.Tail)
</body>
</html>

我认为,这可能是一个比以前建议的更容易的解决办法。然而,我想知道,实际放置我可以从文档模型访问的字段的最简单方法是什么。

在Orchard CMS中使用Document.cshtml的替代方案

Document.cshtml是Layout形状的包装器。包装器不支持备用。有选择地替换document.cshtml模板的唯一方法是从布局形状的元数据上的wrappers集合中删除现有的wrapper,然后添加您自己的。

但是等等。。。我想不出有什么好的理由让你这么做。document.cshtml中的内容是样板HTML,在整个网站上应该是相同的。更新中描述的解决方案是可行的。

您还可以将<body>标记移动到Layout.cshtml中,然后使用Layout.cshtml的URL替代项来设置<body>'s类属性。

您可能想看看这篇文章:http://weblogs.asp.net/bleroy/archive/2010/12/14/switching-the-layout-in-orchard-cms.aspx.它展示了如何动态添加自己的备选方案,但同样的方法也可以根据地理位置将属性添加到模型或布局中。

我认为您可以在OnResultExecuting()中定义一些代码,以便向Model类动态添加属性。既然它是动态类型的,你应该可以设置它,不需要什么特别的东西。