1

我想在 Orchard 中创建一个网站主题,该主题已经内置在 ASP.NET MVC5 中。

我需要将我的标记从以前的 Layout.cshtml 页面复制到 orchard 主题/MyTheme/Views/Layout.cshtml 页面还是需要其他任何东西?

4

1 回答 1

5

TLDR;

本质上,是的:将 MVC5 布局内容复制到 Orchard 主题的 Layout.cshtml 文件中。

但还有一些别的东西:你的源 MVC5 Layout.cshtml 文件可能包含诸如<doctype>,<head><body>元素之类的东西。

这些元素需要进入一个名为Document.cshtml的新文件(也在主题的 Views 文件夹中)。

最终结果将是您的 Document.cshtml 文件包含外部 HTML 结构,包括<body>元素,但元素的内容<body> 驻留在 Layout.cshtml 文件中。

果园主题基础

尽管您在开始创建 Orchard 主题时不一定需要了解这一点,但我发现最终它会让您成为更有效的主题。所以这里有一个关于果园模板和形状的简要介绍。

Orchard 的模板引擎使用形状层次结构,它们是动态对象。每个形状都使用形状模板(通常以 Razor 视图的形式)呈现。

每个页面的根是Layoutshape,由 Layout.cshtml 形状模板呈现。

形状可以有“包装”。对于布局形状,定义了一个名为Document. 这实际上意味着在您的主题中,您可以有一个 Document.cshtml 文件和一个 Layout.cshtml 文件(如果您的主题中没有 Document.cshtml 文件,将使用默认文件)。

Document.cshtml 视图通常定义文档类型、<head>元素和<body>元素。形状的内容将在该元素<Layout>中呈现。<body>

因此,根据您在 MVC5 Layout.cshtml 文件中的内容,您可能需要也可能不需要在主题的 Views 文件夹中创建 Document.cshtml 文件。就我个人而言,我通常会这样做,以便在需要时轻松进行更改。

诸如页眉和页脚之类的内容通常会进入主题的 Layout.cshtml 文件,因此您可以从 MVC5 Layout.cshtml 文件中复制它们。

最终,您将希望将“硬编码”HTML 替换为来自 CMS 的内容。然后是时候开始向 Layout.cshtml 文件声明区域了。

要定义一个区域,您只需将以下内容添加到您的 Layout.cshtml 中:

@Display(Model.MyZoneName)

您可以随心所欲地使用任何区域名称(您不需要在其他任何地方定义它们;除非在您的主题清单文件 (Theme.txt) 中,以防您希望允许 CMS 用户将小部件添加到这些区域)。

Orchard 知道许多预定义的区域。在 Layout.cshtml 文件中,最重要的是 Content zone:

@Display(Model.Content)

内容区域是插入当前页面内容等内容的地方。还有其他视图,例如当您在 CMS 的登录页面上时的登录表单。

形状和区域还有很多,但我希望这至少能让你开始。

有关形状、区域和主题的更多信息,这里有一些有用的资源:

于 2017-11-20T11:39:46.673 回答