Middleman - 如何将博客文章转换为data / posts.json?

时间:2015-08-27 15:37:07

标签: middleman

目标: 在构建时,将博客的前端内容转换为data/posts.json,以便我可以使用我的闪亮 MVCofTheWeek.js

迭代data.posts.json

背景 使用middleman-blog gem,尝试将博客前端内容转换为存储在data/posts.json

中的json文件

问题我似乎无法以blog.articles的方式访问page_articlesconfig.rb等我在视图中的方式(他们似乎是在Middleman::Application::MiddlemanApplication1)。我无法判断我是否缺少正确的帮助方法或需要一些额外的配置才能访问config.rb中的博客帖子

尝试到目前为止,我已尝试过以下操作,但范围内都没有#blog

  1. 探索构建custom extension并尝试activate
  2. 访问activate :blog集团中的帖子,但这是一个不同的类(Middleman::Configuration::ConfigurationManager)且没有#articles
  3. 有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我最终采取了不同的方法来解决最初的问题。这是跳过数据,只是抓住blog.articles并将direclyt放在init.js.erb文件中。我还使用了一个辅助方法来清理它。

// init.js.erb

var app = app || {};

$(function() {
  'use strict';
  var data = <%= blog_posts_as_json %>; // get data as json

  var posts = _.map(data, function(p) {
    return JSON.parse(p) // parse json and put in var posts
  });
});

## config

helpers do

  def blog_posts_as_json
   blog.articles.map { |b|
      b.data.to_json
    }
  end
end

但是,这不允许我将文章摘要等内容添加到哈希中,因此有一些问题需要解决。

答案 1 :(得分:0)

我没有使用它,但有人创建了一个“Middleman-API”扩展程序,可以执行您正在尝试的操作:https://github.com/jordanandree/middleman-api

在Jekyll网站中经常使用的另一个解决方案是构建一个循环浏览博客帖子的JSON模板文件。这通常是将客户端站点搜索添加到静态站点的方式 - 生成的JSON文件将成为为Javascript搜索小组件提供支持的索引。

一个非常简单的例子如下:

---
---
[
    {% for post in site.posts %}
    {
      "title"    : "{{ post.title }}",
      "href"     : "{{ post.url }}",
      "date"     : {
         "day"   : "{{ post.date | date: "%d" }}",
         "month" : "{{ post.date | date: "%B" }}",
         "year"  : "{{ post.date | date: "%Y" }}"
      }
    }
    {% unless forloop.last %},{% endunless %}
    {% endfor %}
]

这是Jekyll语法,使用Liquid进行模板化,但你可以使用ERB,HAML等来做同样的事情。 site.posts需要是您正常用于访问博客文章的变量。您可以添加您想要以这种方式访问​​的任何其他字段,包括帖子的全部内容。

您想要将此文件称为 posts.json.liquid (或您用于模板的任何语言)。

一个问题是在您的内容中转义HTML。这可能是一个帮助方法的工作,它会在你给它的任何输入上调用to_json

一些相关的链接(再次,基于Jekyll,但它是一个类似的问题):