目标:
在构建时,将博客的前端内容转换为data/posts.json
,以便我可以使用我的闪亮 MVCofTheWeek.js
data.posts.json
背景
使用middleman-blog
gem,尝试将博客前端内容转换为存储在data/posts.json
问题我似乎无法以blog.articles
的方式访问page_articles
,config.rb
等我在视图中的方式(他们似乎是在Middleman::Application::MiddlemanApplication1
)。我无法判断我是否缺少正确的帮助方法或需要一些额外的配置才能访问config.rb
中的博客帖子
尝试到目前为止,我已尝试过以下操作,但范围内都没有#blog
:
activate
activate :blog
集团中的帖子,但这是一个不同的类(Middleman::Configuration::ConfigurationManager
)且没有#articles
有什么想法吗?
答案 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,但它是一个类似的问题):