getBlock('meta')如何在DocPad中运行?

时间:2013-02-05 02:04:33

标签: javascript node.js docpad static-site

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

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

另外,我注意到默认情况下 getBlock('meta')会创建一个标记:

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

我不喜欢我的标记。我全都是为了归功于令人敬畏的DocPad项目,但我更喜欢以不同的方式和不同的位置。如何防止生成该标记?

谢谢。

4 个答案:

答案 0 :(得分:2)

@przemo_li和@Rafael Epplee是正确的,通过标准安装,元块只会输出,如果你有时间通过​​docpad配置选项提交拉动请求以使该动力元元素可选 - 我我乐意接受它。

然而,重点不仅仅是输出被供电的元素,而是让插件能够注入自己的元数据 - 我还没有发现任何插件,但是一个很好的例子可以从@ Rafael的例子中给出 - 你通过你的文档的元数据定义元元素,然后使用插件将它们注入元块,允许你轻松地获得页面特定的元数据。另一个例子可能是根据文档的编码适当地注入charset / encoding元素,而不是总是使用标准utf8编码的布局。

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

答案 1 :(得分:1)

忘了它。

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

只要您不需要特定于页面的元,就可以了。

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

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:0)

我的答案很晚,但截至目前,Docpad是v6.78.4并提供了连接事件的方法,这正是我们所需要的。

首先,Docpad meta 是一个令人惊讶的平静MetaCollection,它基本上是一个项目数组,使用.toHTML()方法将它们连接成一个字符串。它被称为,因为它驻留在可以在别处修改的不同结构中,并且具有一组单独的方法,例如getBlock()setBlock()

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

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

关于第二个问题,generator中有条件地添加了元DocPad.prototype.resetCollections(我猜这是问题中的X-Powered-By):

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

您可以在poweredByDocPad: false文件中添加docpad.coffee来停用它。