2014-06-05 35 views
0

是否有可能使用Docpad作爲靜態網站生成器,同時輸出客戶端JS應用程序可以使用的json文件?Docpad可以生成一個可以被客戶端JavaScript框架使用的json文件嗎?

我正在建立一個使用Docpad作爲靜態網站生成器的網站,並且我有一個活動部分,我希望活動主頁列出使用Docpad發佈的所有活動(帶有指向活動詳細信息頁面的鏈接)。

我想要做的是通過循環遍歷一個包含所有事件的集合來生成事件列表,但我也希望使列表更具交互性和可排序性(因爲我們有各種事件並希望讓人們很容易找到感興趣的事件)。

我想要做的事情是將事件列表輸出到一個JSON文件,我們可以將它傳遞給一個AngularJS應用程序,該應用程序對事件進行演示,排序和顯示。

我知道Docpad可以用來生成一個XML,但是可以使用Docpad來生成一個帶有所需數據的JSON文件嗎?到目前爲止,我的嘗試失敗了,這就是爲什麼我問我是否甚至有可能提問。我的備份是使用XML,但我更喜歡JSON,因爲Angular可以本地使用它。

TIA。

+0

我在http://www.toonoisyfish.be/上就是這麼做的。所有事件的數據都存儲在磁盤上的json文件中。我有一個(專用)頁面用於編輯需要密碼的數據(向docpad.coffee添加快捷中間件 - 請參閱https://gist.github.com/balupton/4557006),並有一條路徑將更改的數據保存到文件中。(事實上​​,我使用PHP實現了這一點,因爲我的客戶之前使用過這種方法,並且我找不到任何節點託管那麼便宜) –

+0

@ SimonH1000可以分享一些有關DocPad生成JSON的細節嗎?我仍然不清楚如何使用靜態網站進行這項工作。如果我理解正確,那麼您不是從DocPad生成來自PHP的JSON。我想讓DocPad通過解析DocPad集合來生成它。 –

+0

基本上,您需要在docpad.coffee中使用serverExtend事件來創建一個快速掛鉤,您可以從客戶端發佈並將結果保存到.json文件中。我找不到Docpad的代碼,因爲我最終不得不在php中實現。 –

回答

1

如果我正確地理解了這個問題,那麼您應該能夠在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)%> 
相關問題