2013-07-11 66 views
4

如何以編程方式將腳本或樣式表標記添加到頁面的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中

希望有道理

+0

你試過了FrontEnd插件嗎? https://github.com/sergeche/docpad-plugin-frontend如果這對你有用,那麼我可以把它放在答案中。 :) – greduan

+0

感謝您的評論。是的,我已經檢查過這個插件。它不使用Docpad的'@ getBlock'來添加腳本,但它會創建自定義的@assets對象,然後填充它,然後在佈局中遍歷它。我正在尋找利用本地Docpad的'@ getBlock'幫手的解決方案。 –

回答

0

嘗試templateData.getBlock('scripts').add而不是docpad.getBlock('scripts').add

+0

剛剛嘗試過'render'和'renderDocument'事件,它不適用於我.. –

+0

,,雖然將任何屬性賦值給templateData並將其打印在頁面上 –

相關問題