4

ページの 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-livereloadextendTemplateData

レイアウト内でこれを行う方法があることは知っています:

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

..これはまったく問題なく、実際に期待どおりに機能しますが、コンテンツがページに挿入される前にコンテンツを操作するのに十分な自由を提供していないようです..そして、それが可能であったとしても、レイアウト テンプレート内のいくつかの重いロジックを、plugin/docpad.coffee に入れたい

うまくいけば、それは理にかなっています

4

1 に答える 1

0

templateData.getBlock('scripts').add代わりに試してくださいdocpad.getBlock('scripts').add

于 2013-07-15T23:02:16.750 に答える