【问题标题】:Can Docpad generate a json file that can be consumed by client-side javascript framework?Docpad 可以生成一个可以被客户端 javascript 框架使用的 json 文件吗?
【发布时间】:2014-06-05 07:25:02
【问题描述】:

是否可以将 Docpad 用作静态站点生成器,同时输出可供客户端 JS 应用使用的 json 文件?

我正在使用 Docpad 作为静态站点生成器来构建网站,并且我有一个活动部分,我希望活动主页列出使用 Docpad 发布的所有活动(带有指向活动详细信息页面的链接) .

我想要做的是通过循环一个包含所有事件的集合来生成事件列表,但我也想让列表更具交互性和可排序性(因为我们有各种各样的事件和希望让人们更容易找到感兴趣的事件)。

我想做的是将事件列表输出到 JSON 文件,我们可以将其传递给 AngularJS 应用程序,该应用程序执行事件的呈现、排序和显示。

我知道 Docpad 可以用来生成 xml,但是可以使用 Docpad 生成包含所需数据的 json 文件吗?到目前为止,我的尝试都失败了,这就是为什么我要问我所问的是否可能。我的备份是使用 XML,但我更喜欢 JSON,因为 Angular 可以原生使用它。

TIA。

【问题讨论】:

  • 我在toonoisyfish.be 上就是这样做的。事件的所有数据都存储在磁盘上的 json 文件中。我有一个(私人)页面,用于编辑需要密码的数据(将快速中间件添加到 docpad.coffee - 请参阅gist.github.com/balupton/4557006),并有一个将更改的数据保存到文件的路径。 (事实上​​,我用 PHP 实现了这一点,因为我的客户以前使用过它,但我找不到任何便宜的节点托管)
  • @SimonH1000 你能分享一些关于你有 DocPad 来生成 JSON 的细节吗?我仍然有点不清楚如何使用静态站点进行此操作。如果我理解正确,您是从 PHP 而不是从 DocPad 生成 JSON。我想让 DocPad 通过解析 DocPad 集合来生成它。
  • 基本上,您需要在 docpad.coffee 中使用 serverExtend 事件来创建一个快速挂钩,您也可以从客户端发布该挂钩并将结果保存到您的 .json 文件中。我找不到用于 Docpad 的代码,因为我最终不得不在 php 中实现。

标签: json docpad static-site


【解决方案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': '<%=@truncateText(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': '<%=@truncateText(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)%>

【讨论】:

    【解决方案2】:

    您是否尝试过使用现有的插件:

    或者至少看看他们的代码并针对您的用例进行修改?

    【讨论】:

      猜你喜欢
      • 2013-04-01
      • 2017-04-06
      • 1970-01-01
      • 1970-01-01
      • 2016-09-04
      • 2020-11-30
      • 1970-01-01
      • 1970-01-01
      • 2010-09-05
      相关资源
      最近更新 更多