如何以编程方式将脚本或样式表标签添加到页面的 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 [])
..这完全没问题,它确实可以按预期工作,但是它似乎没有为我提供足够的自由来在将内容注入页面之前对其进行操作..即使有可能我也不喜欢拥有的想法布局模板中有一些繁重的逻辑,我希望它在插件/docpad.coffee 中
希望这是有道理的