ページの 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
。これが私の試みの1つです:
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 [])
..これはまったく問題なく、実際に期待どおりに機能しますが、コンテンツがページに挿入される前にコンテンツを操作するのに十分な自由を提供していないようです..そして、それが可能であったとしても、レイアウト テンプレート内のいくつかの重いロジックを、plugin/docpad.coffee に入れたい
うまくいけば、それは理にかなっています