2

我正在将网站从不同的站点生成器移动到DocPad,并试图了解getBlock('meta')功能。弄清楚getBlock('scripts')getBlock('styles')非常容易,因为我只需要将单个资源位置传递给数组中的.add方法,每个位置占用一个空间。另一方面,生成元标记似乎必须稍微复杂一些,因为每个标记都有两个组件:名称和值。

我的问题是,如何将元标记名称和值传递给getBlock('meta').add()以便它为我创建一些元标记?

另外,我注意到getBlock('meta')默认创建一个标签:

<meta http-equiv="X-Powered-By" content="DocPad"/>

我不想在我的标记中有。我完全赞成将令人敬畏的 DocPad 项目归功于它,但是我更喜欢以不同的方式和在不同的位置进行。如何防止生成该标签?

谢谢你。

4

4 回答 4

2

@przemo_li 和 @Rafael Epplee 是对的,通过标准安装,如果您有时间提交拉取请求以通过 docpad 配置选项使该支持的元元素成为可选,则元块只会输出该内容 - 我很乐意接受。

然而,它的意义不仅仅是输出那个由驱动的元素,而是让插件能够注入他们自己的元数据——我还不知道有任何插件这样做,但可以从以下给出一个很好的例子@Rafael 的示例 - 您通过文档的元数据定义元元素,然后使用插件将它们注入元块,让您轻松拥有特定于页面的元数据。另一个例子可能是根据文档的编码适当地注入字符集/编码元元素,而不是总是使用标准 utf8 编码的布局。

因此,虽然它现在不是那么有用,但有一天插件可能会需要它。

于 2013-03-12T22:03:23.243 回答
1

在我看来,docpad 对getBlock('meta').add(). 我查看了源代码,其他块都在 add() 上生成了一些特定于块的 HTML,而元块没有。

我的猜测是 docpad 自动从文档中收集元数据并以其他方式将它们插入到元块中。

我认为目前将元数据添加到您的站点的唯一可能方法是使用文档或 docpad.coffee 文件。

于 2013-03-08T13:59:35.773 回答
1

忘掉它。

手写你自己的元数据。在您的布局中。

只要您不需要特定于页面的元数据,您就可以使用。

如果您需要它,您可以随时更改 DocPad 的源代码。

于 2013-02-08T21:31:30.043 回答
0

我的回答已经很晚了,但到目前为止,Docpad 是 v6.78.4,并提供了挂钩事件的方法,这正是我们所需要的。

首先,Docpad meta是一个出人意料的平淡无奇的MetaCollection,它基本上是一个项目数组,带有一种.toHTML()将它们连接成字符串的方法。它被称为,因为它驻留在可以在其他地方修改的不同结构中,并且具有一组单独的方法,例如getBlock()setBlock()

事件是可以触发用户代码的预定义点。我建议对元事物使用 generateBefore,以便在生成任何内容之前设置它:

# Define the DocPad Configuration
docpadConfig = {
    # ...
    events:
        generateBefore: () ->
            @docpad.getBlock('meta').add('<meta name="viewport" content="width=device-width,initial-scale=1"/>')
}

至于第二个问题,元generator(我猜它是 X-Powered-By 在问题中)有条件地添加到DocPad.prototype.resetCollections

if (docpad.getConfig().poweredByDocPad !== false) {
    meta.add("<meta name=\"generator\" content=\"DocPad v" + (docpad.getVersion()) + "\" />");
}

poweredByDocPad: false您可以通过在docpad.coffee文件中添加 a 来禁用它。

于 2016-02-14T22:12:39.123 回答