如何以編程方式將腳本或樣式表標記添加到頁面的YAML前置事項(元)中指定的頁面?如何以編程方式在Docpad中的每頁基礎上添加腳本或樣式表
假設有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>
...
..而其他網頁不應該有e參考/scripts/a.js
上面的註釋標記只是表明在注入標記之前可能會有一些處理環境。
我試過很多方法在文件(包括docpad-plugin-livereload
插件採取的做法),但每次我面臨同樣的問題時使用不同的events
- script標籤被應用到所有頁面,而不是隻應用於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中
希望有道理
你試過了FrontEnd插件嗎? https://github.com/sergeche/docpad-plugin-frontend如果這對你有用,那麼我可以把它放在答案中。 :) – greduan
感謝您的評論。是的,我已經檢查過這個插件。它不使用Docpad的'@ getBlock'來添加腳本,但它會創建自定義的@assets對象,然後填充它,然後在佈局中遍歷它。我正在尋找利用本地Docpad的'@ getBlock'幫手的解決方案。 –