如何在Docpad中以编程方式在每页的基础上添加脚本或样式表

时间:2013-07-11 23:15:26

标签: docpad

如何以编程方式将脚本或样式表标记添加到页面的YAML前端内容(元)中指定的页面?

假设src/documents/posts/a.html.eco有以下内容:

---
layout: default
scripts: ['a.js']
---

Blog post that requires a special javascript

和布局src/layouts/default.html.eco包含以下内容:

...
@getBlock('scripts').toHTML()
</body>
...

posts/a.html的最终结果应为:

...
<!-- some extra stuff that was added when processing script tag -->
<script scr="/scripts/a.js"></script>
</body>
...

..而其他网页不应该引用/scripts/a.js

上面标记的标记只是为了表明在注入标记之前可能存在一些处理。

我在events文件中使用了不同的docpad.coffee尝试了很多方法(包括从docpad-plugin-livereload插件中获取的方法)但每次遇到同样的问题时 - 脚本标记都应用于所有页面而不是仅应用于a.html。这是我的尝试之一:

renderDocument: (opts) ->
  {extension,templateData,file,content} = opts
  if extension == 'html' and scripts = file.get('scripts')
    if typeof scripts != 'undefined'
      scripts.forEach (scriptName) ->
        @docpad.getBlock('scripts').add('<!-- custom script tag here -->')

我还尝试了render事件,populateCollections(我没有记录,但是我在docpad-plugin-livereload插件中找到了它)甚至extendTemplateData事件也没有运气到目前为止。

我知道在布局中有一种方法可以做到这一点:

@getBlock('scripts').add(@document.scripts or [])

..这是完全正常的,它确实按预期工作,但它似乎没有提供足够的自由来操纵内容,然后它被注入页面..即使它&# 39;可能我不喜欢在布局模板中加入一些重要逻辑的想法,我希望它在插件/ docpad.coffee中

希望这是有道理的

1 个答案:

答案 0 :(得分:0)

尝试使用templateData.getBlock('scripts').add代替docpad.getBlock('scripts').add