【问题标题】:Can I select the layout to use for a page with Wyam?我可以选择用于 Wyam 页面的布局吗?
【发布时间】:2019-03-30 09:09:14
【问题描述】:

我正在为Wyam 设计一个主题,我想知道是否有一种方法可以设置特定页面的降价文件中应该使用的布局。就我目前所见,似乎用markdown创建的每个页面都使用_Layout.cshtml

更具体一点。我正在创建一个“about.md”页面,该页面的布局与其他(默认)页面不同。

所以我想做的是使用元数据来选择布局。例如

Layout: _About.cshtml

Layout: _About

Wyam 可以做到这一点吗?

【问题讨论】:

    标签: wyam


    【解决方案1】:

    在 Razor 文件中

    Wyam 食谱中的页面(我假设您使用的是 blog 或 docs 食谱)由 Razor 处理。 _Layout.cshtml 的使用是配方中的约定,但可以使用标准 Razor 语法指定替代布局。您可以通过将以下内容放在 about 页面的顶部 .cshtml 文件(您的前端):

    @{
        Layout = "_About.cshtml";
    }
    

    在 Markdown 文件中

    Markdown 文件也由 Razor 引擎处理,因此如果不是 Markdown 处理器转义 @ 符号,上述技术起作用。确实没有什么好办法,您的问题的简单答案是您不能为 Markdown 文件指定备用布局。

    但是,使用 Wyam 等代码驱动生成器的优势之一是您可以进行大量控制。在这种情况下,您可以将 RenderPages 管道替换为完全符合您要求的管道。将以下内容添加到您的 wyam.config 文件中:

    int index = Pipelines.IndexOf(Blog.RenderPages);
    Pipelines.Remove(Blog.RenderPages);
    Pipelines.Insert(index, Blog.RenderPages,
        (IPipeline)new Wyam.Web.Pipelines.RenderPages(
            Blog.RenderPages,
            new Wyam.Web.Pipelines.RenderPagesSettings
            {
                Pipelines = new string[] { "Pages" },
                Layout = (doc, ctx) => doc.String("Layout", "/_Layout.cshtml")
            }));
    

    然后您将能够添加一个“布局”值作为前面的内容,就像您在问题中所写的一样。

    总的来说这是一个好主意,所以我还打开了一个问题以默认将此行为添加到配方中。

    【讨论】:

    • 感谢您的回答,但我已经知道了。我想做的是在.md 文件中选择一个模板。我将更改我的问题以使其更清楚。
    • @JohanVergeer Gotcha - 我编辑了我的答案,以展示如何通过替换配置文件中的管道来做到这一点
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 2010-09-19
    • 1970-01-01
    • 2017-12-01
    • 2012-02-15
    • 1970-01-01
    • 2012-02-15
    相关资源
    最近更新 更多