如果我正確地理解了這個問題,那麼您應該能夠在Docpad中生成一個JSON文件,就像您做其他文檔一樣。除了選擇您最喜歡的模板插件之外,沒有什麼需要特別的了。我這樣做是使用ECO模板插件生成我的職位的JSON文件:
<% posts = @getCollection('posts').toJSON() %>
<%content = posts[0].contentRenderedWithoutLayouts or posts[0].content%>
<%#handle first item manually just to avoid the last array member having a hanging comma%>
[{
'title': '<%-posts[0].title%>',
'date' : '<%-posts[0].date.toDateString()%>',
'content': '<%[email protected](content,700)%>',
'slug': '<%-posts[0].slug%>',
'url': '<%-posts[0].url%>'
<% posts = posts.slice(1)%>
<% for post in posts: %>
<%content = post.contentRenderedWithoutLayouts or post.content%>
},{
'title': '<%-post.title%>',
'date' : '<%-post.date.toDateString()%>',
'content': '<%[email protected](content,700)%>',
'slug': '<%-post.slug%>',
'url': '<%-post.url%>'
<%end%>
}]
在此之後,只要給模板文件中的雙擴展名:「json.eco」
我使用了類似的技術來組合和縮小css文件,我認爲你可以使用這種方法來生成任何文檔格式。
編輯(事後)
作爲該專門爲JSON你可以只使用一個工作更容易的解決方案JavaScript的內置函數的對象轉換成JSON。
<%-JSON.stringify(@getCollection('posts').toJSON())%>
或得到一個很好的格式化的版本
<%-JSON.stringify(@getCollection('posts').toJSON(),null,2)%>
我在http://www.toonoisyfish.be/上就是這麼做的。所有事件的數據都存儲在磁盤上的json文件中。我有一個(專用)頁面用於編輯需要密碼的數據(向docpad.coffee添加快捷中間件 - 請參閱https://gist.github.com/balupton/4557006),並有一條路徑將更改的數據保存到文件中。(事實上,我使用PHP實現了這一點,因爲我的客戶之前使用過這種方法,並且我找不到任何節點託管那麼便宜) –
@ SimonH1000可以分享一些有關DocPad生成JSON的細節嗎?我仍然不清楚如何使用靜態網站進行這項工作。如果我理解正確,那麼您不是從DocPad生成來自PHP的JSON。我想讓DocPad通過解析DocPad集合來生成它。 –
基本上,您需要在docpad.coffee中使用serverExtend事件來創建一個快速掛鉤,您可以從客戶端發佈並將結果保存到.json文件中。我找不到Docpad的代碼,因爲我最終不得不在php中實現。 –